Merge branch 'tx-overview-image' (pull #581)

This commit is contained in:
David A. Harding 2014-10-02 21:24:42 -04:00
commit 65c0faa821
No known key found for this signature in database
GPG key ID: 4B29C30FF29EC4B7
7 changed files with 281 additions and 222 deletions

View file

@ -23,9 +23,9 @@ and they're an exception to many of the rules listed below. Instead of
pointing out the coinbase exception to each rule, we invite you to read
about coinbase transactions in the block chain section of this guide.
<!-- ![The Parts Of A Transaction](/img/dev/en-tx-overview.svg) -->
![The Parts Of A Transaction](/img/dev/en-tx-overview.svg)
<!-- The figure above shows the core parts of a Bitcoin transaction. --> Each
The figure above shows the main parts of a Bitcoin transaction. Each
transaction has at least one input and one output. Each [input][]{:#term-input}{:.term} spends the
satoshis paid to a previous output. Each [output][]{:#term-output}{:.term} then waits as an Unspent
Transaction Output (UTXO) until a later input spends it. When your
@ -37,7 +37,22 @@ Bitcoin peers and miners which set of rules to use to validate it. This
lets developers create new rules for future transactions without
invalidating previous transactions.
The figures below help illustrate the other transaction features by
![Spending An Output](/img/dev/en-tx-overview-spending.svg)
An output has an implied index number based on its location in the
transaction---the first output is output zero. The output also has an
amount in satoshis which it pays to a conditional pubkey script. Anyone
who can satisfy the conditions of that pubkey script can spend up to the
amount of satoshis paid to it.
An input uses a transaction identifier (txid) and an output index number
(often called "vout" for output vector) to identify a particular output to
be spent. It also has a signature script which allows it to provide data
parameters that satisfy the conditionals in the pubkey script. (The sequence
number and locktime are related and will be covered together in
a later subsection.)
The figures below help illustrate how these features are used by
showing the workflow Alice uses to send Bob a transaction and which Bob
later uses to spend that transaction. Both Alice and Bob will use the
most common form of the standard Pay-To-Public-Key-Hash (P2PKH) transaction

View file

@ -0,0 +1,52 @@
digraph tx_overview {
size=6.25;
splines = "false";
rankdir=TB;
ranksep=0.5;
nodesep=0.05;
//splines=ortho;
node [ penwidth=1.75, fontname="Sans", shape = box ];
edge [ penwidth=1.75, fontname="Sans" ];
graph [ penwidth=1.75, fontname="Sans" ];
tx1_label [ shape = "none", label = "Transaction\n1" ]
tx0_label [ shape = "none", label = "Transaction\n0" ]
tx0_label -> tx1_label [ style = "invis" ];
tx1_notshown [ shape = "none", label = "Not Shown:\nVersion, Outputs,\nLocktime" ]
tx0_notshown [ shape = "none", label = "Not Shown:\nVersion, Inputs,\nLocktime" ]
tx0_notshown -> tx1_notshown [ style = "invis" ];
subgraph cluster_tx0 {
subgraph cluster_outputs {
pubkey_script [ label = "Pubkey\nScript" ];
amount [ label = "Amount\n(satoshis)" ];
output0_label [ shape = "none", label = "Output 0\n(Implied)" ]
label = "Example Output Paying A Pubkey Script"
}
graph [ penwidth = 0 ];
}
subgraph cluster_tx1 {
subgraph cluster_inputs {
index [ label = "Output\nIndex" ];
sequence [ label = "Sequence\nNumber" ];
signature_script [ label = "Signature\nScript" ];
txid [ label = "Transaction\nIdentifier" ];
label = "Example Input Spending The Example Output";
labelloc = b;
}
graph [ penwidth = 0 ];
}
pubkey_script -> signature_script [ style = "dashed" ];
output0_label -> index [ style = "dashed" ];
tx0_label -> txid [ style = "dashed", constraint = false ];
label = "Overview Of Transaction Spending"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

View file

@ -0,0 +1,108 @@
<?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)
-->
<!-- Title: tx_overview Pages: 1 -->
<svg width="450pt" height="189pt"
viewBox="0.00 0.00 450.00 189.14" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.703125 0.703125) rotate(0) translate(4 265)">
<title>tx_overview</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-265 637,-265 637,5 -4,5"/>
<text text-anchor="middle" x="316" y="-8.4" font-family="Sans" font-size="14.00">Overview Of Transaction Spending</text>
<g id="graph2" class="cluster"><title>cluster_tx0</title>
<polygon fill="none" stroke="black" stroke-width="0" points="185,-154 185,-253 494,-253 494,-154 185,-154"/>
</g>
<g id="graph3" class="cluster"><title>cluster_outputs</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="193,-162 193,-245 486,-245 486,-162 193,-162"/>
<text text-anchor="middle" x="339.5" y="-228.4" font-family="Sans" font-size="14.00">Example Output Paying A Pubkey Script</text>
</g>
<g id="graph4" class="cluster"><title>cluster_tx1</title>
<polygon fill="none" stroke="black" stroke-width="0" points="104,-33 104,-132 476,-132 476,-33 104,-33"/>
</g>
<g id="graph5" class="cluster"><title>cluster_inputs</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="112,-41 112,-124 468,-124 468,-41 112,-41"/>
<text text-anchor="middle" x="290" y="-49.4" font-family="Sans" font-size="14.00">Example Input Spending The Example Output</text>
</g>
<!-- tx1_label -->
<g id="node1" class="node"><title>tx1_label</title>
<text text-anchor="middle" x="48" y="-99.4" font-family="Sans" font-size="14.00">Transaction</text>
<text text-anchor="middle" x="48" y="-82.4" font-family="Sans" font-size="14.00">1</text>
</g>
<!-- tx0_label -->
<g id="node2" class="node"><title>tx0_label</title>
<text text-anchor="middle" x="48" y="-195.4" font-family="Sans" font-size="14.00">Transaction</text>
<text text-anchor="middle" x="48" y="-178.4" font-family="Sans" font-size="14.00">0</text>
</g>
<!-- tx0_label&#45;&gt;tx1_label -->
<!-- txid -->
<g id="node17" class="node"><title>txid</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="216,-116 120,-116 120,-74 216,-74 216,-116"/>
<text text-anchor="middle" x="168" y="-99.4" font-family="Sans" font-size="14.00">Transaction</text>
<text text-anchor="middle" x="168" y="-82.4" font-family="Sans" font-size="14.00">Identifier</text>
</g>
<!-- tx0_label&#45;&gt;txid -->
<g id="edge14" class="edge"><title>tx0_label&#45;&gt;txid</title>
<path fill="none" stroke="black" stroke-width="1.75" stroke-dasharray="5,2" d="M74.3345,-169.932C91.8413,-155.927 115.002,-137.399 133.912,-122.271"/>
<polygon fill="black" stroke="black" points="136.105,-124.998 141.727,-116.018 131.732,-119.532 136.105,-124.998"/>
</g>
<!-- tx1_notshown -->
<g id="node4" class="node"><title>tx1_notshown</title>
<text text-anchor="middle" x="564" y="-107.9" font-family="Sans" font-size="14.00">Not Shown:</text>
<text text-anchor="middle" x="564" y="-90.9" font-family="Sans" font-size="14.00">Version, Outputs,</text>
<text text-anchor="middle" x="564" y="-73.9" font-family="Sans" font-size="14.00">Locktime</text>
</g>
<!-- tx0_notshown -->
<g id="node5" class="node"><title>tx0_notshown</title>
<text text-anchor="middle" x="564" y="-203.9" font-family="Sans" font-size="14.00">Not Shown:</text>
<text text-anchor="middle" x="564" y="-186.9" font-family="Sans" font-size="14.00">Version, Inputs,</text>
<text text-anchor="middle" x="564" y="-169.9" font-family="Sans" font-size="14.00">Locktime</text>
</g>
<!-- tx0_notshown&#45;&gt;tx1_notshown -->
<!-- pubkey_script -->
<g id="node9" class="node"><title>pubkey_script</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="451,-212 385,-212 385,-170 451,-170 451,-212"/>
<text text-anchor="middle" x="418" y="-195.4" font-family="Sans" font-size="14.00">Pubkey</text>
<text text-anchor="middle" x="418" y="-178.4" font-family="Sans" font-size="14.00">Script</text>
</g>
<!-- signature_script -->
<g id="node16" class="node"><title>signature_script</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="460,-116 376,-116 376,-74 460,-74 460,-116"/>
<text text-anchor="middle" x="418" y="-99.4" font-family="Sans" font-size="14.00">Signature</text>
<text text-anchor="middle" x="418" y="-82.4" font-family="Sans" font-size="14.00">Script</text>
</g>
<!-- pubkey_script&#45;&gt;signature_script -->
<g id="edge10" class="edge"><title>pubkey_script&#45;&gt;signature_script</title>
<path fill="none" stroke="black" stroke-width="1.75" stroke-dasharray="5,2" d="M418,-169.694C418,-157.017 418,-140.697 418,-126.547"/>
<polygon fill="black" stroke="black" points="421.5,-126.246 418,-116.246 414.5,-126.246 421.5,-126.246"/>
</g>
<!-- amount -->
<g id="node10" class="node"><title>amount</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="380,-212 298,-212 298,-170 380,-170 380,-212"/>
<text text-anchor="middle" x="339" y="-195.4" font-family="Sans" font-size="14.00">Amount</text>
<text text-anchor="middle" x="339" y="-178.4" font-family="Sans" font-size="14.00">(satoshis)</text>
</g>
<!-- output0_label -->
<g id="node11" class="node"><title>output0_label</title>
<text text-anchor="middle" x="253" y="-195.4" font-family="Sans" font-size="14.00">Output 0</text>
<text text-anchor="middle" x="253" y="-178.4" font-family="Sans" font-size="14.00">(Implied)</text>
</g>
<!-- index -->
<g id="node14" class="node"><title>index</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="286,-116 220,-116 220,-74 286,-74 286,-116"/>
<text text-anchor="middle" x="253" y="-99.4" font-family="Sans" font-size="14.00">Output</text>
<text text-anchor="middle" x="253" y="-82.4" font-family="Sans" font-size="14.00">Index</text>
</g>
<!-- output0_label&#45;&gt;index -->
<g id="edge12" class="edge"><title>output0_label&#45;&gt;index</title>
<path fill="none" stroke="black" stroke-width="1.75" stroke-dasharray="5,2" d="M253,-169.694C253,-157.017 253,-140.697 253,-126.547"/>
<polygon fill="black" stroke="black" points="256.5,-126.246 253,-116.246 249.5,-126.246 256.5,-126.246"/>
</g>
<!-- sequence -->
<g id="node15" class="node"><title>sequence</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="372,-116 290,-116 290,-74 372,-74 372,-116"/>
<text text-anchor="middle" x="331" y="-99.4" font-family="Sans" font-size="14.00">Sequence</text>
<text text-anchor="middle" x="331" y="-82.4" font-family="Sans" font-size="14.00">Number</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

View file

@ -1,84 +1,54 @@
digraph blockchain {
digraph tx_overview {
size=6.25;
splines = "false";
rankdir=LR;
ranksep=0.1;
rankdir=TB;
ranksep=0.001;
nodesep=0.01;
//splines=ortho;
node [ penwidth=1.75, fontname="Sans", shape = box ];
edge [ penwidth=1.75, fontname="Sans" ];
graph [ penwidth=1.75, fontname="Sans" ];
//edge [ style = invis, minlen = 1 ];
//fixedsize
nodesep = 0.25;
//concentrate = true;
tophelp0 [style = invis, label="", width=0, height=0 ];
prevout [style = invis, label="", width=0, height=0 ];
nextout [style = invis, label="", width=0, height=0 ];
subgraph cluster_tx {
version;
subgraph cluster_input {
sequence;
vout [label="output index"];
txid;
input [style = invis, label="", width=0, height=0 ];
Locktime;
Outputs;
Inputs;
Version;
//tx_label1 [ shape = "none", label = "" ];
tx0_label [ shape = "none", label = "The Main Parts Of\nTransaction 0" ];
subgraph cluster_scriptsig {
label = "scriptSig"
subgraph cluster_signature {
hashtype;
signature [style = invis, label="", width=0, height=0 ];
label = "signature"
}
scriptsig [style = invis, label="", width=0, height=0 ];
}
label = "Input"
labelloc = b
graph [ penwidth=0 ];
}
left0 [style = invis ];
left1 [style = invis ];
left2 [style = invis ];
middle1 [style = invis, label="", width=0, height=0 ];
middle2 [style = invis, label="", width=0, height=0 ];
middle3 [style = invis, label="", width=0, height=1.05 ];
middle4 [style = invis, label="", width=0, height=0 ];
middle5 [style = invis, label="", width=0, height=0 ];
middle6 [style = invis, label="", width=0, height=0 ];
middle7 [style = invis, label="", width=0, height=0 ];
middle0 [style = invis, label="", width=0, height=0 ];
tx_label [ shape = "none", label = "Each input spends a previous output" ];
tx_label -> Inputs [ style = "invis" ];
tx_label -> Outputs [ style = "invis" ];
subgraph cluster_output {
output [style = invis, label="", width=0, height=0 ];
amount;
script;
label = "Output"
subgraph cluster_tx1 {
Version1 [ label = "Version" ];
Inputs1 [ label = "Inputs" ];
Outputs1 [ label = "Outputs" ];
Locktime1 [ label = "Locktime" ];
//tx_label1 [ shape = "none", label = "" ];
tx1_label [ shape = "none", label = "The Main Parts Of\nTransaction 1" ];
labelloc = b
graph [ penwidth=0 ];
}
locktime;
label = "A Basic Transaction With One Input & One Output"
}
prevout -> input [ style = "dashed", label = "Each input\nspends\nsatoshis\nfrom a\nprevious\noutput\n(prevout)" ];
output -> nextout [style="dashed", label = "Each output\nwaits as an\nUnspent\nTx Output\n(UTXO)\nuntil a\nlater input\nspends it"];
tophelp0 -> version [ style = invis ];
txid -> middle1 [ dir = none, label = "Select a previous tx with an\noutput to spend" ];
vout -> middle2 [ dir = none, label = "Select an output from previous tx" ];
sequence -> middle3 [ dir = none, label = "Allow override of locktime" ];
scriptsig -> middle4 [ dir = none, label = "Satisfy prevout script conditions" ];
signature -> middle5 [ dir = none, label = "Protect tx against modification\nby unauthorized parties" ];
hashtype -> middle6 [ dir = none, label = "Authorize others to modify tx;\nselect what they can modify" ];
version -> middle7 [ dir = none, label = "Indicate what rules this tx follows" ];
left2 -> locktime [ dir = none, label = "Prevent tx from being added to the\nblock chain before a particular time" ];
left0 -> amount [ dir = none, label = "Set amount to spend & pay in fees" ];
left1 -> script [ dir = none, label = "Describe conditions necessary\nto spend this output" ];
label = "(Metadata not shown: number of inputs/outputs, length in bytes of each script/scriptSig)\n \nThe Parts Of A Transaction"
utxos [ shape = "none", label = "Each output waits as an Unspent TX Output (UTXO) until a later input spends it" ];
Locktime -> Locktime1 [ style = "invis", weight = 3 ];
Version -> Version1 [ style = "invis", weight = 3 ];
Inputs -> Inputs1 [ style = "invis", weight = 3 ];
Outputs -> Outputs1 [ style = "invis", weight = 3 ];
Outputs -> Inputs1 [weight = 0 ];
Inputs1 -> utxos [ style = "invis" ];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Before After
Before After

View file

@ -3,173 +3,87 @@
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: blockchain Pages: 1 -->
<svg width="450pt" height="444pt"
viewBox="0.00 0.00 450.00 444.16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.648415 0.648415) rotate(0) translate(4 681)">
<title>blockchain</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-681 691,-681 691,5 -4,5"/>
<text text-anchor="middle" x="343" y="-42.4" font-family="Sans" font-size="14.00">(Metadata not shown: number of inputs/outputs, length in bytes of each script/scriptSig)</text>
<text text-anchor="middle" x="343" y="-25.4" font-family="Sans" font-size="14.00"> </text>
<text text-anchor="middle" x="343" y="-8.4" font-family="Sans" font-size="14.00">The Parts Of A Transaction</text>
<!-- Title: tx_overview Pages: 1 -->
<svg width="450pt" height="171pt"
viewBox="0.00 0.00 450.00 170.69" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph1" class="graph" transform="scale(0.775862 0.775862) rotate(0) translate(4 216)">
<title>tx_overview</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-216 577,-216 577,5 -4,5"/>
<g id="graph2" class="cluster"><title>cluster_tx</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="92,-67 92,-669 582,-669 582,-67 92,-67"/>
<text text-anchor="middle" x="337" y="-652.4" font-family="Sans" font-size="14.00">A Basic Transaction With One Input &amp; One Output</text>
<polygon fill="none" stroke="black" stroke-width="0" points="38,-110 38,-168 476,-168 476,-110 38,-110"/>
</g>
<g id="graph3" class="cluster"><title>cluster_input</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="100,-247 100,-592 228,-592 228,-247 100,-247"/>
<text text-anchor="middle" x="164" y="-575.4" font-family="Sans" font-size="14.00">Input</text>
<g id="graph3" class="cluster"><title>cluster_tx1</title>
<polygon fill="none" stroke="black" stroke-width="0" points="38,-44 38,-102 476,-102 476,-44 38,-44"/>
</g>
<g id="graph4" class="cluster"><title>cluster_scriptsig</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="108,-263 108,-407 220,-407 220,-263 108,-263"/>
<text text-anchor="middle" x="164" y="-390.4" font-family="Sans" font-size="14.00">scriptSig</text>
<!-- Locktime -->
<g id="node2" class="node"><title>Locktime</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="468,-157 390,-157 390,-121 468,-121 468,-157"/>
<text text-anchor="middle" x="429" y="-134.9" font-family="Sans" font-size="14.00">Locktime</text>
</g>
<g id="graph5" class="cluster"><title>cluster_signature</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="116,-271 116,-366 212,-366 212,-271 116,-271"/>
<text text-anchor="middle" x="164" y="-349.4" font-family="Sans" font-size="14.00">signature</text>
<!-- Locktime1 -->
<g id="node14" class="node"><title>Locktime1</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="468,-91 390,-91 390,-55 468,-55 468,-91"/>
<text text-anchor="middle" x="429" y="-68.9" font-family="Sans" font-size="14.00">Locktime</text>
</g>
<g id="graph6" class="cluster"><title>cluster_output</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="488,-138 488,-287 574,-287 574,-138 488,-138"/>
<text text-anchor="middle" x="531" y="-270.4" font-family="Sans" font-size="14.00">Output</text>
<!-- Locktime&#45;&gt;Locktime1 -->
<!-- Outputs -->
<g id="node3" class="node"><title>Outputs</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="389,-157 317,-157 317,-121 389,-121 389,-157"/>
<text text-anchor="middle" x="353" y="-134.9" font-family="Sans" font-size="14.00">Outputs</text>
</g>
<!-- tophelp0 -->
<!-- version -->
<g id="node5" class="node"><title>version</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="197,-636 131,-636 131,-600 197,-600 197,-636"/>
<text text-anchor="middle" x="164" y="-613.9" font-family="Sans" font-size="14.00">version</text>
<!-- Inputs1 -->
<g id="node12" class="node"><title>Inputs1</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="316,-91 256,-91 256,-55 316,-55 316,-91"/>
<text text-anchor="middle" x="286" y="-68.9" font-family="Sans" font-size="14.00">Inputs</text>
</g>
<!-- tophelp0&#45;&gt;version -->
<!-- prevout -->
<!-- input -->
<!-- prevout&#45;&gt;input -->
<g id="edge7" class="edge"><title>prevout&#45;&gt;input</title>
<path fill="none" stroke="black" stroke-width="1.75" stroke-dasharray="5,2" d="M1.72672,-255C11.5697,-255 118.636,-255 153.264,-255"/>
<polygon fill="black" stroke="black" points="153.328,-258.5 163.328,-255 153.328,-251.5 153.328,-258.5"/>
<text text-anchor="middle" x="47" y="-361.4" font-family="Sans" font-size="14.00">Each input</text>
<text text-anchor="middle" x="47" y="-344.4" font-family="Sans" font-size="14.00">spends</text>
<text text-anchor="middle" x="47" y="-327.4" font-family="Sans" font-size="14.00">satoshis</text>
<text text-anchor="middle" x="47" y="-310.4" font-family="Sans" font-size="14.00">from a</text>
<text text-anchor="middle" x="47" y="-293.4" font-family="Sans" font-size="14.00">previous</text>
<text text-anchor="middle" x="47" y="-276.4" font-family="Sans" font-size="14.00">output</text>
<text text-anchor="middle" x="47" y="-259.4" font-family="Sans" font-size="14.00">(prevout)</text>
<!-- Outputs&#45;&gt;Inputs1 -->
<g id="edge16" class="edge"><title>Outputs&#45;&gt;Inputs1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M334.692,-120.965C327.602,-113.981 319.359,-105.861 311.694,-98.3109"/>
<polygon fill="black" stroke="black" points="313.866,-95.5373 304.286,-91.013 308.954,-100.524 313.866,-95.5373"/>
</g>
<!-- nextout -->
<!-- middle7 -->
<!-- version&#45;&gt;middle7 -->
<g id="edge25" class="edge"><title>version&#45;&gt;middle7</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M197.542,-618C285.309,-618 515.97,-618 530.301,-618"/>
<text text-anchor="middle" x="358" y="-622.4" font-family="Sans" font-size="14.00">Indicate what rules this tx follows</text>
<!-- Outputs1 -->
<g id="node13" class="node"><title>Outputs1</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="389,-91 317,-91 317,-55 389,-55 389,-91"/>
<text text-anchor="middle" x="353" y="-68.9" font-family="Sans" font-size="14.00">Outputs</text>
</g>
<!-- sequence -->
<g id="node7" class="node"><title>sequence</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="204,-451 124,-451 124,-415 204,-415 204,-451"/>
<text text-anchor="middle" x="164" y="-428.9" font-family="Sans" font-size="14.00">sequence</text>
<!-- Outputs&#45;&gt;Outputs1 -->
<!-- Inputs -->
<g id="node4" class="node"><title>Inputs</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="316,-157 256,-157 256,-121 316,-121 316,-157"/>
<text text-anchor="middle" x="286" y="-134.9" font-family="Sans" font-size="14.00">Inputs</text>
</g>
<!-- middle3 -->
<!-- sequence&#45;&gt;middle3 -->
<g id="edge17" class="edge"><title>sequence&#45;&gt;middle3</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M204.678,-433C297.245,-433 516.709,-433 530.335,-433"/>
<text text-anchor="middle" x="358" y="-437.4" font-family="Sans" font-size="14.00">Allow override of locktime</text>
<!-- Inputs&#45;&gt;Inputs1 -->
<!-- Version -->
<g id="node5" class="node"><title>Version</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="255,-157 187,-157 187,-121 255,-121 255,-157"/>
<text text-anchor="middle" x="221" y="-134.9" font-family="Sans" font-size="14.00">Version</text>
</g>
<!-- vout -->
<g id="node8" class="node"><title>vout</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="216,-505 112,-505 112,-469 216,-469 216,-505"/>
<text text-anchor="middle" x="164" y="-482.9" font-family="Sans" font-size="14.00">output index</text>
<!-- Version1 -->
<g id="node11" class="node"><title>Version1</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="255,-91 187,-91 187,-55 255,-55 255,-91"/>
<text text-anchor="middle" x="221" y="-68.9" font-family="Sans" font-size="14.00">Version</text>
</g>
<!-- middle2 -->
<!-- vout&#45;&gt;middle2 -->
<g id="edge15" class="edge"><title>vout&#45;&gt;middle2</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M216.582,-487.287C314.89,-487.822 517.8,-488.928 530.386,-488.997"/>
<text text-anchor="middle" x="358" y="-493.4" font-family="Sans" font-size="14.00">Select an output from previous tx</text>
<!-- Version&#45;&gt;Version1 -->
<!-- tx0_label -->
<g id="node6" class="node"><title>tx0_label</title>
<text text-anchor="middle" x="116" y="-143.4" font-family="Sans" font-size="14.00">The Main Parts Of</text>
<text text-anchor="middle" x="116" y="-126.4" font-family="Sans" font-size="14.00">Transaction 0</text>
</g>
<!-- txid -->
<g id="node9" class="node"><title>txid</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="191,-559 137,-559 137,-523 191,-523 191,-559"/>
<text text-anchor="middle" x="164" y="-536.9" font-family="Sans" font-size="14.00">txid</text>
<!-- tx_label -->
<g id="node7" class="node"><title>tx_label</title>
<text text-anchor="middle" x="319" y="-189.9" font-family="Sans" font-size="14.00">Each input spends a previous output</text>
</g>
<!-- middle1 -->
<!-- txid&#45;&gt;middle1 -->
<g id="edge13" class="edge"><title>txid&#45;&gt;middle1</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M191.285,-541C273.68,-541 515.249,-541 530.267,-541"/>
<text text-anchor="middle" x="358" y="-562.4" font-family="Sans" font-size="14.00">Select a previous tx with an</text>
<text text-anchor="middle" x="358" y="-545.4" font-family="Sans" font-size="14.00">output to spend</text>
<!-- tx_label&#45;&gt;Outputs -->
<!-- tx_label&#45;&gt;Inputs -->
<!-- utxos -->
<g id="node16" class="node"><title>utxos</title>
<text text-anchor="middle" x="286" y="-13.9" font-family="Sans" font-size="14.00">Each output waits as an Unspent TX Output (UTXO) until a later input spends it</text>
</g>
<!-- hashtype -->
<g id="node13" class="node"><title>hashtype</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="204,-315 124,-315 124,-279 204,-279 204,-315"/>
<text text-anchor="middle" x="164" y="-292.9" font-family="Sans" font-size="14.00">hashtype</text>
</g>
<!-- middle6 -->
<!-- hashtype&#45;&gt;middle6 -->
<g id="edge23" class="edge"><title>hashtype&#45;&gt;middle6</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M204.325,-296.78C296.683,-296.277 516.674,-295.078 530.333,-295.004"/>
<text text-anchor="middle" x="358" y="-316.4" font-family="Sans" font-size="14.00">Authorize others to modify tx;</text>
<text text-anchor="middle" x="358" y="-299.4" font-family="Sans" font-size="14.00">select what they can modify</text>
</g>
<!-- signature -->
<!-- middle5 -->
<!-- signature&#45;&gt;middle5 -->
<g id="edge21" class="edge"><title>signature&#45;&gt;middle5</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M164.595,-333C180.617,-333 514.777,-333 530.432,-333"/>
<text text-anchor="middle" x="358" y="-354.4" font-family="Sans" font-size="14.00">Protect tx against modification</text>
<text text-anchor="middle" x="358" y="-337.4" font-family="Sans" font-size="14.00">by unauthorized parties</text>
</g>
<!-- scriptsig -->
<!-- middle4 -->
<!-- scriptsig&#45;&gt;middle4 -->
<g id="edge19" class="edge"><title>scriptsig&#45;&gt;middle4</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M164.595,-374.005C180.617,-374.136 514.777,-376.867 530.432,-376.995"/>
<text text-anchor="middle" x="358" y="-381.4" font-family="Sans" font-size="14.00">Satisfy prevout script conditions</text>
</g>
<!-- left0 -->
<!-- amount -->
<g id="node29" class="node"><title>amount</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="566,-236 496,-236 496,-200 566,-200 566,-236"/>
<text text-anchor="middle" x="531" y="-213.9" font-family="Sans" font-size="14.00">amount</text>
</g>
<!-- left0&#45;&gt;amount -->
<g id="edge29" class="edge"><title>left0&#45;&gt;amount</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M191.285,-218.926C256.819,-218.747 423.047,-218.294 495.891,-218.096"/>
<text text-anchor="middle" x="358" y="-223.4" font-family="Sans" font-size="14.00">Set amount to spend &amp; pay in fees</text>
</g>
<!-- left1 -->
<!-- script -->
<g id="node30" class="node"><title>script</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="558,-182 504,-182 504,-146 558,-146 558,-182"/>
<text text-anchor="middle" x="531" y="-159.9" font-family="Sans" font-size="14.00">script</text>
</g>
<!-- left1&#45;&gt;script -->
<g id="edge31" class="edge"><title>left1&#45;&gt;script</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M191.285,-164.926C259.228,-164.741 435.402,-164.26 503.536,-164.075"/>
<text text-anchor="middle" x="358" y="-186.4" font-family="Sans" font-size="14.00">Describe conditions necessary</text>
<text text-anchor="middle" x="358" y="-169.4" font-family="Sans" font-size="14.00">to spend this output</text>
</g>
<!-- left2 -->
<!-- locktime -->
<g id="node31" class="node"><title>locktime</title>
<polygon fill="none" stroke="black" stroke-width="1.75" points="568,-125 494,-125 494,-89 568,-89 568,-125"/>
<text text-anchor="middle" x="531" y="-102.9" font-family="Sans" font-size="14.00">locktime</text>
</g>
<!-- left2&#45;&gt;locktime -->
<g id="edge27" class="edge"><title>left2&#45;&gt;locktime</title>
<path fill="none" stroke="black" stroke-width="1.75" d="M191.285,-110.703C256.238,-109.995 420.105,-108.209 493.931,-107.404"/>
<text text-anchor="middle" x="358" y="-132.4" font-family="Sans" font-size="14.00">Prevent tx from being added to the</text>
<text text-anchor="middle" x="358" y="-115.4" font-family="Sans" font-size="14.00">block chain before a particular time</text>
</g>
<!-- middle0 -->
<!-- output -->
<!-- output&#45;&gt;nextout -->
<g id="edge9" class="edge"><title>output&#45;&gt;nextout</title>
<path fill="none" stroke="black" stroke-width="1.75" stroke-dasharray="5,2" d="M531.687,-254C540.903,-254 640.334,-254 673.96,-254"/>
<polygon fill="black" stroke="black" points="674.365,-257.5 684.365,-254 674.365,-250.5 674.365,-257.5"/>
<text text-anchor="middle" x="633" y="-377.4" font-family="Sans" font-size="14.00">Each output</text>
<text text-anchor="middle" x="633" y="-360.4" font-family="Sans" font-size="14.00">waits as an</text>
<text text-anchor="middle" x="633" y="-343.4" font-family="Sans" font-size="14.00">Unspent</text>
<text text-anchor="middle" x="633" y="-326.4" font-family="Sans" font-size="14.00">Tx Output</text>
<text text-anchor="middle" x="633" y="-309.4" font-family="Sans" font-size="14.00">(UTXO)</text>
<text text-anchor="middle" x="633" y="-292.4" font-family="Sans" font-size="14.00">until a</text>
<text text-anchor="middle" x="633" y="-275.4" font-family="Sans" font-size="14.00">later input</text>
<text text-anchor="middle" x="633" y="-258.4" font-family="Sans" font-size="14.00">spends it</text>
<!-- Inputs1&#45;&gt;utxos -->
<!-- tx1_label -->
<g id="node15" class="node"><title>tx1_label</title>
<text text-anchor="middle" x="116" y="-77.4" font-family="Sans" font-size="14.00">The Main Parts Of</text>
<text text-anchor="middle" x="116" y="-60.4" font-family="Sans" font-size="14.00">Transaction 1</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Before After
Before After