Guide updates

- Intro
 - Block chain section
 - Developer guide
This commit is contained in:
thephez 2017-11-13 15:07:02 -05:00
parent 3be200d1ec
commit d096a9c160
5 changed files with 178 additions and 181 deletions

View file

@ -9,17 +9,17 @@ http://opensource.org/licenses/MIT.
{% autocrossref %}
The block chain provides Bitcoin's public ledger, an ordered and timestamped record
The block chain provides Dash's public ledger, an ordered and timestamped record
of transactions. This system is used to protect against double spending
and modification of previous transaction records.
Each full node in the Bitcoin network independently stores a block chain
Each full node in the Dash network independently stores a block chain
containing only blocks validated by that node. When several nodes all
have the same blocks in their block chain, they are considered to be in
[consensus][/en/glossary/consensus]{:#term-consensus}{:.term}. The validation rules these
nodes follow to maintain consensus are called [consensus
rules][/en/glossary/consensus-rules]{:#term-consensus-rules}{:.term}. This section describes many of
the consensus rules used by Bitcoin Core.
the consensus rules used by Dash Core.
{% endautocrossref %}
@ -42,10 +42,10 @@ stores the hash of the previous block's header, chaining the blocks
together. This ensures a transaction cannot be modified without
modifying the block that records it and all following blocks.
Transactions are also chained together. Bitcoin wallet software gives
the impression that satoshis are sent from and to wallets, but
bitcoins really move from transaction to transaction. Each
transaction spends the satoshis previously received in one or more earlier
Transactions are also chained together. Dash wallet software gives
the impression that duffs are sent from and to wallets, but
Dash value really moves from transaction to transaction. Each
transaction spends the duffs previously received in one or more earlier
transactions, so the input of one transaction is the output of a
previous transaction.
@ -55,7 +55,7 @@ A single transaction can create multiple outputs, as would be
the case when sending to multiple addresses, but each output of
a particular transaction can only be used as an input once in the
block chain. Any subsequent reference is a forbidden double
spend---an attempt to spend the same satoshis twice.
spend---an attempt to spend the same duffs twice.
Outputs are tied to [transaction identifiers (TXIDs)][/en/glossary/txid]{:#term-txid}{:.term}, which are the hashes
of signed transactions.
@ -69,12 +69,12 @@ Ignoring coinbase transactions (described later), if the value of a
transaction's outputs exceed its inputs, the transaction will be
rejected---but if the inputs exceed the value of the outputs, any
difference in value may be claimed as a [transaction
fee][/en/glossary/transaction-fee]{:#term-transaction-fee}{:.term} by the Bitcoin
fee][/en/glossary/transaction-fee]{:#term-transaction-fee}{:.term} by the Dash
[miner][/en/glossary/mining]{:#term-miner}{:.term} who creates the block containing that
transaction.
For example, in the illustration above, each transaction spends 10,000 satoshis
For example, in the illustration above, each transaction spends 10,000 duffs
fewer than it receives from its combined inputs, effectively paying a 10,000
satoshi transaction fee.
duff transaction fee.
{% endautocrossref %}
@ -84,7 +84,7 @@ satoshi transaction fee.
{% autocrossref %}
The block chain is collaboratively maintained by anonymous peers on the network, so
Bitcoin requires that each block prove a significant amount of work was invested in
Dash requires that each block prove a significant amount of work was invested in
its creation to ensure that untrustworthy peers who want to modify past blocks have
to work harder than honest peers who only want to add new blocks to the
block chain.
@ -94,7 +94,7 @@ in any block without modifying all following blocks. As a
result, the cost to modify a particular block increases with every new block
added to the block chain, magnifying the effect of the proof of work.
The [proof of work][/en/glossary/proof-of-work]{:#term-proof-of-work}{:.term} used in Bitcoin
The [proof of work][/en/glossary/proof-of-work]{:#term-proof-of-work}{:.term} used in Dash
takes advantage of the apparently random nature of cryptographic hashes.
A good cryptographic hash algorithm converts arbitrary data into a
seemingly-random number. If the data is modified in any way and
@ -112,32 +112,30 @@ In the example given above, you will produce a successful hash on average every
You can even estimate the probability
that a given hash attempt will generate a number below the [target][/en/glossary/nbits]{:#term-target}{:.term}
threshold.
Bitcoin assumes a linear probability that the lower it makes the target threshold, the more hash attempts (on average) will need to be tried.
Dash assumes a linear probability that the lower it makes the target threshold, the more hash attempts (on average) will need to be tried.
New blocks will only be added to the block chain if their hash is at
least as challenging as a [difficulty][/en/glossary/difficulty]{:#term-difficulty}{:.term} value expected by the consensus protocol.
Every 2,016 blocks, the network uses timestamps stored in each
block header to calculate the number of seconds elapsed between generation
of the first and last of those last 2,016 blocks. The ideal value is
1,209,600 seconds (two weeks).
Every block, the network uses the difficulty of the last 24 blocks and number of
seconds elapsed between generation of the first and last of those last 24 blocks.
The ideal value is 3600 (one hour).
* If it took fewer than two weeks to generate the 2,016 blocks,
the expected difficulty value is increased proportionally (by as much
as 300%) so that the next 2,016 blocks should take exactly two weeks
to generate if hashes are checked at the same rate.
* If it took less than one hour to generate the 24 blocks, the expected
difficulty value is increased so that the next 24 blocks should take exactly
one hour to generate if hashes are checked at the same rate.
* If it took more than two weeks to generate the blocks, the expected
difficulty value is decreased proportionally (by as much as 75%) for
the same reason.
* If it took more than one hour to generate the blocks, the expected
difficulty value is decreased for the same reason.
(Note: an off-by-one error in the Bitcoin Core implementation causes the
difficulty to be updated every 2,01*6* blocks using timestamps from only
2,01*5* blocks, creating a slight skew.)
This method of calculating difficulty (Dark Gravity Wave) was authored by Dash
creator Evan Duffield to fix exploits possible with the previously used
Kimoto Gravity Well difficulty readjustment algorithm. For additional detail,
reference this [Official Documentation Dark Gravity Wave page](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/1146926/Dark+Gravity+Wave).
Because each block header must hash to a value below the target
threshold, and because each block is linked to the block that
preceded it, it requires (on average) as much hashing power to
propagate a modified block as the entire Bitcoin network expended
propagate a modified block as the entire Dash network expended
between the time the original block was created and the present time.
Only if you acquired a majority of the network's hashing power
could you reliably execute such a [51 percent attack][/en/glossary/51-percent-attack]{:#term-51-attack}{:.term} against
@ -158,13 +156,12 @@ the merkle tree.
{% autocrossref %}
Any Bitcoin miner who successfully hashes a block header to a value
Any Dash miner who successfully hashes a block header to a value
below the target threshold can add the entire block to the block chain
(assuming the block is otherwise valid).
These blocks are commonly addressed
by their [block height][/en/glossary/block-height]{:#term-block-height}{:.term}---the number of blocks between them and the first Bitcoin
block (block 0, most commonly known as the [genesis block][/en/glossary/genesis-block]{:#term-genesis-block}{:.term}). For example,
block 2016 is where difficulty could have first been adjusted.
by their [block height][/en/glossary/block-height]{:#term-block-height}{:.term}---the number of blocks between them and the first Dash
block (block 0, most commonly known as the [genesis block][/en/glossary/genesis-block]{:#term-genesis-block}{:.term}).
![Common And Uncommon Block Chain Forks](/img/dev/en-blockchain-fork.svg)
@ -313,9 +310,9 @@ fork][/en/glossary/soft-fork]{:#term-soft-fork}{:.term}.
Although a fork is an actual divergence in block chains, changes to the
consensus rules are often described by their potential to create either
a hard or soft fork. For example, "increasing the block size above 1 MB
requires a hard fork." In this example, an actual block chain fork is
not required---but it is a possible outcome.
a hard or soft fork. For example, "increasing the block size requires a hard
fork." In this example, an actual block chain fork is not required---but it is
a possible outcome.
Consensus rule changes may be activated in various ways. During Bitcoin's
first two years, Satoshi Nakamoto performed several soft forks by just
@ -328,7 +325,7 @@ they are dependent on having sufficient users (nodes) to enforce the new rules
after the flag day.
Later soft forks waited for a majority of hash rate (typically 75% or 95%)
to signal their readiness for enforcing the new consensus rules. Once the signalling
to signal their readiness for enforcing the new consensus rules. Once the signaling
threshold has been passed, all nodes will begin enforcing the new rules. Such
forks are known as [Miner Activated Soft Forks][/en/glossary/masf]{:#term-masf}{:.term} (MASF)
as they are dependent on miners for activation.
@ -357,9 +354,9 @@ Non-upgraded nodes may also refuse to relay blocks or transactions which
have already been added to the best block chain, or soon will be, and so
provide incomplete information.
<!-- paragraph below based on src/main.cpp CheckForkWarningConditions() -->
<!-- paragraph below based on src/validation.cpp CheckForkWarningConditions() -->
Bitcoin Core includes code that detects a hard fork by looking at block
Dash Core includes code that detects a hard fork by looking at block
chain proof of work. If a non-upgraded node receives block chain headers
demonstrating at least six blocks more proof of work than the best chain
it considers valid, the node reports a warning in the `getnetworkinfo` RPC
@ -370,7 +367,7 @@ best block chain.
Full nodes can also check block and transaction version numbers. If the
block or transaction version numbers seen in several recent blocks are
higher than the version numbers the node uses, it can assume it doesn't
use the current consensus rules. Bitcoin Core reports this situation
use the current consensus rules. Dash Core reports this situation
through the `getnetworkinfo` RPC and `-alertnotify` command if set.
In either case, block and transaction data should not be relied upon

View file

@ -6,15 +6,15 @@ http://opensource.org/licenses/MIT.
{% autocrossref %}
The Developer Guide aims to provide the information you need to understand
Bitcoin and start building Bitcoin-based applications, but it is [not a
Dash and start building Dash-based applications, but it is [not a
specification][]. To make the best use of
this documentation, you may want to install the current version of Bitcoin
this documentation, you may want to install the current version of Dash
Core, either from [source][core git] or from a [pre-compiled executable][core executable].
Questions about Bitcoin development are best asked in one of the
[Bitcoin development communities][dev communities].
Questions about Dash development are best asked in one of the
[Dash development communities][dev communities].
Errors or suggestions related to
documentation on Bitcoin.org can be [submitted as an issue][docs issue]
documentation on {Dash.org} can be [submitted as an issue][docs issue]
or posted to the [bitcoin-documentation mailing list][].
In the following documentation, some strings have been shortened or wrapped: "[...]"

View file

@ -5,7 +5,7 @@
layout: base
lang: en
id: developer-guide
title: "Developer Guide - Bitcoin"
title: "Developer Guide - Dash"
breadcrumbs:
# - bitcoin
- dev docs
@ -18,9 +18,9 @@ end_of_page: |
---
<link rel="stylesheet" href="/css/jquery-ui.min.css">
# Bitcoin Developer Guide
# Dash Developer Guide
<p class="summary">Find detailed information about the Bitcoin protocol and related specifications.</p>
<p class="summary">Find detailed information about the Dash protocol and related specifications.</p>
<div markdown="1" id="toc" class="toc"><div markdown="1">
@ -28,8 +28,8 @@ end_of_page: |
{:toc}
<ul class="goback"><li><a href="/en/developer-documentation">Return To Overview</a></li></ul>
<ul class="reportissue"><li><a href="https://github.com/bitcoin-dot-org/bitcoin.org/issues/new" onmouseover="updateIssue(event);">Report An Issue</a></li></ul>
<ul class="editsource"><li><a href="https://github.com/bitcoin-dot-org/bitcoin.org/tree/master/_includes" onmouseover="updateSource(event);">Edit On GitHub</a></li></ul>
<ul class="reportissue"><li><a href="https://github.com/thephez/dash.org/issues/new" onmouseover="updateIssue(event);">Report An Issue</a></li></ul>
<ul class="editsource"><li><a href="https://github.com/thephez/dash.org/tree/master/_includes" onmouseover="updateSource(event);">Edit On GitHub</a></li></ul>
</div></div>

View file

@ -72,7 +72,7 @@ utxo0 [ style = "invis", label = "", width = 0, height = 0 ];
//tx6_input0 -> utxo0 [style = invis];
utxo1 [ style = "invis", label = "", width = 0, height = 0 ];
txold -> tx0_input0 [ label = "100,000\n(100k)\nsatoshis", style = dotted ]
txold -> tx0_input0 [ label = "100,000\n(100k)\nduffs", style = dotted ]
tx0_output0 -> tx1_input0 [ label = "40k" ]
tx0_output1 -> tx2_input0 [ label = "50k" ]
tx1_output0 -> tx3_input0 [ label = "30k" ]

View file

@ -1,195 +1,195 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
<!-- Title: blockchain Pages: 1 -->
<svg width="450pt" height="353pt"
viewBox="0.00 0.00 450.00 353.37" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.690184 0.690184) rotate(0) translate(4 508)">
<svg width="450pt" height="413pt"
viewBox="0.00 0.00 450.00 413.11" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(0.819672 0.819672) rotate(0) translate(4 500)">
<title>blockchain</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-508 649,-508 649,5 -4,5"/>
<text text-anchor="middle" x="322" y="-8.4" font-family="Sans" font-size="14.00">Triple&#45;Entry Bookkeeping (Transaction&#45;To&#45;Transaction Payments) As Used By Bitcoin</text>
<g id="graph2" class="cluster"><title>cluster_tx0</title>
<polygon fill="none" stroke="black" points="78,-290 78,-492 188,-492 188,-290 78,-290"/>
<text text-anchor="middle" x="133" y="-475.4" font-family="Sans" font-size="14.00">Transaction 0</text>
<text text-anchor="middle" x="133" y="-458.4" font-family="Sans" font-size="14.00">(TX 0)</text>
<polygon fill="white" stroke="none" points="-4,4 -4,-500 545,-500 545,4 -4,4"/>
<text text-anchor="middle" x="270.5" y="-7.8" font-family="Times,serif" font-size="14.00">Triple&#45;Entry Bookkeeping (Transaction&#45;To&#45;Transaction Payments) As Used By Bitcoin</text>
<g id="clust1" class="cluster"><title>cluster_tx0</title>
<polygon fill="none" stroke="black" points="62,-286 62,-484 153,-484 153,-286 62,-286"/>
<text text-anchor="middle" x="107.5" y="-468.8" font-family="Times,serif" font-size="14.00">Transaction 0</text>
<text text-anchor="middle" x="107.5" y="-453.8" font-family="Times,serif" font-size="14.00">(TX 0)</text>
</g>
<g id="graph3" class="cluster"><title>cluster_tx1</title>
<polygon fill="none" stroke="black" points="232,-365 232,-496 320,-496 320,-365 232,-365"/>
<text text-anchor="middle" x="276" y="-479.4" font-family="Sans" font-size="14.00">TX 1</text>
<g id="clust2" class="cluster"><title>cluster_tx1</title>
<polygon fill="none" stroke="black" points="190,-359 190,-488 264,-488 264,-359 190,-359"/>
<text text-anchor="middle" x="227" y="-472.8" font-family="Times,serif" font-size="14.00">TX 1</text>
</g>
<g id="graph4" class="cluster"><title>cluster_tx2</title>
<polygon fill="none" stroke="black" points="232,-172 232,-357 320,-357 320,-172 232,-172"/>
<text text-anchor="middle" x="276" y="-340.4" font-family="Sans" font-size="14.00">TX 2</text>
<g id="clust3" class="cluster"><title>cluster_tx2</title>
<polygon fill="none" stroke="black" points="190,-168 190,-351 264,-351 264,-168 190,-168"/>
<text text-anchor="middle" x="227" y="-335.8" font-family="Times,serif" font-size="14.00">TX 2</text>
</g>
<g id="graph5" class="cluster"><title>cluster_tx3</title>
<polygon fill="none" stroke="black" points="364,-311 364,-442 452,-442 452,-311 364,-311"/>
<text text-anchor="middle" x="408" y="-425.4" font-family="Sans" font-size="14.00">TX 3</text>
<g id="clust4" class="cluster"><title>cluster_tx3</title>
<polygon fill="none" stroke="black" points="301,-305 301,-434 375,-434 375,-305 301,-305"/>
<text text-anchor="middle" x="338" y="-418.8" font-family="Times,serif" font-size="14.00">TX 3</text>
</g>
<g id="graph6" class="cluster"><title>cluster_tx4</title>
<polygon fill="none" stroke="black" points="364,-172 364,-303 452,-303 452,-172 364,-172"/>
<text text-anchor="middle" x="408" y="-286.4" font-family="Sans" font-size="14.00">TX 4</text>
<g id="clust5" class="cluster"><title>cluster_tx4</title>
<polygon fill="none" stroke="black" points="301,-168 301,-297 375,-297 375,-168 301,-168"/>
<text text-anchor="middle" x="338" y="-281.8" font-family="Times,serif" font-size="14.00">TX 4</text>
</g>
<g id="graph7" class="cluster"><title>cluster_tx5</title>
<polygon fill="none" stroke="black" points="364,-33 364,-164 452,-164 452,-33 364,-33"/>
<text text-anchor="middle" x="408" y="-147.4" font-family="Sans" font-size="14.00">TX 5</text>
<g id="clust6" class="cluster"><title>cluster_tx5</title>
<polygon fill="none" stroke="black" points="301,-31 301,-160 375,-160 375,-31 301,-31"/>
<text text-anchor="middle" x="338" y="-144.8" font-family="Times,serif" font-size="14.00">TX 5</text>
</g>
<g id="graph8" class="cluster"><title>cluster_tx6</title>
<polygon fill="none" stroke="black" points="496,-41 496,-226 584,-226 584,-41 496,-41"/>
<text text-anchor="middle" x="540" y="-209.4" font-family="Sans" font-size="14.00">TX 6</text>
<g id="clust7" class="cluster"><title>cluster_tx6</title>
<polygon fill="none" stroke="black" points="412,-39 412,-222 486,-222 486,-39 412,-39"/>
<text text-anchor="middle" x="449" y="-206.8" font-family="Times,serif" font-size="14.00">TX 6</text>
</g>
<!-- tx0_input0 -->
<g id="node2" class="node"><title>tx0_input0</title>
<polygon fill="none" stroke="black" points="164,-442 102,-442 102,-406 164,-406 164,-442"/>
<text text-anchor="middle" x="133" y="-419.9" font-family="Sans" font-size="14.00">input0</text>
<g id="node1" class="node"><title>tx0_input0</title>
<polygon fill="none" stroke="black" points="134,-438 80,-438 80,-402 134,-402 134,-438"/>
<text text-anchor="middle" x="107" y="-416.3" font-family="Times,serif" font-size="14.00">input0</text>
</g>
<!-- tx0_output0 -->
<g id="node3" class="node"><title>tx0_output0</title>
<polygon fill="none" stroke="black" points="169,-388 97,-388 97,-352 169,-352 169,-388"/>
<text text-anchor="middle" x="133" y="-365.9" font-family="Sans" font-size="14.00">output0</text>
<g id="node2" class="node"><title>tx0_output0</title>
<polygon fill="none" stroke="black" points="136,-384 78,-384 78,-348 136,-348 136,-384"/>
<text text-anchor="middle" x="107" y="-362.3" font-family="Times,serif" font-size="14.00">output0</text>
</g>
<!-- tx1_input0 -->
<g id="node6" class="node"><title>tx1_input0</title>
<polygon fill="none" stroke="black" points="307,-463 245,-463 245,-427 307,-427 307,-463"/>
<text text-anchor="middle" x="276" y="-440.9" font-family="Sans" font-size="14.00">input0</text>
<g id="node4" class="node"><title>tx1_input0</title>
<polygon fill="none" stroke="black" points="254,-457 200,-457 200,-421 254,-421 254,-457"/>
<text text-anchor="middle" x="227" y="-435.3" font-family="Times,serif" font-size="14.00">input0</text>
</g>
<!-- tx0_output0&#45;&gt;tx1_input0 -->
<g id="edge11" class="edge"><title>tx0_output0&#45;&gt;tx1_input0</title>
<path fill="none" stroke="black" d="M169.205,-387.498C175.495,-390.616 181.955,-393.869 188,-397 203.741,-405.152 220.887,-414.416 235.828,-422.616"/>
<polygon fill="black" stroke="black" points="234.367,-425.807 244.814,-427.565 237.744,-419.675 234.367,-425.807"/>
<text text-anchor="middle" x="210" y="-419.4" font-family="Sans" font-size="14.00">40k</text>
<g id="edge2" class="edge"><title>tx0_output0&#45;&gt;tx1_input0</title>
<path fill="none" stroke="black" d="M136.143,-382.757C141.741,-386.127 147.567,-389.659 153,-393 165.527,-400.704 179.181,-409.264 191.257,-416.89"/>
<polygon fill="black" stroke="black" points="189.409,-419.863 199.731,-422.253 193.153,-413.948 189.409,-419.863"/>
<text text-anchor="middle" x="171.5" y="-413.8" font-family="Times,serif" font-size="14.00">40k</text>
</g>
<!-- tx0_output1 -->
<g id="node4" class="node"><title>tx0_output1</title>
<polygon fill="none" stroke="black" points="169,-334 97,-334 97,-298 169,-298 169,-334"/>
<text text-anchor="middle" x="133" y="-311.9" font-family="Sans" font-size="14.00">output1</text>
<g id="node3" class="node"><title>tx0_output1</title>
<polygon fill="none" stroke="black" points="136,-330 78,-330 78,-294 136,-294 136,-330"/>
<text text-anchor="middle" x="107" y="-308.3" font-family="Times,serif" font-size="14.00">output1</text>
</g>
<!-- tx2_input0 -->
<g id="node9" class="node"><title>tx2_input0</title>
<polygon fill="none" stroke="black" points="307,-324 245,-324 245,-288 307,-288 307,-324"/>
<text text-anchor="middle" x="276" y="-301.9" font-family="Sans" font-size="14.00">input0</text>
<g id="node6" class="node"><title>tx2_input0</title>
<polygon fill="none" stroke="black" points="254,-320 200,-320 200,-284 254,-284 254,-320"/>
<text text-anchor="middle" x="227" y="-298.3" font-family="Times,serif" font-size="14.00">input0</text>
</g>
<!-- tx0_output1&#45;&gt;tx2_input0 -->
<g id="edge13" class="edge"><title>tx0_output1&#45;&gt;tx2_input0</title>
<path fill="none" stroke="black" d="M169.085,-313.477C189.045,-312.081 213.932,-310.34 234.671,-308.89"/>
<polygon fill="black" stroke="black" points="235.052,-312.372 244.784,-308.183 234.564,-305.389 235.052,-312.372"/>
<text text-anchor="middle" x="210" y="-315.4" font-family="Sans" font-size="14.00">50k</text>
<g id="edge3" class="edge"><title>tx0_output1&#45;&gt;tx2_input0</title>
<path fill="none" stroke="black" d="M136.264,-309.605C152.3,-308.246 172.538,-306.531 189.734,-305.073"/>
<polygon fill="black" stroke="black" points="190.315,-308.537 199.983,-304.205 189.724,-301.562 190.315,-308.537"/>
<text text-anchor="middle" x="171.5" y="-310.8" font-family="Times,serif" font-size="14.00">50k</text>
</g>
<!-- tx1_output0 -->
<g id="node7" class="node"><title>tx1_output0</title>
<polygon fill="none" stroke="black" points="312,-409 240,-409 240,-373 312,-373 312,-409"/>
<text text-anchor="middle" x="276" y="-386.9" font-family="Sans" font-size="14.00">output0</text>
<g id="node5" class="node"><title>tx1_output0</title>
<polygon fill="none" stroke="black" points="256,-403 198,-403 198,-367 256,-367 256,-403"/>
<text text-anchor="middle" x="227" y="-381.3" font-family="Times,serif" font-size="14.00">output0</text>
</g>
<!-- tx3_input0 -->
<g id="node13" class="node"><title>tx3_input0</title>
<polygon fill="none" stroke="black" points="439,-409 377,-409 377,-373 439,-373 439,-409"/>
<text text-anchor="middle" x="408" y="-386.9" font-family="Sans" font-size="14.00">input0</text>
<g id="node9" class="node"><title>tx3_input0</title>
<polygon fill="none" stroke="black" points="365,-403 311,-403 311,-367 365,-367 365,-403"/>
<text text-anchor="middle" x="338" y="-381.3" font-family="Times,serif" font-size="14.00">input0</text>
</g>
<!-- tx1_output0&#45;&gt;tx3_input0 -->
<g id="edge15" class="edge"><title>tx1_output0&#45;&gt;tx3_input0</title>
<path fill="none" stroke="black" d="M312.07,-391C328.884,-391 348.988,-391 366.437,-391"/>
<polygon fill="black" stroke="black" points="366.906,-394.5 376.906,-391 366.906,-387.5 366.906,-394.5"/>
<text text-anchor="middle" x="342" y="-395.4" font-family="Sans" font-size="14.00">30k</text>
<g id="edge4" class="edge"><title>tx1_output0&#45;&gt;tx3_input0</title>
<path fill="none" stroke="black" d="M256.07,-385C269.673,-385 286.175,-385 300.72,-385"/>
<polygon fill="black" stroke="black" points="300.896,-388.5 310.896,-385 300.896,-381.5 300.896,-388.5"/>
<text text-anchor="middle" x="282.5" y="-388.8" font-family="Times,serif" font-size="14.00">30k</text>
</g>
<!-- tx2_output0 -->
<g id="node10" class="node"><title>tx2_output0</title>
<polygon fill="none" stroke="black" points="312,-270 240,-270 240,-234 312,-234 312,-270"/>
<text text-anchor="middle" x="276" y="-247.9" font-family="Sans" font-size="14.00">output0</text>
<g id="node7" class="node"><title>tx2_output0</title>
<polygon fill="none" stroke="black" points="256,-266 198,-266 198,-230 256,-230 256,-266"/>
<text text-anchor="middle" x="227" y="-244.3" font-family="Times,serif" font-size="14.00">output0</text>
</g>
<!-- tx4_input0 -->
<g id="node16" class="node"><title>tx4_input0</title>
<polygon fill="none" stroke="black" points="439,-270 377,-270 377,-234 439,-234 439,-270"/>
<text text-anchor="middle" x="408" y="-247.9" font-family="Sans" font-size="14.00">input0</text>
<g id="node11" class="node"><title>tx4_input0</title>
<polygon fill="none" stroke="black" points="365,-266 311,-266 311,-230 365,-230 365,-266"/>
<text text-anchor="middle" x="338" y="-244.3" font-family="Times,serif" font-size="14.00">input0</text>
</g>
<!-- tx2_output0&#45;&gt;tx4_input0 -->
<g id="edge17" class="edge"><title>tx2_output0&#45;&gt;tx4_input0</title>
<path fill="none" stroke="black" d="M312.07,-252C328.884,-252 348.988,-252 366.437,-252"/>
<polygon fill="black" stroke="black" points="366.906,-255.5 376.906,-252 366.906,-248.5 366.906,-255.5"/>
<text text-anchor="middle" x="342" y="-256.4" font-family="Sans" font-size="14.00">20k</text>
<g id="edge5" class="edge"><title>tx2_output0&#45;&gt;tx4_input0</title>
<path fill="none" stroke="black" d="M256.07,-248C269.673,-248 286.175,-248 300.72,-248"/>
<polygon fill="black" stroke="black" points="300.896,-251.5 310.896,-248 300.896,-244.5 300.896,-251.5"/>
<text text-anchor="middle" x="282.5" y="-251.8" font-family="Times,serif" font-size="14.00">20k</text>
</g>
<!-- tx2_output1 -->
<g id="node11" class="node"><title>tx2_output1</title>
<polygon fill="none" stroke="black" points="312,-216 240,-216 240,-180 312,-180 312,-216"/>
<text text-anchor="middle" x="276" y="-193.9" font-family="Sans" font-size="14.00">output1</text>
<g id="node8" class="node"><title>tx2_output1</title>
<polygon fill="none" stroke="black" points="256,-212 198,-212 198,-176 256,-176 256,-212"/>
<text text-anchor="middle" x="227" y="-190.3" font-family="Times,serif" font-size="14.00">output1</text>
</g>
<!-- tx5_input0 -->
<g id="node19" class="node"><title>tx5_input0</title>
<polygon fill="none" stroke="black" points="439,-131 377,-131 377,-95 439,-95 439,-131"/>
<text text-anchor="middle" x="408" y="-108.9" font-family="Sans" font-size="14.00">input0</text>
<g id="node13" class="node"><title>tx5_input0</title>
<polygon fill="none" stroke="black" points="365,-129 311,-129 311,-93 365,-93 365,-129"/>
<text text-anchor="middle" x="338" y="-107.3" font-family="Times,serif" font-size="14.00">input0</text>
</g>
<!-- tx2_output1&#45;&gt;tx5_input0 -->
<g id="edge19" class="edge"><title>tx2_output1&#45;&gt;tx5_input0</title>
<path fill="none" stroke="black" d="M303.994,-179.974C323.682,-167.296 350.215,-150.21 371.554,-136.469"/>
<polygon fill="black" stroke="black" points="373.534,-139.357 380.047,-131 369.744,-133.472 373.534,-139.357"/>
<text text-anchor="middle" x="342" y="-168.4" font-family="Sans" font-size="14.00">20k</text>
<g id="edge6" class="edge"><title>tx2_output1&#45;&gt;tx5_input0</title>
<path fill="none" stroke="black" d="M251.651,-175.99C267.256,-164.108 287.891,-148.395 304.962,-135.396"/>
<polygon fill="black" stroke="black" points="307.183,-138.104 313.018,-129.261 302.942,-132.535 307.183,-138.104"/>
<text text-anchor="middle" x="282.5" y="-163.8" font-family="Times,serif" font-size="14.00">20k</text>
</g>
<!-- tx3_output0 -->
<g id="node14" class="node"><title>tx3_output0</title>
<polygon fill="none" stroke="black" points="444,-355 372,-355 372,-319 444,-319 444,-355"/>
<text text-anchor="middle" x="408" y="-332.9" font-family="Sans" font-size="14.00">output0</text>
<g id="node10" class="node"><title>tx3_output0</title>
<polygon fill="none" stroke="black" points="367,-349 309,-349 309,-313 367,-313 367,-349"/>
<text text-anchor="middle" x="338" y="-327.3" font-family="Times,serif" font-size="14.00">output0</text>
</g>
<!-- utxo0 -->
<!-- tx3_output0&#45;&gt;utxo0 -->
<g id="edge25" class="edge"><title>tx3_output0&#45;&gt;utxo0</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M444.204,-337C498.689,-337 598.917,-337 632.049,-337"/>
<polygon fill="black" stroke="black" points="632.145,-340.5 642.145,-337 632.145,-333.5 632.145,-340.5"/>
<text text-anchor="middle" x="540" y="-358.4" font-family="Sans" font-size="14.00">20k Unspent TX</text>
<text text-anchor="middle" x="540" y="-341.4" font-family="Sans" font-size="14.00">Output (UTXO)</text>
<g id="edge9" class="edge"><title>tx3_output0&#45;&gt;utxo0</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M367.372,-331C412.751,-331 499.597,-331 529.544,-331"/>
<polygon fill="black" stroke="black" points="529.915,-334.5 539.915,-331 529.915,-327.5 529.915,-334.5"/>
<text text-anchor="middle" x="449" y="-349.8" font-family="Times,serif" font-size="14.00">20k Unspent TX</text>
<text text-anchor="middle" x="449" y="-334.8" font-family="Times,serif" font-size="14.00">Output (UTXO)</text>
</g>
<!-- tx4_output0 -->
<g id="node17" class="node"><title>tx4_output0</title>
<polygon fill="none" stroke="black" points="444,-216 372,-216 372,-180 444,-180 444,-216"/>
<text text-anchor="middle" x="408" y="-193.9" font-family="Sans" font-size="14.00">output0</text>
<g id="node12" class="node"><title>tx4_output0</title>
<polygon fill="none" stroke="black" points="367,-212 309,-212 309,-176 367,-176 367,-212"/>
<text text-anchor="middle" x="338" y="-190.3" font-family="Times,serif" font-size="14.00">output0</text>
</g>
<!-- tx6_input0 -->
<g id="node22" class="node"><title>tx6_input0</title>
<polygon fill="none" stroke="black" points="571,-193 509,-193 509,-157 571,-157 571,-193"/>
<text text-anchor="middle" x="540" y="-170.9" font-family="Sans" font-size="14.00">input0</text>
<g id="node15" class="node"><title>tx6_input0</title>
<polygon fill="none" stroke="black" points="476,-191 422,-191 422,-155 476,-155 476,-191"/>
<text text-anchor="middle" x="449" y="-169.3" font-family="Times,serif" font-size="14.00">input0</text>
</g>
<!-- tx4_output0&#45;&gt;tx6_input0 -->
<g id="edge21" class="edge"><title>tx4_output0&#45;&gt;tx6_input0</title>
<path fill="none" stroke="black" d="M444.163,-186.661C449.439,-185.273 454.833,-183.995 460,-183 472.421,-180.608 486.074,-178.907 498.529,-177.707"/>
<polygon fill="black" stroke="black" points="499.003,-181.179 508.657,-176.814 498.388,-174.206 499.003,-181.179"/>
<text text-anchor="middle" x="474" y="-187.4" font-family="Sans" font-size="14.00">10k</text>
<g id="edge7" class="edge"><title>tx4_output0&#45;&gt;tx6_input0</title>
<path fill="none" stroke="black" d="M367.07,-188.592C380.673,-185.971 397.175,-182.792 411.72,-179.99"/>
<polygon fill="black" stroke="black" points="412.739,-183.358 421.896,-178.029 411.415,-176.484 412.739,-183.358"/>
<text text-anchor="middle" x="393.5" y="-189.8" font-family="Times,serif" font-size="14.00">10k</text>
</g>
<!-- tx5_output0 -->
<g id="node20" class="node"><title>tx5_output0</title>
<polygon fill="none" stroke="black" points="444,-77 372,-77 372,-41 444,-41 444,-77"/>
<text text-anchor="middle" x="408" y="-54.9" font-family="Sans" font-size="14.00">output0</text>
<g id="node14" class="node"><title>tx5_output0</title>
<polygon fill="none" stroke="black" points="367,-75 309,-75 309,-39 367,-39 367,-75"/>
<text text-anchor="middle" x="338" y="-53.3" font-family="Times,serif" font-size="14.00">output0</text>
</g>
<!-- tx6_input1 -->
<g id="node23" class="node"><title>tx6_input1</title>
<polygon fill="none" stroke="black" points="571,-139 509,-139 509,-103 571,-103 571,-139"/>
<text text-anchor="middle" x="540" y="-116.9" font-family="Sans" font-size="14.00">input1</text>
<g id="node16" class="node"><title>tx6_input1</title>
<polygon fill="none" stroke="black" points="476,-137 422,-137 422,-101 476,-101 476,-137"/>
<text text-anchor="middle" x="449" y="-115.3" font-family="Times,serif" font-size="14.00">input1</text>
</g>
<!-- tx5_output0&#45;&gt;tx6_input1 -->
<g id="edge23" class="edge"><title>tx5_output0&#45;&gt;tx6_input1</title>
<path fill="none" stroke="black" d="M444.07,-75.9418C461.202,-83.9887 481.747,-93.6389 499.422,-101.941"/>
<polygon fill="black" stroke="black" points="498.367,-105.312 508.906,-106.395 501.343,-98.9758 498.367,-105.312"/>
<text text-anchor="middle" x="474" y="-100.4" font-family="Sans" font-size="14.00">10k</text>
<g id="edge8" class="edge"><title>tx5_output0&#45;&gt;tx6_input1</title>
<path fill="none" stroke="black" d="M367.07,-72.9665C381.07,-80.9295 398.139,-90.6386 412.986,-99.0838"/>
<polygon fill="black" stroke="black" points="411.473,-102.25 421.896,-104.152 414.934,-96.1654 411.473,-102.25"/>
<text text-anchor="middle" x="393.5" y="-97.8" font-family="Times,serif" font-size="14.00">10k</text>
</g>
<!-- tx6_output0 -->
<g id="node24" class="node"><title>tx6_output0</title>
<polygon fill="none" stroke="black" points="576,-85 504,-85 504,-49 576,-49 576,-85"/>
<text text-anchor="middle" x="540" y="-62.9" font-family="Sans" font-size="14.00">output0</text>
<g id="node17" class="node"><title>tx6_output0</title>
<polygon fill="none" stroke="black" points="478,-83 420,-83 420,-47 478,-47 478,-83"/>
<text text-anchor="middle" x="449" y="-61.3" font-family="Times,serif" font-size="14.00">output0</text>
</g>
<!-- utxo1 -->
<!-- tx6_output0&#45;&gt;utxo1 -->
<g id="edge27" class="edge"><title>tx6_output0&#45;&gt;utxo1</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M576.024,-67C595.705,-67 618.71,-67 631.993,-67"/>
<polygon fill="black" stroke="black" points="632.339,-70.5001 642.339,-67 632.339,-63.5001 632.339,-70.5001"/>
<text text-anchor="middle" x="613" y="-88.4" font-family="Sans" font-size="14.00">10k</text>
<text text-anchor="middle" x="613" y="-71.4" font-family="Sans" font-size="14.00">UTXO</text>
<g id="edge10" class="edge"><title>tx6_output0&#45;&gt;utxo1</title>
<path fill="none" stroke="black" stroke-dasharray="5,2" d="M478.477,-65C496.038,-65 517.497,-65 529.873,-65"/>
<polygon fill="black" stroke="black" points="529.898,-68.5001 539.898,-65 529.898,-61.5001 529.898,-68.5001"/>
<text text-anchor="middle" x="513" y="-83.8" font-family="Times,serif" font-size="14.00">10k</text>
<text text-anchor="middle" x="513" y="-68.8" font-family="Times,serif" font-size="14.00">UTXO</text>
</g>
<!-- txold -->
<!-- txold&#45;&gt;tx0_input0 -->
<g id="edge9" class="edge"><title>txold&#45;&gt;tx0_input0</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M1.84293,-424C8.67759,-424 55.6789,-424 91.4816,-424"/>
<polygon fill="black" stroke="black" points="91.7074,-427.5 101.707,-424 91.7074,-420.5 91.7074,-427.5"/>
<text text-anchor="middle" x="40" y="-462.4" font-family="Sans" font-size="14.00">100,000</text>
<text text-anchor="middle" x="40" y="-445.4" font-family="Sans" font-size="14.00">(100k)</text>
<text text-anchor="middle" x="40" y="-428.4" font-family="Sans" font-size="14.00">satoshis</text>
<g id="edge1" class="edge"><title>txold&#45;&gt;tx0_input0</title>
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M1.0761,-420C2.98148,-420 40.2834,-420 69.8738,-420"/>
<polygon fill="black" stroke="black" points="69.948,-423.5 79.948,-420 69.948,-416.5 69.948,-423.5"/>
<text text-anchor="middle" x="31.5" y="-453.8" font-family="Times,serif" font-size="14.00">100,000</text>
<text text-anchor="middle" x="31.5" y="-438.8" font-family="Times,serif" font-size="14.00">(100k)</text>
<text text-anchor="middle" x="31.5" y="-423.8" font-family="Times,serif" font-size="14.00">duffs</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After