Guide - P2P IBD section

- Updated .dot files
 - Minor adjustments for Dash
This commit is contained in:
thephez 2017-11-16 11:00:37 -05:00
parent abd191981c
commit 4046ac0639
12 changed files with 50 additions and 44 deletions

View file

@ -92,9 +92,7 @@ the status of payment.
https://github.com/dashpay/dash/commit/2e7009d67b862cf822a1c70e181de6af659a3096
-->
To avoid this possible delay, BitcoinJ always uses dynamic DNS seeds to
get IP addresses for nodes believed to be currently active.
Dash Core also tries to strike a balance between minimizing delays
Dash Core tries to strike a balance between minimizing delays
and avoiding unnecessary DNS seed use: if Dash Core has entries in
its peer database, it spends up to 11 seconds attempting to connect to
at least one of them before falling back to seeds; if a connection is
@ -106,7 +104,7 @@ and a function to use them, but I don't see that function being used in
any of the examples/wallet templates (but I'm not Java fluent, so
maybe PEBKAC). -@harding -->
Both Bitcoin Core and BitcoinJ also include a hardcoded list of IP
Dash Core also include a hardcoded list of IP
addresses and port numbers to several dozen nodes which were active
around the time that particular version of the software was first
released. Dash Core will start attempting to connect to these nodes
@ -117,12 +115,11 @@ As a manual fallback option, Dash Core also provides several
command-line connection options, including the ability to get a list of
peers from a specific node by IP address, or to make a persistent
connection to a specific node by IP address. See the `-help` text for
details. BitcoinJ can be programmed to do the same thing.
details.
**Resources:** [Bitcoin Seeder][], the program run by several of the
seeds used by Bitcoin Core and BitcoinJ. The Bitcoin Core [DNS Seed
Policy][]. The hardcoded list of IP addresses used by Bitcoin Core and
BitcoinJ is generated using the [makeseeds script][].
**Resources:** [Dash Seeder][], the program run by several of the
seeds used by Dash Core. The Dash Core [DNS SeedPolicy][]. The hardcoded list
of IP addresses used by Dash Core is generated using the [makeseeds script][].
{% endautocrossref %}
@ -164,7 +161,7 @@ all the blocks which were produced since the last time it was online.
Dash Core uses the IBD method any time the last block on its local
best block chain has a block header time more than 24 hours in the past.
Bitcoin Core 0.10.0 will also perform IBD if its local best block chain is
Dash Core will also perform IBD if its local best block chain is
more than 144 blocks lower than its local best header chain (that is,
the local block chain is more than about 6 hours in the past).
@ -175,9 +172,9 @@ the local block chain is more than about 6 hours in the past).
{% autocrossref %}
Bitcoin Core (up until version [0.9.3][bitcoin core 0.9.3]) uses a
simple initial block download (IBD) method we'll call *blocks-first*.
The goal is to download the blocks from the best block chain in sequence.
Dash Core (up until version 0.12.0.x) uses a simple initial block download (IBD)
method we'll call *blocks-first*. The goal is to download the blocks from the
best block chain in sequence.
![Overview Of Blocks-First Method](/img/dev/en-blocks-first-flowchart.svg)
@ -190,7 +187,7 @@ node chooses a remote peer, called the sync node, and sends it the
In the header hashes field of the `getblocks` message, this new node
sends the header hash of the only block it has, the genesis block
(6fe2...0000 in internal byte order). It also sets the stop hash field
(b67a...0000 in internal byte order). It also sets the stop hash field
to all zeroes to request a maximum-size response.
Upon receipt of the `getblocks` message, the sync node takes the first
@ -210,7 +207,7 @@ the block's header.
The block inventories appear in the `inv` message in the same order they
appear in the block chain, so this first `inv` message contains
inventories for blocks 1 through 501. (For example, the hash of block 1
is 4860...0000 as seen in the illustration above.)
is 4343...0000 as seen in the illustration above.)
The IBD node uses the received inventories to request 128 blocks from
the sync node in the `getdata` message illustrated below.
@ -277,7 +274,7 @@ of its downloading. This has several implications:
* **Speed Limits:** All requests are made to the sync node, so if the
sync node has limited upload bandwidth, the IBD node will have slow
download speeds. Note: if the sync node goes offline, Bitcoin Core
download speeds. Note: if the sync node goes offline, Dash Core
will continue downloading from another node---but it will still only
download from a single sync node at a time.
@ -285,7 +282,7 @@ of its downloading. This has several implications:
otherwise valid) block chain to the IBD node. The IBD node won't be
able to identify it as non-best until the initial block download nears
completion, forcing the IBD node to restart its block chain download
over again from a different node. Bitcoin Core ships with several
over again from a different node. Dash Core ships with several
block chain checkpoints at various block heights selected by
developers to help an IBD node detect that it is being fed an
alternative block chain history---allowing the IBD node to restart
@ -303,7 +300,7 @@ of its downloading. This has several implications:
which may lead to high memory use.
All of these problems are addressed in part or in full by the
headers-first IBD method used in Bitcoin Core 0.10.0.
headers-first IBD method used in Dash Core 0.12.0.x.
**Resources:** The table below summarizes the messages mentioned
throughout this subsection. The links in the message field will take you

View file

@ -437,9 +437,8 @@ http://opensource.org/licenses/MIT.
[Bitcoin Core master]: https://github.com/dashpay/dash
[Bitcoin Core pull #4468]: https://github.com/bitcoin/bitcoin/pull/4468
[Bitcoin core transifex]: https://www.transifex.com/projects/p/bitcoin/
[Bitcoin reddit]: http://www.reddit.com/r/Bitcoin
[Bitcoin reddit new]: http://www.reddit.com/r/Bitcoin/new
[Bitcoin Seeder]: https://github.com/sipa/bitcoin-seeder
[Bitcoin reddit]: http://www.reddit.com/r/dashpay
[Bitcoin reddit new]: http://www.reddit.com/r/dashpay/new
[Bitcoin stackexchange]: http://bitcoin.stackexchange.com
[Bitcoin stackexchange tag bitcoin-qt]: http://bitcoin.stackexchange.com/questions/tagged/bitcoin-qt
<!--[bitcoin-documentation mailing list]: https://groups.google.com/forum/#!forum/bitcoin-documentation-->
@ -455,6 +454,7 @@ http://opensource.org/licenses/MIT.
[core paymentrequest.proto]: https://github.com/dashpay/dash/blob/master/src/qt/paymentrequest.proto
[core script.h]: https://github.com/dashpay/dash/blob/master/src/script/script.h
[creative commons attribution 3.0 license]: https://creativecommons.org/licenses/by/3.0/
[Dash Seeder]: https://github.com/nightlydash/dash-seeder/tree/master
[DashJ]: https://github.com/HashEngineering/dashj
[DER]: https://en.wikipedia.org/wiki/X.690#DER_encoding
[dig command]: https://en.wikipedia.org/wiki/Dig_%28Unix_command%29

View file

@ -28,7 +28,7 @@ block [ shape="plaintext", label=<
</tr>
<tr>
<td border="1"><i>Start String</i><br/><font face="courier">f9beb4d9</font></td>
<td border="1"><i>Start String</i><br/><font face="courier">bf0c6bbd</font></td>
<td border="1"><i>Command</i><br/><font face="courier">block</font></td>
<td border="1"><i>Size</i><br/><font face="courier">215</font></td>
<td border="1"><i>Checksum</i><br/><font face="courier">934d270a</font></td>
@ -38,6 +38,7 @@ block [ shape="plaintext", label=<
<td colspan="4" border="0"><i>Payload</i></td>
</tr>
// Serialized block value not changed to Dash block
<tr>
<td colspan="4" border="1"><i>Serialized Block</i><br/><font face="courier">010000006fe2...58eeac00000000</font></td>
</tr>

View file

@ -21,7 +21,7 @@
<text text-anchor="start" x="197.5" y="-151.3" font-family="Sans" font-style="italic" font-size="14.00">Message Header</text>
<polygon fill="none" stroke="black" points="102,-99.5 102,-139.5 194,-139.5 194,-99.5 102,-99.5"/>
<text text-anchor="start" x="108" y="-123.3" font-family="Sans" font-style="italic" font-size="14.00">Start String</text>
<text text-anchor="start" x="114.5" y="-109.3" font-family="Courier,monospace" font-size="14.00">f9beb4d9</text>
<text text-anchor="start" x="114.5" y="-109.3" font-family="Courier,monospace" font-size="14.00">bf0c6bbd</text>
<polygon fill="none" stroke="black" points="196,-99.5 196,-139.5 278,-139.5 278,-99.5 196,-99.5"/>
<text text-anchor="start" x="202" y="-123.3" font-family="Sans" font-style="italic" font-size="14.00">Command</text>
<text text-anchor="start" x="216" y="-109.3" font-family="Courier,monospace" font-size="14.00">block</text>

Before

Width:  |  Height:  |  Size: 4 KiB

After

Width:  |  Height:  |  Size: 4 KiB

Before After
Before After

View file

@ -17,6 +17,8 @@ ibd -> getblocks:f1 -> sync;
ibd [ label = "IBD\nNode", shape="none" ];
sync [ label = "Sync\nNode", shape="none" ];
// Genesis block hash - 00000ffd590b1485b3caadc19b22e6379c733355108f107a430458cdf3407ab6
getblocks [ shape="plaintext", label=<
<table border="2" cellborder="1">
<tr>
@ -28,7 +30,7 @@ getblocks [ shape="plaintext", label=<
</tr>
<tr>
<td border="1"><i>Start String</i><br/><font face="courier">f9beb4d9</font></td>
<td border="1"><i>Start String</i><br/><font face="courier">bf0c6bbd</font></td>
<td border="1"><i>Command</i><br/><font face="courier">getblocks</font></td>
<td border="1"><i>Size</i><br/><font face="courier">69</font></td>
<td border="1"><i>Checksum</i><br/><font face="courier">f5fcbcad</font></td>
@ -44,7 +46,7 @@ getblocks [ shape="plaintext", label=<
</tr>
<tr>
<td colspan="4"><i>Header Hashes (Highest-Height First)</i><br /><font face="courier">6fe28c0ab6f1b3...d6190000000000</font></td>
<td colspan="4"><i>Header Hashes (Highest-Height First)</i><br /><font face="courier">b67a40f3cd5804...140b59fd0f0000</font></td>
</tr>
<tr>

View file

@ -21,7 +21,7 @@
<text text-anchor="start" x="195.5" y="-202.3" font-family="Sans" font-style="italic" font-size="14.00">Message Header</text>
<polygon fill="none" stroke="black" points="95.5,-159.5 95.5,-193.5 181.5,-193.5 181.5,-159.5 95.5,-159.5"/>
<text text-anchor="start" x="98.5" y="-180.3" font-family="Sans" font-style="italic" font-size="14.00">Start String</text>
<text text-anchor="start" x="105" y="-166.3" font-family="Courier,monospace" font-size="14.00">f9beb4d9</text>
<text text-anchor="start" x="105" y="-166.3" font-family="Courier,monospace" font-size="14.00">bf0c6bbd</text>
<polygon fill="none" stroke="black" points="183.5,-159.5 183.5,-193.5 264.5,-193.5 264.5,-159.5 183.5,-159.5"/>
<text text-anchor="start" x="189" y="-180.3" font-family="Sans" font-style="italic" font-size="14.00">Command</text>
<text text-anchor="start" x="186.5" y="-166.3" font-family="Courier,monospace" font-size="14.00">getblocks</text>
@ -40,7 +40,7 @@
<text text-anchor="start" x="334" y="-109.3" font-family="Courier,monospace" font-size="14.00">1</text>
<polygon fill="none" stroke="black" points="95.5,-66.5 95.5,-100.5 410.5,-100.5 410.5,-66.5 95.5,-66.5"/>
<text text-anchor="start" x="123.5" y="-87.3" font-family="Sans" font-style="italic" font-size="14.00">Header Hashes (Highest&#45;Height First)</text>
<text text-anchor="start" x="125" y="-73.3" font-family="Courier,monospace" font-size="14.00">6fe28c0ab6f1b3...d6190000000000</text>
<text text-anchor="start" x="125" y="-73.3" font-family="Courier,monospace" font-size="14.00">b67a40f3cd5804...140b59fd0f0000</text>
<polygon fill="none" stroke="black" points="95.5,-30.5 95.5,-64.5 410.5,-64.5 410.5,-30.5 95.5,-30.5"/>
<text text-anchor="start" x="134.5" y="-51.3" font-family="Sans" font-style="italic" font-size="14.00">Stopping Hash (Zero Is &quot;No Stop&quot;)</text>
<text text-anchor="start" x="125" y="-37.3" font-family="Courier,monospace" font-size="14.00">00000000000000...00000000000000</text>

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Before After
Before After

View file

@ -17,6 +17,9 @@ ibd -> getblocks:f1 -> sync;
ibd [ label = "IBD\nNode", shape="none" ];
sync [ label = "Sync\nNode", shape="none" ];
// Block 500 hash - 000007248b1005ffdcf3f41f3a5630b5cb0078ca5733d931223839821f7f5faa
// Block 501 hash - 000003ad8ae16fd93d5ba05c902168b21a54855c98d1fcd5351308e0f05d59ab
getblocks [ shape="plaintext", label=<
<table border="2" cellborder="1">
<tr>
@ -28,7 +31,7 @@ getblocks [ shape="plaintext", label=<
</tr>
<tr>
<td border="1"><i>Start String</i><br/><font face="courier">f9beb4d9</font></td>
<td border="1"><i>Start String</i><br/><font face="courier">bf0c6bbd</font></td>
<td border="1"><i>Command</i><br/><font face="courier">getblocks</font></td>
<td border="1"><i>Size</i><br/><font face="courier">677</font></td>
<td border="1"><i>Checksum</i><br/><font face="courier">52be83ef</font></td>
@ -44,7 +47,7 @@ getblocks [ shape="plaintext", label=<
</tr>
<tr>
<td colspan="4"><i>Header Hashes (Highest-Height First)</i><br /><font face="courier">db773c8f3b90ef...64f64f00000000<br/>459f16a1c695d0...f66d8000000000</font><br/><i>......18 more header hashes......</i></td>
<td colspan="4"><i>Header Hashes (Highest-Height First)</i><br /><font face="courier">aa5f7f1f823938...05108b24070000<br/>ab595df0e00813...6fe18aad030000</font><br/><i>......18 more header hashes......</i></td>
</tr>
<tr>

View file

@ -21,7 +21,7 @@
<text text-anchor="start" x="200" y="-230.3" font-family="Sans" font-style="italic" font-size="14.00">Message Header</text>
<polygon fill="none" stroke="black" points="100,-187.5 100,-221.5 186,-221.5 186,-187.5 100,-187.5"/>
<text text-anchor="start" x="103" y="-208.3" font-family="Sans" font-style="italic" font-size="14.00">Start String</text>
<text text-anchor="start" x="109.5" y="-194.3" font-family="Courier,monospace" font-size="14.00">f9beb4d9</text>
<text text-anchor="start" x="109.5" y="-194.3" font-family="Courier,monospace" font-size="14.00">bf0c6bbd</text>
<polygon fill="none" stroke="black" points="188,-187.5 188,-221.5 269,-221.5 269,-187.5 188,-187.5"/>
<text text-anchor="start" x="193.5" y="-208.3" font-family="Sans" font-style="italic" font-size="14.00">Command</text>
<text text-anchor="start" x="191" y="-194.3" font-family="Courier,monospace" font-size="14.00">getblocks</text>
@ -40,8 +40,8 @@
<text text-anchor="start" x="334.5" y="-137.3" font-family="Courier,monospace" font-size="14.00">20</text>
<polygon fill="none" stroke="black" points="100,-66.5 100,-128.5 415,-128.5 415,-66.5 100,-66.5"/>
<text text-anchor="start" x="128" y="-115.3" font-family="Sans" font-style="italic" font-size="14.00">Header Hashes (Highest&#45;Height First)</text>
<text text-anchor="start" x="129.5" y="-101.3" font-family="Courier,monospace" font-size="14.00">db773c8f3b90ef...64f64f00000000</text>
<text text-anchor="start" x="129.5" y="-87.3" font-family="Courier,monospace" font-size="14.00">459f16a1c695d0...f66d8000000000</text>
<text text-anchor="start" x="129.5" y="-101.3" font-family="Courier,monospace" font-size="14.00">aa5f7f1f823938...05108b24070000</text>
<text text-anchor="start" x="129.5" y="-87.3" font-family="Courier,monospace" font-size="14.00">ab595df0e00813...6fe18aad030000</text>
<text text-anchor="start" x="148" y="-73.3" font-family="Sans" font-style="italic" font-size="14.00">......18 more header hashes......</text>
<polygon fill="none" stroke="black" points="100,-30.5 100,-64.5 415,-64.5 415,-30.5 100,-30.5"/>
<text text-anchor="start" x="139" y="-51.3" font-family="Sans" font-style="italic" font-size="14.00">Stopping Hash (Zero Is &quot;No Stop&quot;)</text>

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Before After
Before After

View file

@ -28,7 +28,7 @@ getdata [ shape="plaintext", label=<
</tr>
<tr>
<td border="1"><i>Start String</i><br/><font face="courier">f9beb4d9</font></td>
<td border="1"><i>Start String</i><br/><font face="courier">bf0c6bbd</font></td>
<td border="1"><i>Command</i><br/><font face="courier">getdata</font></td>
<td border="1"><i>Size</i><br/><font face="courier">4609</font></td>
<td border="1"><i>Checksum</i><br/><font face="courier">33e41222</font></td>
@ -54,11 +54,11 @@ getdata [ shape="plaintext", label=<
</tr>
<tr>
<td>Block</td>
<td><font face="courier">4860eb18bf1b1620...688e9a8300000000</font></td>
<td><font face="courier">434341c0ecf9a2b4...d654121dd9070000</font></td>
</tr>
<tr>
<td>Block</td>
<td><font face="courier">bddd99ccfda39da1...065f626a00000000</font></td>
<td><font face="courier">bddd99ccfda39da1...ce1e57ccaf0b0000</font></td>
</tr>
<tr>
<td colspan="2"><i>...............126 more inventory entries...............</i></td>

View file

@ -21,7 +21,7 @@
<text text-anchor="start" x="212.5" y="-245.8" font-family="Sans" font-style="italic" font-size="14.00">Message Header</text>
<polygon fill="none" stroke="black" points="80.5,-203 80.5,-237 212.5,-237 212.5,-203 80.5,-203"/>
<text text-anchor="start" x="106.5" y="-223.8" font-family="Sans" font-style="italic" font-size="14.00">Start String</text>
<text text-anchor="start" x="113" y="-209.8" font-family="Courier,monospace" font-size="14.00">f9beb4d9</text>
<text text-anchor="start" x="113" y="-209.8" font-family="Courier,monospace" font-size="14.00">bf0c6bbd</text>
<polygon fill="none" stroke="black" points="214.5,-203 214.5,-237 313.5,-237 313.5,-203 214.5,-203"/>
<text text-anchor="start" x="229" y="-223.8" font-family="Sans" font-style="italic" font-size="14.00">Command</text>
<text text-anchor="start" x="235" y="-209.8" font-family="Courier,monospace" font-size="14.00">getdata</text>
@ -40,9 +40,9 @@
<text text-anchor="start" x="91" y="-105.8" font-family="Sans" font-style="italic" font-size="14.00">Type</text>
<text text-anchor="start" x="135" y="-105.8" font-family="Sans" font-style="italic" font-size="14.00">Unique Identifier (For Blocks, A Header Hash)</text>
<text text-anchor="start" x="89" y="-83.8" font-family="Sans" font-size="14.00">Block</text>
<text text-anchor="start" x="148.5" y="-83.8" font-family="Courier,monospace" font-size="14.00">4860eb18bf1b1620...688e9a8300000000</text>
<text text-anchor="start" x="148.5" y="-83.8" font-family="Courier,monospace" font-size="14.00">434341c0ecf9a2b4...d654121dd9070000</text>
<text text-anchor="start" x="89" y="-62.8" font-family="Sans" font-size="14.00">Block</text>
<text text-anchor="start" x="148.5" y="-62.8" font-family="Courier,monospace" font-size="14.00">bddd99ccfda39da1...065f626a00000000</text>
<text text-anchor="start" x="148.5" y="-62.8" font-family="Courier,monospace" font-size="14.00">bddd99ccfda39da1...ce1e57ccaf0b0000</text>
<text text-anchor="start" x="107.5" y="-42.8" font-family="Sans" font-style="italic" font-size="14.00">...............126 more inventory entries...............</text>
<polygon fill="none" stroke="black" stroke-width="2" points="77,-28 77,-286 462,-286 462,-28 77,-28"/>
</g>

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Before After
Before After

View file

@ -17,6 +17,9 @@ ibd -> inv:f1 -> sync [ dir = "back" ];
ibd [ label = "IBD\nNode", shape="none" ];
sync [ label = "Sync\nNode", shape="none" ];
// Block 1 - 000007d91d1254d60e2dd1ae580383070a4ddffa4c64c2eeb4a2f9ecc0414343
// Block 2 - 00000bafcc571ece7c5c436f887547ef41b574e10ef7cc6937873a74ef1efeae
inv [ shape="plaintext", label=<
<table border="2" cellborder="1">
<tr>
@ -28,7 +31,7 @@ inv [ shape="plaintext", label=<
</tr>
<tr>
<td border="1"><i>Start String</i><br/><font face="courier">f9beb4d9</font></td>
<td border="1"><i>Start String</i><br/><font face="courier">bf0c6bbd</font></td>
<td border="1"><i>Command</i><br/><font face="courier">inv</font></td>
<td border="1"><i>Size</i><br/><font face="courier">18003</font></td>
<td border="1"><i>Checksum</i><br/><font face="courier">25173c57</font></td>
@ -54,11 +57,11 @@ inv [ shape="plaintext", label=<
</tr>
<tr>
<td><font face="courier">block</font></td>
<td><font face="courier">4860eb18bf1b1620...688e9a8300000000</font></td>
<td><font face="courier">434341c0ecf9a2b4...d654121dd9070000</font></td>
</tr>
<tr>
<td><font face="courier">block</font></td>
<td><font face="courier">bddd99ccfda39da1...065f626a00000000</font></td>
<td><font face="courier">bddd99ccfda39da1...ce1e57ccaf0b0000</font></td>
</tr>
<tr>
<td colspan="2"><i>...............498 more inventory entries...............</i></td>

View file

@ -21,7 +21,7 @@
<text text-anchor="start" x="225.5" y="-245.8" font-family="Sans" font-style="italic" font-size="14.00">Message Header</text>
<polygon fill="none" stroke="black" points="80,-203 80,-237 221,-237 221,-203 80,-203"/>
<text text-anchor="start" x="110.5" y="-223.8" font-family="Sans" font-style="italic" font-size="14.00">Start String</text>
<text text-anchor="start" x="117" y="-209.8" font-family="Courier,monospace" font-size="14.00">f9beb4d9</text>
<text text-anchor="start" x="117" y="-209.8" font-family="Courier,monospace" font-size="14.00">bf0c6bbd</text>
<polygon fill="none" stroke="black" points="223,-203 223,-237 327,-237 327,-203 223,-203"/>
<text text-anchor="start" x="240" y="-223.8" font-family="Sans" font-style="italic" font-size="14.00">Command</text>
<text text-anchor="start" x="262.5" y="-209.8" font-family="Courier,monospace" font-size="14.00">inv</text>
@ -40,9 +40,9 @@
<text text-anchor="start" x="98.5" y="-105.8" font-family="Sans" font-style="italic" font-size="14.00">Type</text>
<text text-anchor="start" x="156" y="-105.8" font-family="Sans" font-style="italic" font-size="14.00">Unique Identifier (For Blocks, A Header Hash)</text>
<text text-anchor="start" x="94" y="-83.8" font-family="Courier,monospace" font-size="14.00">block</text>
<text text-anchor="start" x="169.5" y="-83.8" font-family="Courier,monospace" font-size="14.00">4860eb18bf1b1620...688e9a8300000000</text>
<text text-anchor="start" x="169.5" y="-83.8" font-family="Courier,monospace" font-size="14.00">434341c0ecf9a2b4...d654121dd9070000</text>
<text text-anchor="start" x="94" y="-62.8" font-family="Courier,monospace" font-size="14.00">block</text>
<text text-anchor="start" x="169.5" y="-62.8" font-family="Courier,monospace" font-size="14.00">bddd99ccfda39da1...065f626a00000000</text>
<text text-anchor="start" x="169.5" y="-62.8" font-family="Courier,monospace" font-size="14.00">bddd99ccfda39da1...ce1e57ccaf0b0000</text>
<text text-anchor="start" x="120.5" y="-42.8" font-family="Sans" font-style="italic" font-size="14.00">...............498 more inventory entries...............</text>
<polygon fill="none" stroke="black" stroke-width="2" points="77,-28 77,-286 489,-286 489,-28 77,-28"/>
</g>

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Before After
Before After