From e26b0e3819f223848cdbef4ceb4386ec9c32b57c Mon Sep 17 00:00:00 2001 From: "David A. Harding" Date: Sat, 27 Sep 2014 13:58:27 -0400 Subject: [PATCH] Revise TX Overview Image * Replace previous TX Overview image with a simplified illustration. The previous overview image was commented out in pull #566 / commit 6afc683. New image incorporates suggestions by @saivann (thanks!) * Add new illustration showing the specifics of outputs and inputs (and how they're related). This replaces most of the detail lost by using a simplified overview image * Add two short paragraphs briefly describing the ouput and input features, leading into the existing detailed P2PKH description --- _includes/guide_transactions.md | 21 ++- img/dev/en-tx-overview-spending.dot | 52 +++++++ img/dev/en-tx-overview-spending.png | Bin 0 -> 7518 bytes img/dev/en-tx-overview-spending.svg | 108 ++++++++++++++ img/dev/en-tx-overview.dot | 104 +++++-------- img/dev/en-tx-overview.png | Bin 16665 -> 5640 bytes img/dev/en-tx-overview.svg | 218 +++++++++------------------- 7 files changed, 281 insertions(+), 222 deletions(-) create mode 100644 img/dev/en-tx-overview-spending.dot create mode 100644 img/dev/en-tx-overview-spending.png create mode 100644 img/dev/en-tx-overview-spending.svg diff --git a/_includes/guide_transactions.md b/_includes/guide_transactions.md index 54069f1d..7ce4d33f 100644 --- a/_includes/guide_transactions.md +++ b/_includes/guide_transactions.md @@ -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) - 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 diff --git a/img/dev/en-tx-overview-spending.dot b/img/dev/en-tx-overview-spending.dot new file mode 100644 index 00000000..7ee80ffe --- /dev/null +++ b/img/dev/en-tx-overview-spending.dot @@ -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" + +} diff --git a/img/dev/en-tx-overview-spending.png b/img/dev/en-tx-overview-spending.png new file mode 100644 index 0000000000000000000000000000000000000000..a01168c12f4138d2722e3a0e4953b698e481c6a4 GIT binary patch literal 7518 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 + + + + + +tx_overview + +Overview Of Transaction Spending +cluster_tx0 + + +cluster_outputs + +Example Output Paying A Pubkey Script + +cluster_tx1 + + +cluster_inputs + +Example Input Spending The Example Output + + +tx1_label +Transaction +1 + + +tx0_label +Transaction +0 + + + +txid + +Transaction +Identifier + + +tx0_label->txid + + + + +tx1_notshown +Not Shown: +Version, Outputs, +Locktime + + +tx0_notshown +Not Shown: +Version, Inputs, +Locktime + + + +pubkey_script + +Pubkey +Script + + +signature_script + +Signature +Script + + +pubkey_script->signature_script + + + + +amount + +Amount +(satoshis) + + +output0_label +Output 0 +(Implied) + + +index + +Output +Index + + +output0_label->index + + + + +sequence + +Sequence +Number + + + diff --git a/img/dev/en-tx-overview.dot b/img/dev/en-tx-overview.dot index 5e623a29..9c3bc9bb 100644 --- a/img/dev/en-tx-overview.dot +++ b/img/dev/en-tx-overview.dot @@ -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" - } - - 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 ]; - - subgraph cluster_output { - output [style = invis, label="", width=0, height=0 ]; - amount; - script; - label = "Output" - } - - locktime; - label = "A Basic Transaction With One Input & One Output" + labelloc = b + graph [ penwidth=0 ]; } -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 ]; + tx_label [ shape = "none", label = "Each input spends a previous output" ]; + tx_label -> Inputs [ style = "invis" ]; + tx_label -> Outputs [ 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" ]; +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 ]; +} + +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" ]; -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" } diff --git a/img/dev/en-tx-overview.png b/img/dev/en-tx-overview.png index f545e708f8b18b3d2b141ce38cd3c49b245b17b1..0f991e1bcf2f8bb6846a82452d50d9c1ef9825a1 100644 GIT binary patch literal 5640 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 R#2sDn-qJMCczpwj{SO#KwC?}_ literal 16665 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 K{YerM{Qm*EU8J}G diff --git a/img/dev/en-tx-overview.svg b/img/dev/en-tx-overview.svg index 9d6325cf..7bbcfaa2 100644 --- a/img/dev/en-tx-overview.svg +++ b/img/dev/en-tx-overview.svg @@ -3,173 +3,87 @@ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> - - - -blockchain - -(Metadata not shown: number of inputs/outputs, length in bytes of each script/scriptSig) - -The Parts Of A Transaction + + + +tx_overview + cluster_tx - -A Basic Transaction With One Input & One Output + -cluster_input - -Input +cluster_tx1 + -cluster_scriptsig - -scriptSig + +Locktime + +Locktime -cluster_signature - -signature + +Locktime1 + +Locktime -cluster_output - -Output + + +Outputs + +Outputs - - -version - -version + +Inputs1 + +Inputs - - - - -prevout->input - - -Each input -spends -satoshis -from a -previous -output -(prevout) + +Outputs->Inputs1 + + - - - -version->middle7 - -Indicate what rules this tx follows + +Outputs1 + +Outputs - -sequence - -sequence + + +Inputs + +Inputs - - -sequence->middle3 - -Allow override of locktime + + +Version + +Version - -vout - -output index + +Version1 + +Version - - -vout->middle2 - -Select an output from previous tx + + +tx0_label +The Main Parts Of +Transaction 0 - -txid - -txid + +tx_label +Each input spends a previous output - - -txid->middle1 - -Select a previous tx with an -output to spend + + + +utxos +Each output waits as an Unspent TX Output (UTXO) until a later input spends it - -hashtype - -hashtype - - - -hashtype->middle6 - -Authorize others to modify tx; -select what they can modify - - - - -signature->middle5 - -Protect tx against modification -by unauthorized parties - - - - -scriptsig->middle4 - -Satisfy prevout script conditions - - - -amount - -amount - - -left0->amount - -Set amount to spend & pay in fees - - - -script - -script - - -left1->script - -Describe conditions necessary -to spend this output - - - -locktime - -locktime - - -left2->locktime - -Prevent tx from being added to the -block chain before a particular time - - - - -output->nextout - - -Each output -waits as an -Unspent -Tx Output -(UTXO) -until a -later input -spends it + + +tx1_label +The Main Parts Of +Transaction 1