<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.bitcoinsv.io/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Todd+Price</id>
	<title>Bitcoin Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bitcoinsv.io/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Todd+Price"/>
	<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php/Special:Contributions/Todd_Price"/>
	<updated>2026-05-27T20:13:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Multisignature_transaction&amp;diff=3049</id>
		<title>Multisignature transaction</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Multisignature_transaction&amp;diff=3049"/>
		<updated>2022-04-26T01:58:17Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Multi-Signature Transactions requires multiple participants to sign a [[transaction]] with their [[private key]] rather than just one.&lt;br /&gt;
&lt;br /&gt;
Multisignature transactions differ from [[threshold signature]]s in that they require m/n complete [[digital signature]]s, whereas a threshold signature scheme requires m/n partial fragments of a digital signature be added together in a [[multi-party computation]].&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Multisignature_transaction&amp;diff=3048</id>
		<title>Multisignature transaction</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Multisignature_transaction&amp;diff=3048"/>
		<updated>2022-04-26T01:57:57Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Multi-Signature Transactions requires multiple participants to sign a [[transaction]] with their [[private key]] rather than just one.&lt;br /&gt;
&lt;br /&gt;
Multisignature transactions differ from threshold signatures in that they require m/n complete [[digital signature]]s, whereas a threshold signature scheme requires m/n partial fragments of a digital signature be added together in a [[multi-party computation]].&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Multisignature_transaction&amp;diff=3047</id>
		<title>Multisignature transaction</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Multisignature_transaction&amp;diff=3047"/>
		<updated>2022-04-26T01:57:38Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Multi-Signature Transactions requires multiple participants to sign a [[transaction]] with their [[private key]] rather than just one.&lt;br /&gt;
&lt;br /&gt;
Multisignature transactions differ from threshold signatures in that they require m/n complete digital signatures, whereas a threshold signature scheme requires m/n partial fragments of a digital signature be added together in a [[multi-party computation]].&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Multisignature_transaction&amp;diff=3046</id>
		<title>Multisignature transaction</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Multisignature_transaction&amp;diff=3046"/>
		<updated>2022-04-26T01:57:19Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;Multi-Signature Transactions requires multiple participants to sign a transaction with their private key rather than just one.  Multisignature transactions differ from...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Multi-Signature Transactions requires multiple participants to sign a [[transaction]] with their [[private key]] rather than just one.&lt;br /&gt;
&lt;br /&gt;
Multisignature transactions differ from threshold signatures in that they require m/n complete digital signatures, whereas a threshold signature scheme requires m/n partial fragments of a digital signature be added together in a [[multiparty computation]].&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Multi-edge_graph&amp;diff=3045</id>
		<title>Multi-edge graph</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Multi-edge_graph&amp;diff=3045"/>
		<updated>2022-04-26T01:51:48Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;A Multi-Edge Graph is a graph where there are multiple parallel edges between the same nodes. For example, multiples flights between two cities.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Multi-Edge Graph is a [[graph]] where there are multiple parallel [[edge]]s between the same [[node(graph)|node]]s. For example, multiples flights between two cities.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Multi-party_computation&amp;diff=3044</id>
		<title>Multi-party computation</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Multi-party_computation&amp;diff=3044"/>
		<updated>2022-04-26T01:48:38Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;MPC (Multi Party Computation) is a secure computation that several participants jointly execute.    It requires that the number of participants who do not trust each other co...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MPC (Multi Party Computation) is a secure computation that several participants jointly execute.  &lt;br /&gt;
&lt;br /&gt;
It requires that the number of participants who do not trust each other come together to jointly perform an operation over their inputs while keeping the inputs private from each other. &lt;br /&gt;
&lt;br /&gt;
A threshold signature scheme or TSS is the name given to this process in the context of distributed key generation and distributed signing.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Modular_arithmetic&amp;diff=3043</id>
		<title>Modular arithmetic</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Modular_arithmetic&amp;diff=3043"/>
		<updated>2022-04-26T01:07:00Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;Modular Arithmetic is a system of arithmetic for integers, which considers the remainder.   In modular arithmetic, numbers &amp;quot;wrap around&amp;quot; upon reaching a given fixed quant...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modular Arithmetic is a system of arithmetic for integers, which considers the remainder. &lt;br /&gt;
&lt;br /&gt;
In modular arithmetic, numbers &amp;quot;wrap around&amp;quot; upon reaching a given fixed quantity (this given quantity is known as the modulus) to leave a remainder. &lt;br /&gt;
&lt;br /&gt;
It can be though of as a clock face with the modulus amount of numbers on it. The modulus of n will be the value that you find if you wrapped around the clock values n times.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Metanet_Protocol&amp;diff=3042</id>
		<title>Metanet Protocol</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Metanet_Protocol&amp;diff=3042"/>
		<updated>2022-04-26T01:00:12Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Metanet_graph.png|thumb|A typical Metanet graph.]]&lt;br /&gt;
&lt;br /&gt;
The '''Metanet Protocol''' is a layer-2 overlay protocol that defines a method for creating data structure over Bitcoin SV. The protocol utilises [[Metanet_Protocol#Node and Edge Structure|nodes and edges]] to specify directed acyclic graph (DAG) data structures on the Bitcoin SV ledger. The Metanet protocol can be used to construct diverse systems such as file systems, internet domains, ownership structures and code repositories.&lt;br /&gt;
&lt;br /&gt;
There are tools available to write and read Metanet graphs, and a growing range of projects that use the Metanet protocol to structure their application data.&lt;br /&gt;
&lt;br /&gt;
==Node and Edge Structure==&lt;br /&gt;
&lt;br /&gt;
The Metanet Protocol (MNP) is a protocol for creating graph structures comprising nodes and edges on the ledger. In the Metanet protocol the following definitions of node and edge are used:&lt;br /&gt;
&lt;br /&gt;
* '''Metanet Node''' - A transaction using the Metanet protocol format.&lt;br /&gt;
* '''Metanet Edge''' - An input signature linking two Metanet nodes.&lt;br /&gt;
&lt;br /&gt;
A Metanet node is a transaction that conforms to the Metanet transaction format specified in [https://bitcoinsv.io/wp-content/uploads/2020/10/The-Metanet-Technical-Summary-v1.0.pdf Metanet technical summary] document produced by nChain. The basic components of a Metanet transaction include a protocol flag, Metanet-specific data attributes, and any content data that is to be stored by a Metanet node transaction. &lt;br /&gt;
&lt;br /&gt;
The protocol flag is a 4-byte [[hexadecimal]] prefix that signifies that a transaction is using the format of the Metanet protocol. The hexadecimal value of the prefix was chosen to be the hexademical encoding 0x4d455441 of the string 'meta' by [https://twitter.com/BitcoinAssn/status/1136232235798016001?s=20 public poll] on June 5th 2019.&lt;br /&gt;
&lt;br /&gt;
The Metanet-specific data attributes of a Metanet node transaction include the following:&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;math&amp;gt;P_{node}&amp;lt;/math&amp;gt;''' - the public key defining the node.&lt;br /&gt;
* '''&amp;lt;math&amp;gt;TxID_{node}&amp;lt;/math&amp;gt;''' - the unique transaction ID of the node. &lt;br /&gt;
* '''&amp;lt;math&amp;gt;P_{parent}&amp;lt;/math&amp;gt;''' - the public key defining a parent of the node.&lt;br /&gt;
* '''&amp;lt;math&amp;gt;SigP_{parent}&amp;lt;/math&amp;gt;''' - a signature created using the private key associated with the public key defining a parent of the node.&lt;br /&gt;
* '''&amp;lt;math&amp;gt;TxID_{parent}&amp;lt;/math&amp;gt;''' - the unique transaction ID of the parent of the node.&lt;br /&gt;
&lt;br /&gt;
The Metanet-specific data attributes listed above are used collectively to define a Metanet node and its position within a larger graph structure of multiple Metanet nodes, known as a ''Metanet graph''. &lt;br /&gt;
&lt;br /&gt;
It is possible that a node does not have any parents and such a node is termed a ''root node''. A root node will have null values for any &amp;lt;math&amp;gt;P_{parent}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;SigP_{parent}&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;TxID_{parent}&amp;lt;/math&amp;gt; attributes, and can therefore use a valid signature from any public key in its input(s).&lt;br /&gt;
&lt;br /&gt;
A Metanet transaction is defined as a transaction that contains an OP_FALSE OP_RETURN payload containing:&lt;br /&gt;
&lt;br /&gt;
* The Metanet flag&lt;br /&gt;
[[File:Metanet_node.png|thumb|A Metanet node transaction.]]&lt;br /&gt;
* A node public key '''&amp;lt;math&amp;gt;P_{node}&amp;lt;/math&amp;gt;'''&lt;br /&gt;
* A parent transaction ID '''&amp;lt;math&amp;gt;TxID_{parent}&amp;lt;/math&amp;gt;''' (null if a root node).&lt;br /&gt;
&lt;br /&gt;
In order to qualify as a Metanet-valid node, the transaction must also be signed by the public key corresponding to its parent '''&amp;lt;math&amp;gt;P_{parent}&amp;lt;/math&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
Any content data and its encoding can be included following these core Metanet attributes in the OP_FALSE OP_RETURN payload. The Metanet protocol does not specify the use of any one scheme for content data and additional attributes, and any valued usage of the Metanet protocol attributes above constitute a Metanet node transaction.&lt;br /&gt;
&lt;br /&gt;
A basic example of a Metanet node transaction that conforms to this format is shown in the diagram on the right.&lt;br /&gt;
&lt;br /&gt;
The Metanet graph is formed by creating edges between parent Metanet nodes and child Metanet nodes. An edge is created between a parent and child by the creation and insertion of the signature '''&amp;lt;math&amp;gt;SigP_{parent}&amp;lt;/math&amp;gt;''' in the child node, using the parent public key. [[File:Metanet_edge.png|thumb|The creation of a Metanet edge.]]&lt;br /&gt;
&lt;br /&gt;
The fact that this signature is in a transaction input means that the signature itself may be validated by Miners. This means that attempts to spoof a Metanet node can be mitigated either by validating the signature explicitly or by confirming that the node is spending an appropriate previous output.&lt;br /&gt;
&lt;br /&gt;
== Rules of the Metanet Protocol==&lt;br /&gt;
&lt;br /&gt;
The Metanet protocol specifies a simple and extensible rule set for creating Metanet graphs and data structures. The base rule set is the following:&lt;br /&gt;
&lt;br /&gt;
* Nodes are transactions.&lt;br /&gt;
* Edges are created by signatures.&lt;br /&gt;
* Each node is uniquely identified by the pair of attributes: '''&amp;lt;math&amp;gt;P_{node}&amp;lt;/math&amp;gt;''', '''&amp;lt;math&amp;gt;TxID_{node}&amp;lt;/math&amp;gt;'''.&lt;br /&gt;
* Each node must specify the node ID of itself and its parent: '''&amp;lt;math&amp;gt;ID_{node}&amp;lt;/math&amp;gt;''', '''&amp;lt;math&amp;gt;ID_{parent}&amp;lt;/math&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
The unique node identifier for a node is defined mathematically as '''&amp;lt;math&amp;gt;H(P_{node}||TxID_{node})&amp;lt;/math&amp;gt;''', where '''&amp;lt;math&amp;gt;H()&amp;lt;/math&amp;gt;''' is a cryptographic hash function.&lt;br /&gt;
&lt;br /&gt;
Metanet graph structures may be created using this base rule set alone. It is also possible to impose additional rules to Metanet graph structures to achieve different properties for data structures.&lt;br /&gt;
&lt;br /&gt;
A simple extension of the rule set is to impose the following [[constraint]]s:&lt;br /&gt;
[[File:Metanet_rules.png|thumb|A simple Metanet rule set.]]&lt;br /&gt;
&lt;br /&gt;
* The in-degree of a node should be 0 (no parent) or 1 (one parent).&lt;br /&gt;
* The out-degree of a node should be a free parameter.&lt;br /&gt;
&lt;br /&gt;
These additional rules allow domain-like structures to emerge as Metanet DAGs, which can be used to structure websites and file systems which inherit the permission structure of a Metanet graph.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Mnemonic&amp;diff=3041</id>
		<title>Mnemonic</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Mnemonic&amp;diff=3041"/>
		<updated>2022-04-26T00:54:01Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;Assisting or intended to assist memory. A mnemonic will reduce a complex system to a simpler form like a rhyme or formula.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assisting or intended to assist memory. A mnemonic will reduce a complex system to a simpler form like a rhyme or formula.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Brainwallet&amp;diff=3040</id>
		<title>Brainwallet</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Brainwallet&amp;diff=3040"/>
		<updated>2022-04-26T00:53:46Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Brainwallets are like the mnemonic seeds generated by hardware wallets, however, the human user generates the words themselves and memorises them without any written record. &lt;br /&gt;
&lt;br /&gt;
The [[mnemonic]] seed/ passphrase is never written down. It is 'stored' in the holder's brain. &lt;br /&gt;
&lt;br /&gt;
If the holder forgets the passphrase (or becomes incapacitated), the money is likely lost forever - not a very secure storage method.&lt;br /&gt;
&lt;br /&gt;
Creating randomness in passphrase words is extremely difficult to do by hand, therefore security is again compromised.&lt;br /&gt;
&lt;br /&gt;
It is possible to use a [[https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki BIP 39]] passphrase generator to get strong entropy/ randomness and optionally add a salt value for additional security, however storing anything in the human brain carries inherent risks. &lt;br /&gt;
&lt;br /&gt;
Use a brainwallet at your own (high) risk.&lt;br /&gt;
&lt;br /&gt;
For a detailed tutorial on complex brainwallet creation, see [https://craigwright.net/blog/bitcoin-blockchain-tech/how-to-make-a-brain-wallet/ this] article by [https://craigwright.net/about/#biography Dr Craig Wright].&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Mining_pool&amp;diff=3039</id>
		<title>Mining pool</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Mining_pool&amp;diff=3039"/>
		<updated>2022-04-26T00:48:44Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Mining Pool is a system of distributed hashing machines that are operating under instruction from a coordinating node to solve the proof of work hash puzzle. &lt;br /&gt;
&lt;br /&gt;
The coordinating node delegates the work they are to perform in the form of a [[mining candidate]] and broadcasts the correct solution to other nodes on the network if one is found.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Mining_pool&amp;diff=3038</id>
		<title>Mining pool</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Mining_pool&amp;diff=3038"/>
		<updated>2022-04-26T00:48:28Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;A Mining Pool is a system of distributed hashing machines that are operating under instruction from a coordinating node to solve the proof of work hash puzzle.   The coordinat...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Mining Pool is a system of distributed hashing machines that are operating under instruction from a coordinating node to solve the proof of work hash puzzle. &lt;br /&gt;
&lt;br /&gt;
The coordinating node delegates the work they are to perform in the form of a [[mining template]] and broadcasts the correct solution to other nodes on the network if one is found.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Difficulty&amp;diff=3037</id>
		<title>Difficulty</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Difficulty&amp;diff=3037"/>
		<updated>2022-04-26T00:47:25Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''See also: [[Target]]''&lt;br /&gt;
&lt;br /&gt;
=== What is difficulty? ===&lt;br /&gt;
&lt;br /&gt;
Difficulty is a measure of how difficult it is to find a hash below a given [[target]]. Difficulty answers the question: &amp;quot;how many times more difficult is it to mine a block now, compared with how difficult it was to mine the [[Genesis block|Genesis Block]]?&amp;quot;. It has a close relationship with target but is not the same thing. Rather it has an inverse relationship where a higher difficulty implies a lower target value.&lt;br /&gt;
&lt;br /&gt;
The Bitcoin network has a global block difficulty. Valid blocks must have a hash below this target.&lt;br /&gt;
[[Mining pool]]s also have a pool-specific share difficulty setting a lower limit for shares.&lt;br /&gt;
&lt;br /&gt;
=== How often does the network difficulty change? ===&lt;br /&gt;
&lt;br /&gt;
See [[Target|target]].&lt;br /&gt;
&lt;br /&gt;
=== What is the formula for difficulty? ===&lt;br /&gt;
difficulty = difficulty_1_target / current_target &lt;br /&gt;
&lt;br /&gt;
''target is a 256 bit [[big number]]''&lt;br /&gt;
&lt;br /&gt;
''difficulty_1_target is the target used in the Genesis Block and represents a difficulty of 1.''&lt;br /&gt;
&lt;br /&gt;
difficulty_1_target can be different for various ways to measure difficulty.&lt;br /&gt;
Traditionally, it represents a hash where the leading 32 bits are zero and the rest are one (this is known as &amp;quot;pool difficulty&amp;quot; or &amp;quot;pdiff&amp;quot;).&lt;br /&gt;
The Bitcoin protocol represents targets as a custom floating point type with limited precision; as a result, Bitcoin clients often approximate difficulty based on this (known as &amp;quot;bdiff&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
===How is difficulty stored in blocks?===&lt;br /&gt;
&lt;br /&gt;
Each block stores a packed representation in its block header (called [[Block hashing algorithm|Bits]]) for its actual [[hexadecimal]] [[target]]. The target can be derived from Bits via a predefined formula. For example, if the packed target in the block is 0x1b0404cb, the hexadecimal target is:&lt;br /&gt;
 0x0404cb * 2**(8*(0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000&lt;br /&gt;
&lt;br /&gt;
Note that the 0x0404cb value is a signed value in this format. The largest legal value for this field is 0x7fffff. To make a larger value you must shift it down one full byte. Also 0x008000 is the smallest positive valid value.&lt;br /&gt;
&lt;br /&gt;
===How is difficulty calculated? What is the difference between bdiff and pdiff?===&lt;br /&gt;
&lt;br /&gt;
The highest possible target (difficulty 1) is defined as 0x1d00ffff, which gives us a hex target of&lt;br /&gt;
 0x00ffff * 2**(8*(0x1d - 3)) = 0x00000000FFFF0000000000000000000000000000000000000000000000000000&lt;br /&gt;
&lt;br /&gt;
It should be noted that pooled mining often uses non-truncated targets, which puts &amp;quot;pool difficulty 1&amp;quot; at&lt;br /&gt;
 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF&lt;br /&gt;
&lt;br /&gt;
So the difficulty at 0x1b0404cb is therefore:&lt;br /&gt;
 0x00000000FFFF0000000000000000000000000000000000000000000000000000 /&lt;br /&gt;
 0x00000000000404CB000000000000000000000000000000000000000000000000 &lt;br /&gt;
 = 16307.420938523983 (bdiff)&lt;br /&gt;
And:&lt;br /&gt;
 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF /&lt;br /&gt;
 0x00000000000404CB000000000000000000000000000000000000000000000000 &lt;br /&gt;
 = 16307.669773817162 (pdiff)&lt;br /&gt;
&lt;br /&gt;
Here's a fast way to calculate Bitcoin difficulty. It uses a modified Taylor series for the logarithm (you can see tutorials on flipcode and wikipedia) and relies on logs to transform the difficulty calculation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cmath&amp;gt;&lt;br /&gt;
&lt;br /&gt;
inline float fast_log(float val)&lt;br /&gt;
{&lt;br /&gt;
   int * const exp_ptr = reinterpret_cast &amp;lt;int *&amp;gt;(&amp;amp;val);&lt;br /&gt;
   int x = *exp_ptr;&lt;br /&gt;
   const int log_2 = ((x &amp;gt;&amp;gt; 23) &amp;amp; 255) - 128;&lt;br /&gt;
   x &amp;amp;= ~(255 &amp;lt;&amp;lt; 23);&lt;br /&gt;
   x += 127 &amp;lt;&amp;lt; 23;&lt;br /&gt;
   *exp_ptr = x;&lt;br /&gt;
&lt;br /&gt;
   val = ((-1.0f/3) * val + 2) * val - 2.0f/3;&lt;br /&gt;
   return ((val + log_2) * 0.69314718f);&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
float difficulty(unsigned int bits)&lt;br /&gt;
{&lt;br /&gt;
    static double max_body = fast_log(0x00ffff), scaland = fast_log(256);&lt;br /&gt;
    return exp(max_body - fast_log(bits &amp;amp; 0x00ffffff) + scaland * (0x1d - ((bits &amp;amp; 0xff000000) &amp;gt;&amp;gt; 24)));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; difficulty(0x1b0404cb) &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see the math to go from the normal difficulty calculations (which require large big ints bigger than the space in any normal integer) to the calculation above, here's some python:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import decimal, math&lt;br /&gt;
l = math.log&lt;br /&gt;
e = math.e&lt;br /&gt;
&lt;br /&gt;
print 0x00ffff * 2**(8*(0x1d - 3)) / float(0x0404cb * 2**(8*(0x1b - 3)))&lt;br /&gt;
print l(0x00ffff * 2**(8*(0x1d - 3)) / float(0x0404cb * 2**(8*(0x1b - 3))))&lt;br /&gt;
print l(0x00ffff * 2**(8*(0x1d - 3))) - l(0x0404cb * 2**(8*(0x1b - 3)))&lt;br /&gt;
print l(0x00ffff) + l(2**(8*(0x1d - 3))) - l(0x0404cb) - l(2**(8*(0x1b - 3)))&lt;br /&gt;
print l(0x00ffff) + (8*(0x1d - 3))*l(2) - l(0x0404cb) - (8*(0x1b - 3))*l(2)&lt;br /&gt;
print l(0x00ffff / float(0x0404cb)) + (8*(0x1d - 3))*l(2) - (8*(0x1b - 3))*l(2)&lt;br /&gt;
print l(0x00ffff / float(0x0404cb)) + (0x1d - 0x1b)*l(2**8)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What is the current difficulty? ===&lt;br /&gt;
[https://whatsonchain.com/ Current difficulty]&lt;br /&gt;
&lt;br /&gt;
=== What is the maximum difficulty? ===&lt;br /&gt;
&lt;br /&gt;
There is no minimum target. The maximum difficulty is roughly: maximum_target / 1 (since 0 would result in infinity), which is a ridiculously huge number (about 2^224).&lt;br /&gt;
&lt;br /&gt;
The actual maximum difficulty is when current_target=0, but we would not be able to calculate the difficulty if that happened. (fortunately, it never will, so we're ok.)&lt;br /&gt;
&lt;br /&gt;
In the case of Bitcoin (BSV) and Bitcoin Cash (BCH), the network's difficulty can rise by a maximum of 100% of the current difficulty in a single adjustment.&lt;br /&gt;
&lt;br /&gt;
In the original implementation, still used by Bitcoin Core (BTC), the difficulty can rise by a maximum of 400% of the current difficulty in a single adjustment.&lt;br /&gt;
&lt;br /&gt;
=== Can the network difficulty decrease? ===&lt;br /&gt;
Yes it can. See discussion in [[target]]. &lt;br /&gt;
&lt;br /&gt;
In the case of Bitcoin (BSV) and Bitcoin Cash (BCH), the network's difficulty can adjust downwards by up to 50% of the current difficulty in a single adjustment.&lt;br /&gt;
&lt;br /&gt;
In the original implementation, still used by Bitcoin Core (BTC), the network's difficulty can adjust downwards by up to 75% of the current difficulty in a single adjustment.&lt;br /&gt;
&lt;br /&gt;
=== What is the minimum difficulty? ===&lt;br /&gt;
The minimum difficulty, when the target is at the maximum allowed value, is 1. This is the difficulty of the [[Genesis block]].&lt;br /&gt;
&lt;br /&gt;
=== What network hash rate results in a given difficulty? ===&lt;br /&gt;
The difficulty is adjusted every 2016 blocks based on the [[Block_timestamp|time]] it took to find the previous 2016 blocks.  At the desired rate of one block each 10 minutes, 2016 blocks would take exactly two weeks to find.  If the previous 2016 blocks took more than two weeks to find, the difficulty is reduced.  If they took less than two weeks, the difficulty is increased.  The change in difficulty, is in proportion to the amount of time over or under two weeks, the previous 2016 blocks took to find.&lt;br /&gt;
&lt;br /&gt;
To find a block, the hash must be less than the target.  The hash is effectively a random number between 0 and 2**256-1.  The offset for difficulty 1 is&lt;br /&gt;
 0xffff * 2**208&lt;br /&gt;
and for difficulty D is&lt;br /&gt;
 (0xffff * 2**208)/D&lt;br /&gt;
&lt;br /&gt;
The expected number of hashes we need to calculate to find a block with difficulty D is therefore&lt;br /&gt;
 D * 2**256 / (0xffff * 2**208)&lt;br /&gt;
or just&lt;br /&gt;
 D * 2**48 / 0xffff&lt;br /&gt;
&lt;br /&gt;
The difficulty is set such that the previous 2016 blocks would have been found at the rate of one every 10 minutes, so we were calculating (D * 2**48 / 0xffff) hashes in 600 seconds.  That means the hash rate of the network was&lt;br /&gt;
 D * 2**48 / 0xffff / 600&lt;br /&gt;
over the previous 2016 blocks.  This can be further simplified to&lt;br /&gt;
 D * 2**32 / 600&lt;br /&gt;
without much loss of accuracy.&lt;br /&gt;
&lt;br /&gt;
At difficulty 1, that is around 7 Mhashes per second.&lt;br /&gt;
&lt;br /&gt;
At the time of writing, the difficulty is 22012.4941572, which means that over the previous set of 2016 blocks found, the average network hash rate was&lt;br /&gt;
 22012.4941572 * 2**32 / 600 = around 157 Ghashes per second.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
&lt;br /&gt;
* See also: [[Target]]&lt;br /&gt;
&lt;br /&gt;
==Attribution==&lt;br /&gt;
This content is based on content sourced from https://en.bitcoin.it/wiki/Difficulty under [https://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0]. Although it may have been extensively revised and updated, we acknowledge the original authors.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Mining_candidate&amp;diff=3036</id>
		<title>Mining candidate</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Mining_candidate&amp;diff=3036"/>
		<updated>2022-04-26T00:41:47Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;The Mining Candidate is the specified values of the block header's data fields which a node relays to the hashing machines for them to increment the nonce against for the proo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Mining Candidate is the specified values of the block header's data fields which a node relays to the hashing machines for them to increment the nonce against for the proof-of-work process.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Getminingcandidate&amp;diff=3035</id>
		<title>Getminingcandidate</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Getminingcandidate&amp;diff=3035"/>
		<updated>2022-04-26T00:40:30Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''getminingcandidate'' or GMC is a Remote Procedure Call (RPC) available in the Bitcoin SV node software.&lt;br /&gt;
&lt;br /&gt;
Its purpose is to provide mining software/pools with a suitable block [[Mining candidate|candidate]] for hashing in order to mine a block. In addition it is greatly decoupled from block size unlike its predecessor [https://wiki.bitcoinsv.io/index.php/GetBlockTemplate_interface GetBlockTemplate], meaning it can scale and support very large block sizes.&lt;br /&gt;
&lt;br /&gt;
The way it supports blocks of very large sizes is by only providing a minimal set of data required for mining hardware to hash and generate a possible block solution. If a blocksolution is found it can be returned to the node software via the sibling RPC call ''submitminingsolution''.&lt;br /&gt;
&lt;br /&gt;
GMCs predecessor ''getblocktemplate'' gave the call mining software more control, but in order to do this, it had to provide a full and complete dataset of the current block and pending transactions in the mempool. A Miner trying to mine large blocks must put a lot more strain on both the node software and RPC interface to transmit a record of every transaction that is in the mempool, often resulting in lack of memory and/or performance issues.&lt;br /&gt;
&lt;br /&gt;
GMC removes this issue by only providing the mining software with a merkle proof of included transactions, rather than a complete listing, this lowers the amount of data to be produced and transmitted to log2(blocksize).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the node software receives a GMC request it will respond with a [https://www.json.org/json-en.html JSON] representation of the current block candidate. A description of this response body is shown below.&lt;br /&gt;
&lt;br /&gt;
===Response body of getminingcandidate===&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=&amp;quot;center&amp;quot;&amp;gt;Variable&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th align=&amp;quot;center&amp;quot;&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[uuid] id&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;The assigned id from Bitcoind. This must be provided with submitting a potential solution&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[hex string] prevHash&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Big Endian hash of the previous block&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[hex string] Coinbase (optional)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Suggested coinbase transaction is provided. Miner is free to supply their own or alter the supplied one. Altering will require parsing and splitting the coinbase in order to splice in/out data as required.  Requires Wallet to be enabled. Only returned when provide_coinbase_tx argument is set to true. Returns error if Wallet is not enabled&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[int32_t] version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;The block version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[int64_t] coinbaseValue&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Total funds available for the coinbase tx (in Satoshis)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[uint32_t] nBits&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Compressed hexadecimal difficulty&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[uint32_t] time&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Current block time&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[int] height&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;The candidate block height&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[array] merkleProof&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Merkle branch/path for the block, used to calculate the [[Merkle root]] of the block candidate. This is a list of Little-Endian hex strings ordered from top to bottom&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a more technical breakdown of ''GetMiningCandidate'' and its implementation, see the protocol spec [https://github.com/bitcoin-sv-specs/protocol/blob/master/rpc/GetMiningCandidate.md here]&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Minimum_fee_policy&amp;diff=3034</id>
		<title>Minimum fee policy</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Minimum_fee_policy&amp;diff=3034"/>
		<updated>2022-04-26T00:37:42Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;The Minimum Fee Policy specifies a minimum fee for which a node will accept and or relay unconfirmed transactions.   This rule is set differently by each node.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Minimum Fee Policy specifies a minimum fee for which a node will accept and or relay unconfirmed transactions. &lt;br /&gt;
&lt;br /&gt;
This rule is set differently by each node.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Micropayment&amp;diff=3033</id>
		<title>Micropayment</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Micropayment&amp;diff=3033"/>
		<updated>2022-04-26T00:34:49Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;Micropayments are small transactions of a value less than a dollar but that may even be fractions of a cent. Fraction of a cent payments are sometimes referred to as nanopay...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Micropayments are small transactions of a value less than a dollar but that may even be fractions of a cent. Fraction of a cent payments are sometimes referred to as [[nanopayments]].&lt;br /&gt;
&lt;br /&gt;
Until Bitcoin, these transactions were typically too low to be offered by traditional payment processors.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Main_Page&amp;diff=3032</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Main_Page&amp;diff=3032"/>
		<updated>2022-04-26T00:33:21Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here we aim to provide a correct and up-to date set of information on the Bitcoin network and its features and functionality.&lt;br /&gt;
&lt;br /&gt;
===Bitcoin===&lt;br /&gt;
&lt;br /&gt;
'''Bitcoin''' is a peer to peer electronic cash system created by [https://craigwright.net/ Dr. Craig Wright] under the pseudonym [[Satoshi Nakamoto]].  It was first detailed in the [https://bitcoinsv.io/bitcoin.pdf Bitcoin Whitepaper] in October 2008, and the source code was [https://www.mail-archive.com/cryptography@metzdowd.com/msg10142.html released] in January 2009. The Bitcoin ledger and [[Blockchain]] were established with the generation of the [[Genesis block]] on the 3rd of January 2009 and the mining of Block 1 six days later on the 9th of January 2009.&lt;br /&gt;
&lt;br /&gt;
Bitcoin allows electronic payments to be sent directly from one party to another, without requiring a central institution or server to process transactions and/or store funds. &lt;br /&gt;
 &lt;br /&gt;
The leaderless structure of the network is viewed as a resolution to [[The Byzantine Generals Problem]] allowing disconnected entities to follow a common direction without centralised instruction. This solves several issues previously seen as unsolvable in distributed networks, including the problem of preventing [[Double-spending]] of coins.&lt;br /&gt;
&lt;br /&gt;
===Applications===&lt;br /&gt;
Bitcoin is primarily a [[Payments in Bitcoin|payment system]] which supports peer to peer connection and [[Instant Transactions]]. Early in the [[History of Bitcoin]] payments required users to understand complicated technical details of Bitcoin's technological underpinnings to make transactions. But developments such as [[Paymail]] and [[Simplified Payment Verification]] are changing the landscape and making it much easier for users to connect and leverage the blockchain for the [[back-end]] of their applications.&lt;br /&gt;
&lt;br /&gt;
Bitcoin also supports the development of [[Application layer protocol|application layer protocols]] which make use of [[Bitcoin Transactions]] as a transport layer for information exchange. Several Application layer protocols already exist for BitcoinSV - for more detail see [[Building on Bitcoin]]. [[The Metanet]] fuses Bitcoin's highly secure and instant [[Transaction fees|sub-cent transactions]] with onchain data storage and transferability enabling efficient and secure web usage. This will bring forth an Internet of Value where [[Micropayment]]s become a means to both access and monetize data.&lt;br /&gt;
&lt;br /&gt;
Applications which make use of the immutable nature of the [[Blockchain|Bitcoin Ledger]] to store and retrieve data are emerging at an increasing rate. [[False Return]] scripts and other scripts that use [[Pushdata Opcodes]] to push data into Bitcoin transactions are creating new ways of recording data for public consumption. Bitcoin acts as a [[Timechain|timestamp server]] allowing data to be validated and referenced using transactions.&lt;br /&gt;
&lt;br /&gt;
===Network===&lt;br /&gt;
[[The Bitcoin Network]] is the network that all peers use to access the ledger. The network forms spontaneously over time as more peers access and use the system. There is no central governance that determines how peers on the network must connect, but the incentive structure that Bitcoin employs to bring enterprise miners into the system results in the formation of a small world network which is simple and resilient. &lt;br /&gt;
&lt;br /&gt;
Once the final restrictions on the [[protocol]] are removed in the [[Chronicle Update]] (expected early-mid 2021) network users will be able to create partitioned zones which employ specific rulesets particular to their requirements. This will be enabled by creating transactions that use [[OP_VER]] to give particular subsets of nodes specialised instructions, and will create the effect of layered network partitions over the core system which are referred to as [[Bitcoin Layered Networks]].&lt;br /&gt;
&lt;br /&gt;
===The Ledger===&lt;br /&gt;
The Bitcoin ledger is a record of all valid transactions that have ever been transmitted to the network. The ledger is formed as a [[wikipedia:Directed Acyclic Graph|Directed Acyclic Graph]] (DAG) where each transaction is a node. The graph starts at the [[Coinbase]] transaction of the [[Genesis block|first block ever found]] and via chains of [[Digital Signatures in Bitcoin|digital signatures]] maps out the entire history of valid exchange actions, allowing the tracing of all bitcoins back to their creation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-responsive&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Chain_of_Signatures.png|centre|alt=Electronic coins are defined as a chain of digital signatures]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valid transactions that are broadcast on [[The Bitcoin Network]] are committed to the ledger by miners in [[Block|Blocks]]. A block consists of a [[Block hashing algorithm#Block_Header|header]] which contains a timestamp, a reference to the block it builds on, a valid [[Proof of Work]] and the double [[SHA-256]] hash of the root of a [[wikipedia:Merkle Tree|Merkle tree]] generated with a list of transactions, and the list of transactions. Most nodes use compact block propagation techniques which [[compress]] the list of transactions to a much smaller size rather than broadcasting the full block. Receiving Nodes must decompress the block using a list of validated transactions that they have also compacted.&lt;br /&gt;
&lt;br /&gt;
Blocks form a second layer DAG called the [[Blockchain]] which is built by [[Mining|network miners]] in a competitive process. Each block forms a node in the graph with a single incoming edge from the block it is built upon. A block may have more than one outgoing edge in a case where multiple blocks were built upon it, but only one of those edges can become part of the longest chain of proof of work. A block without an edge to the longest chain of proof of work is called an [[Orphan Block]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-responsive&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Block_Chain.png|centre|alt=A chain of blocks]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The structure of the block chain DAG means that there is a clearly traceable path back to the [[Genesis block|first block mined]]. Blocks are discovered just under every 10 minutes on average, with miners using a predefined mathematical algorithm to control the [[difficulty]] of the proof of work process to maintain that time frame.&lt;br /&gt;
&lt;br /&gt;
Transactions can be exchanged peer to peer using [[Simplified Payment Verification]] (SPV) to manage trust. SPV involves sending accompanying information with a transaction input that proves it is from a transaction that has been timestamped on the ledger.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-responsive&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Simplified_Payment_Verification.png|centre|alt=Simplified payment verification]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Users can exchange unfinalised transactions without sending them to the network to be mined creating what are called [[Payment Channels]].&lt;br /&gt;
Payment channels allow users to conduct information exchange within valid Bitcoin transactions, only broadcasting a finalised transaction including the full value exchange to the mining network once the information transfer is complete.&lt;br /&gt;
&lt;br /&gt;
Once a transactions is sent to the network, global consensus can be reached on the validity in less than 2 seconds. If a transaction is not accepted by any miners and added to a block template, it is considered invalid. Transactions can be invalid for a variety of reasons such as being submitted with an invalid scriptSig, not adhering to [[Protocol|network or miner rules]], or not paying an adequate fee.&lt;br /&gt;
&lt;br /&gt;
===Transactions===&lt;br /&gt;
All [[Bitcoin Transactions]] are [[Payments in Bitcoin|payments]] of some kind. Transactions are written in a flexible [[Advanced_Bitcoin_Scripting|scripting language]] that is used to assign custodial control to each transaction [[VOUT|output]] via the creation of arbitrary spending conditions defined by scripts.&lt;br /&gt;
&lt;br /&gt;
Each transaction uses bitcoins stored in '[[UTXO|unspent transaction outputs]]' as the transaction inputs. The transaction process aggregates the [[satoshis]] held in each input and spends them into a new set of unspent transaction outputs. When UTXOs are spent in a transaction they are consumed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-responsive&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Transaction.png|centre|alt=Transaction inputs and outputs]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Bitcoin scripting language is [[wikipedia:Turing_completeness|Turing complete]], and can be used to create [[wikipedia:Turing_machine|Turing machines]] that use the Bitcoin ledger as a tape, writing to and reading from the transaction graph as needed.&lt;br /&gt;
&lt;br /&gt;
The scripting language also includes opcodes that allow users to embed arbitrary data in transactions, providing for the creation of [[Application layer protocol|application layer protocols]] that use Bitcoin transactions as a [[wikipedia:Transport layer|transport layer]].&lt;br /&gt;
&lt;br /&gt;
Rewards paid to miners for the creation of a block are inscribed in what is called a [[Coinbase]] transaction. This transaction has a specific format and is always the first transaction in the block's [[wikipedia:Merkle tree|Merkle tree]].&lt;br /&gt;
&lt;br /&gt;
===Nodes and Mining===&lt;br /&gt;
The ledger is held on a [https://en.wikipedia.org/wiki/Distributed_networking distributed network] of nodes who use hash based [[Proof of Work]] to compete for the right to extend it and as a means to enforce network rules. The proof of work of each block in the longest chain of work is incorporated into its subsequent block to form the chain structure.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;img-responsive&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Proof_of_Work.png|centre|alt=A chain of hash based proof of work]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During the [[mining]] process, a node gathers transactions from the network on a [[First seen rule|first seen]] basis and evaluates whether they are profitable to mine before putting them into a block template. Block templates are created by calculating the root of a [https://en.wikipedia.org/wiki/Merkle_tree Merkle tree] containing all of the transactions being mined. The order of transactions in the Merkle tree is not related to their position in the transaction DAG. As new transactions arrive, they are added to the tree, creating a new, updated template. Hash operators continuously request new block templates through the [[Getminingcandidate]] interface to ensure they are getting up-to-date block data to hash against. A block is found when a miner successfully discovers a value that generates a hash less than the [[difficulty]] [[target]]. The miner must then propagate the new block to the rest of the network who must then build an additional 100 blocks on top of it before the winner can claim the block reward.&lt;br /&gt;
&lt;br /&gt;
[[File:Merkle tree.png|centre|alt=The structure of a Merkle Tree]]&lt;br /&gt;
&lt;br /&gt;
Nodes are operated by the [[Mining|Bitcoin mining enterprises]] who build the network. Bitcoin's economic incentives are structured such that for the nodes to be most profitable at building the ledger they must be as closely connected to other well performing nodes as possible. This leads to miners forming a [[Small World Network]] which trends towards a [[Nearly Complete Graph]] where each miner is connected to most of the other miners. Miners gather transactions from users who connect in a layered network over the nodes at the core forming something that closely resembles a [[Mandala Network]]. Peers operating in these shell-like layers use [[Simplified Payment Verification]] to form a much less densely packed structure where information is exchanged in [[Payment Channels]].&lt;br /&gt;
&lt;br /&gt;
As Bitcoin scales, the nodes who comprise the network will be variously compartmentalised into specialised hardware. These clustered systems will be distributed globally, each being placed in a location optimised for its task.&lt;br /&gt;
&lt;br /&gt;
As enterprise organisations, Bitcoin miners must operate as legal entities within a given jurisdiction and as such are bound to the laws and legal processes that exist in that jurisdiction. Through this, miners can be compelled to enact certain rules or perform certain actions in order to comply with the law.&lt;br /&gt;
&lt;br /&gt;
===Unit of account===&lt;br /&gt;
[[Satoshis]] are the ledger's native unit of account and 100,000,000 satoshis is abstracted to one bitcoin. Satoshis are held in script puzzles called [[UTXO|Unspent Transaction Outputs or UTXOs]]. These are [[VOUT|transaction outputs]] which are held by miners in a quick access database called the UTXO set. During the spending process, UTXOs being used in a transaction are consumed and the solution to their puzzle script is recorded in the transaction.&lt;br /&gt;
&lt;br /&gt;
Satoshis are distributed by miners to themselves as a [[Block subsidy|subsidy payment]] during the network establishment phase. As the network matures, the subsidy dissipates forcing the miners to find alternate revenue streams. The payment allows miners to finance their operations through the payment of goods and services in bitcoin, spreading it through the economy.&lt;br /&gt;
&lt;br /&gt;
===Network rules===&lt;br /&gt;
Bitcoin operates on a fixed ruleset. So-called consensus rules include things such as the operation of the [[Opcodes used in Bitcoin Script|opcodes]] in Bitcoin Script, the rate at which new bitcoins are issued, the mathematical function used to calculate the [[target]] for the [[Difficulty]] algorithm and more. The protocol is agreed upon by the miners who control network operation.&lt;br /&gt;
&lt;br /&gt;
There are no limits in the [[Protocol|Bitcoin protocol]]. Any limits imposed are put in place by miners who are incentivised to catch the largest profitable pools of transactions they can. Miners compete to offer better service to fee paying users by scaling their own capabilities.&lt;br /&gt;
&lt;br /&gt;
===History===&lt;br /&gt;
[[Bitcoin until today|Bitcoin has a rich history]].&lt;br /&gt;
&lt;br /&gt;
===Tools and Building on Bitcoin===&lt;br /&gt;
Bitcoin has a rich and diverse [[Building on Bitcoin|set of tools]] which are being added to all the time.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=The_Metanet&amp;diff=3031</id>
		<title>The Metanet</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=The_Metanet&amp;diff=3031"/>
		<updated>2022-04-26T00:32:55Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:post.png|thumb|The Metanet Ecosystem]]&lt;br /&gt;
'''The Metanet''' is the term given to a value-based internet built on the Bitcoin SV ledger. The Metanet can be used to refer to either of:&lt;br /&gt;
&lt;br /&gt;
* The concept of value-based internet built on [[Main_Page|Bitcoin SV]].&lt;br /&gt;
* The [[Metanet_Protocol|Metanet Protocol]].&lt;br /&gt;
&lt;br /&gt;
The Metanet was first [https://www.youtube.com/watch?v=MXpHHZqe6vI announced] as a concept by Dr. Craig Wright at the CoinGeek Week conference in London, on November 30th 2018. &lt;br /&gt;
&lt;br /&gt;
The motivation for the Metanet, is the creation of a public ledger based internet that functions as an efficient value network, which has improved properties and [[The_Metanet#Capabilities|capabilities]] compared to the existing infrastructure of the Internet. The Metanet as a concept has since been widely adopted by the Bitcoin SV ecosystem and many protocols and applications have been built to implement the vision of a highly-connected internet for peer-to-peer content creation and monetisation.&lt;br /&gt;
&lt;br /&gt;
==Core Principles==&lt;br /&gt;
&lt;br /&gt;
The motivations for the Metanet are linked to well-known problems with the existing Internet and e-commerce, which include the following:&lt;br /&gt;
&lt;br /&gt;
* Reliance on intermediaries for payments.&lt;br /&gt;
* Lack of a granular [[micropayment]] layer.&lt;br /&gt;
* Walled-garden applications and data silos.&lt;br /&gt;
* Concerns over data privacy and ownership for users.&lt;br /&gt;
* Prevalence of spam, trolling and bots in online social platforms.&lt;br /&gt;
&lt;br /&gt;
The first two issues, relating to payment intermediaries and lack of micropayments, are addressed by the use of the Bitcoin SV network for simple payments. The Metanet aims to solve the remaining issues by combining online payments with [[immutable]] data stored on the Bitcoin SV public ledger. &lt;br /&gt;
&lt;br /&gt;
The combination of payments and data both using the Bitcoin SV ledger as a universal source of truth, theoretically allow for a more equitable internet ecosystem in which:&lt;br /&gt;
&lt;br /&gt;
* Information is attributed value.&lt;br /&gt;
* Quality is incentivised over quantity.&lt;br /&gt;
* The cost of dishonest behaviour (e.g. trolling) is increased.&lt;br /&gt;
* Users own their data.&lt;br /&gt;
&lt;br /&gt;
==The Metanet Protocol==&lt;br /&gt;
[[File:Metanet_DAG.png|thumb|The Metanet Protocol]]&lt;br /&gt;
&lt;br /&gt;
The [[Metanet_Protocol|Metanet protocol]] is a protocol for structuring data within the on-chain internet architecture of the Metanet. The Metanet protocol uses a graph data model to create on-chain data structures for Metanet applications, websites and use cases. The protocol allows users to store, distribute and monetise their data using its native permissions framework.&lt;br /&gt;
&lt;br /&gt;
The Metanet protocol is a graph-based data structure protocol. The protocol uses the native directed acyclic graph (DAG) data model of the underlying Bitcoin SV ledger to create overlay DAG structures that exist natively within the ledger's own structure. The nature of digital signatures and transactions ensures there is a directionality to the edges between vertices in contrast to an [[acyclic graph]].&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Metadata&amp;diff=3030</id>
		<title>Metadata</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Metadata&amp;diff=3030"/>
		<updated>2022-04-25T05:50:58Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;Metadata is &amp;quot;data that provides information about other data&amp;quot;, but not the content of the data, such as the text of a message or the image itself.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Metadata is &amp;quot;data that provides information about other data&amp;quot;, but not the content of the data, such as the text of a message or the image itself.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=MinerID&amp;diff=3029</id>
		<title>MinerID</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=MinerID&amp;diff=3029"/>
		<updated>2022-04-25T05:50:05Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MinerId is a protocol that allows a Miner to embed information inside the [[Coinbase|coinbase transaction]] of each block won by a particular node, to allow all blocks it wins to be associated with a pseudonymous identity which the Miner can optionally associate with a real world identity.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
Currently, Bitcoin Miners can embed identity data on the Bitcoin ledger by using space in the malleable input fields of the [[Coinbase|coinbase]] transaction in blocks that they mine. However, this data is not always accurate and can be trivially forged/spoofed.&lt;br /&gt;
&lt;br /&gt;
The MinerId protocol provides a way of ''cryptographically'' associating a block to a specific Miner's pseudo identity. A minerId is simply a public key from an ECDSA keypair. These keys are used to sign minerID [[metadata]] contained in a [[False Return]] output of the coinbase transaction in a block.&lt;br /&gt;
&lt;br /&gt;
Use of ECDSA cryptography to sign minerId metadata (as opposed to generating unsigned arbitrary data) provides data non-repudiation, linking Miner identity to mined blocks in a reliable way. &lt;br /&gt;
&lt;br /&gt;
Whilst the minerId protocol is a useful infrastructure tool for the Bitcoin SV network, '''it is not mandatory'''. It is a voluntary protocol providing a public key infrastructure for Bitcoin SV that Miners can use to secure additional services around the ledger.&lt;br /&gt;
&lt;br /&gt;
===Definitions===&lt;br /&gt;
&lt;br /&gt;
*  '''MinerId''' - An ECDSA public key (based on [[secp256k1]] parameters) used by the Miner to identify themselves.&lt;br /&gt;
*  '''VcTx''' - (Validity check transaction) A transaction that determines the validity of the minerId based on whether it is unspent (valid) or spent (invalid/revoked). The VcTx is a feature that allows a Miner to instantly revoke their minerId (if the private key is compromised for example). Naively, the Miner could add a field in the coinbase document specifying if the minerId is still valid or not. However, by doing that, the Miner would have to wait until they mine a block to revoke their minerId key. Using the VcTx, the Miner can at any time revoke the validity of their minerId key without needing to generate [[Proof of Work|proof of work]].&lt;br /&gt;
*  '''Coinbase document''' - A formatted data packet in the OP_RETURN (provably unspendable) output in the Miner’s [[Coinbase| coinbase transaction]]. All Miner identity information is stored in this document.&lt;br /&gt;
&lt;br /&gt;
===Security===&lt;br /&gt;
&lt;br /&gt;
Ideally, the minerId (by extension of the coinbase transaction) should be specific to the block it is in. However, if this were enforced, it would create a causality dilemma (chicken/egg scenario) since the header cannot be finalised and signed by the minerId key without the hash of the coinbase transaction, which in turn, cannot be created until the minerId key is finalised.&lt;br /&gt;
&lt;br /&gt;
By making the minerId specific to the block it’s mined in, we effectively bind the signature to the block it’s contained in. Without this binding, a malicious Miner could take the entire coinbase document and replay it in another block, potentially in a block that damages reputation e.g. an empty block that reduces network throughput. Because the block height is included in the coinbase document, the cost of replaying coinbase document data becomes as difficult as successfully forking the network (see [[Re-org]]), which is very expensive. This cost should be enough to drastically reduce the likelihood of this attack.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
The minerId protocol has been supported by TAAL mining ltd. since 20th December 2019.  &lt;br /&gt;
&lt;br /&gt;
* https://whatsonchain.com/tx/17a8b9994f1e89855b34660ea1d17061ae65833f1ded395c4c6a72d2d98832a6&lt;br /&gt;
&lt;br /&gt;
* https://whatsonchain.com/tx/d898e7f3c198cefccf99e6ec982786f25af62aa86d6bc56c66a611660bf04942&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
* Medium.com blog post - https://medium.com/@jadwahab/6578046ac88?&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Block_Explorer&amp;diff=3028</id>
		<title>Block Explorer</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Block_Explorer&amp;diff=3028"/>
		<updated>2022-04-25T05:49:50Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Block Explorer is an application that allows users to view and query data stored on the BitcoinSV ledger and network. Typically accessed through a web browser, Block Explorers allow users to view details of Bitcoin [[Block|blocks]], [[transactions]] and [[Address|addresses]]. Their primary function is to allow users to track network activity in real-time.&lt;br /&gt;
&lt;br /&gt;
==Structure==&lt;br /&gt;
The structure of a typical Block Explorer is to have a mining client with a front end that pulls data from its own copy of the [[blockchain]] and presents it to users through a web interface.&lt;br /&gt;
&lt;br /&gt;
In future it is expected that Block Explorers will develop their own tooling and client that can detect additional information that is not typically monitored by a mining client such as the emergence of a block race, transactions which the node is not set up to validate and more.&lt;br /&gt;
&lt;br /&gt;
Real time information on both blocks and transactions is typically provided in addition to other information such as the history of a given Bitcoin address or a list of transactions containing particular [[metadata]].&lt;br /&gt;
&lt;br /&gt;
===Block information=== &lt;br /&gt;
The explorer provides data on all blocks that have been added to the ledger, and are usually updated within seconds of a valid block being discovered. This data shows:&lt;br /&gt;
*'''Block height:''' Number of blocks since the Bitcoin [[Genesis block]] was mined&lt;br /&gt;
*'''Age:''' Elapsed time between now and the timestamp that indicates when the block was discovered&lt;br /&gt;
*'''Transaction Count:''' number of transactions included in the block&lt;br /&gt;
*'''Fees:''' Aggregate value of all [[Transaction fees]] paid to the Miner by users&lt;br /&gt;
*'''Reward:''' Total Miner reward including transaction fees and [[block subsidy]]&lt;br /&gt;
*'''Mined by:''' Identity of the Miner or mining pool whose node mined this block&lt;br /&gt;
*'''Size:''' Size of the block as obtained by adding the sizes of each transactions included in the block&lt;br /&gt;
&lt;br /&gt;
===Real time Transaction information=== &lt;br /&gt;
In addition, the Block Explorer provides a full set of information regarding transactions that have either been mined into a block, or accepted into the Block Explorer's node client's mempool.&lt;br /&gt;
&lt;br /&gt;
*'''[[Block]]:''' The hash of the block in which the transaction was mined (if the transaction has not yet been mined, the confirmation field is typically not shown)&lt;br /&gt;
*'''Status:''' If a transaction isn't mined, this field may show the transaction as '''Unconfirmed'''&lt;br /&gt;
*'''[[Block timestamp|Timestamp]]:''' The timestamp in the block header in which this transaction was mined (if the transaction has not yet been mined, the timestamp field is typically not shown)&lt;br /&gt;
*'''Version:''' The version of the protocol against which this transaction is to be validated&lt;br /&gt;
*'''Size:''' The size of the serialised transaction in bytes&lt;br /&gt;
*'''[[Confirmation|Confirmations]]:''' The number of blocks mined on top of the block containing the transaction (if the transaction has not yet been mined, the confirmation field is typically not shown)&lt;br /&gt;
*'''[[Transaction fees|Fee Paid]]:''' The total transaction fee paid by the spending party&lt;br /&gt;
*'''Fee Rate:''' The transaction fees paid by the spending party as a ratio of Satoshis/Byte which is the total fee paid divided by the size of the transaction&lt;br /&gt;
*'''[[Coinbase|Coinbase data]]:''' If the transaction is the coinbase transaction of a block, the explorer will typically show the coinbase text that the Miner has embedded in the transaction&lt;br /&gt;
&lt;br /&gt;
In addition to these fields, the explorer will usually include other information about the transaction including the number of inputs and outputs, the values of those inputs and outputs, the scripts used to spend the inputs, and the new scripts created in the outputs. Most explorers will also offer the user different ways to view this information such as raw hex, interpreted Bitcoin script or in [[wikipedia:JSON|JSON]] format.&lt;br /&gt;
&lt;br /&gt;
==Searchable Information==&lt;br /&gt;
&lt;br /&gt;
The main function of Block Explorers is to allow users to search for data in the Bitcoin ledger and [[blockchain]]. This is typically performed using a search tool.&lt;br /&gt;
&lt;br /&gt;
Typical search functions include:&lt;br /&gt;
* Transaction hash or [[TXID]]&lt;br /&gt;
* Block height&lt;br /&gt;
* Block hash&lt;br /&gt;
* [[Bitcoin address]]&lt;br /&gt;
* Transaction metadata&lt;br /&gt;
&lt;br /&gt;
Typically, the explorer responds to a search with a page containing all the details about the subject of a search request.&lt;br /&gt;
&lt;br /&gt;
==List of BitcoinSV explorers==&lt;br /&gt;
* https://whatsonchain.com&lt;br /&gt;
* https://bitcoinblocks.live&lt;br /&gt;
* https://blockchair.com&lt;br /&gt;
* https://coin.dance&lt;br /&gt;
&lt;br /&gt;
==Attribution==&lt;br /&gt;
This content is based on content sourced from https://en.bitcoin.it/wiki/Block_chain_browser under [https://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0]. Although it may have been extensively revised and updated, we acknowledge the original authors.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3027</id>
		<title>Merkle proof</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3027"/>
		<updated>2022-04-25T05:48:45Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Merkle proof is the act of verifying an element exists within a set summarised by the [[Merkle root]]. &lt;br /&gt;
&lt;br /&gt;
The data element is hashed to create its [[leaf (node)|leaf node]] value, and then hashed with a provided set of the adjunct node values along the [[Merkle path]] back to the root. &lt;br /&gt;
&lt;br /&gt;
If the same Merkle root is created as has been published previous, then it stands that the data element is be guaranteed to come from the same [[index]] in the same data set as in the earlier published instance.&lt;br /&gt;
&lt;br /&gt;
For more information on the Standardised format for a Merkle proof see the published standard by the Technical Standards Committee here: https://tsc.bitcoinassociation.net/standards/merkle-proof-standardised-format/&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3026</id>
		<title>Merkle proof</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3026"/>
		<updated>2022-04-25T05:48:11Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Merkle proof is the act of verifying an element exists within a set summarised by the [[Merkle root]]. &lt;br /&gt;
&lt;br /&gt;
The data element is hashed to create its [[leaf (node)|leaf node]] value, and then hashed with a provided set of the adjunct node values along the [[Merkle path]] back to the root. &lt;br /&gt;
&lt;br /&gt;
If the same Merkle root is created as has been published previous, then it stands that the data element is be guaranteed to come from the same [[index]] in the same data set as in the earlier published instance.&lt;br /&gt;
&lt;br /&gt;
For information on the Standardised format for a Merkle proof see the Technical Standards Committee here: https://tsc.bitcoinassociation.net/standards/merkle-proof-standardised-format/&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3025</id>
		<title>Merkle proof</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3025"/>
		<updated>2022-04-25T05:47:50Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Merkle proof is the act of verifying an element exists within a set summarised by the [[Merkle root]]. &lt;br /&gt;
&lt;br /&gt;
The data element is hashed to create its [[leaf (node)|leaf node]] value, and then hashed with a provided set of the adjunct node values along the [[Merkle path]] back to the root. &lt;br /&gt;
&lt;br /&gt;
If the same Merkle root is created as has been published previous, then it stands that the data element is be guaranteed to come from the same [[index]] in the same data set as in the earlier published instance.&lt;br /&gt;
&lt;br /&gt;
For information on the Standardised format for a Merkle proof see the TSC here. https://tsc.bitcoinassociation.net/standards/merkle-proof-standardised-format/&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3024</id>
		<title>Merkle proof</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3024"/>
		<updated>2022-04-25T05:46:47Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Merkle proof is the act of verifying an element exists within a set summarised by the [[Merkle root]]. &lt;br /&gt;
&lt;br /&gt;
The data element is hashed to create its [[leaf (node)|leaf node]] value, and then hashed with a provided set of the adjunct node values along the [[Merkle path]] back to the root. &lt;br /&gt;
&lt;br /&gt;
If the same Merkle root is created as has been published previous, then it stands that the data element is be guaranteed to come from the same index in the same data set as in the earlier published instance.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3023</id>
		<title>Merkle proof</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3023"/>
		<updated>2022-04-25T05:45:34Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Merkle proof is the act of verifying an element exists within a set summarised by the [[Merkle root]]. &lt;br /&gt;
&lt;br /&gt;
The data element is hashed to create its [[leaf (node)|leaf node]] value, and then hashed with a provided set of the adjunct node values along the [[Merkle path]] back to the root. &lt;br /&gt;
&lt;br /&gt;
If the same Merkle root is created as has been published previous. it stands that the data element is be guaranteed to come from the data set and at the same [[index]] as it was in the earlier published instance.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3022</id>
		<title>Merkle proof</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3022"/>
		<updated>2022-04-25T05:45:13Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Merkle proof is the act of verifying an element exists within a set summarised by the [[Merkle root]]. &lt;br /&gt;
&lt;br /&gt;
The data element is hashed to create its [[leaf (node)|leaf node value]], and then hashed with a provided set of the adjunct node values along the [[Merkle path]] back to the root. &lt;br /&gt;
&lt;br /&gt;
If the same Merkle root is created as has been published previous. it stands that the data element is be guaranteed to come from the data set and at the same [[index]] as it was in the earlier published instance.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3021</id>
		<title>Merkle proof</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_proof&amp;diff=3021"/>
		<updated>2022-04-25T05:44:49Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;A Merkle proof is the act of verifying an element exists within a set summarised by the Merkle root.   The data element is hashed to create its leaf(node)|leaf node valu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A Merkle proof is the act of verifying an element exists within a set summarised by the [[Merkle root]]. &lt;br /&gt;
&lt;br /&gt;
The data element is hashed to create its [[leaf(node)|leaf node value]], and then hashed with a provided set of the adjunct node values along the [[Merkle path]] back to the root. &lt;br /&gt;
&lt;br /&gt;
If the same Merkle root is created as has been published previous. it stands that the data element is be guaranteed to come from the data set and at the same [[index]] as it was in the earlier published instance.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Coinbase&amp;diff=3020</id>
		<title>Coinbase</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Coinbase&amp;diff=3020"/>
		<updated>2022-04-25T04:26:38Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Coinbase''' is the special name given to the first transaction in every block. These can also be called 'Generation Transactions'. &lt;br /&gt;
&lt;br /&gt;
The winning Miner creates this special transaction as part of the block templating process. &lt;br /&gt;
&lt;br /&gt;
A coinbase transaction follows the same format as a normal transaction, except:&lt;br /&gt;
* It has exactly one txin.&lt;br /&gt;
* This txin's prevout hash is 0000...0000.&lt;br /&gt;
* This txin's prevout [[index]] is 0xFFFFFFFF.&lt;br /&gt;
* The txin's prevout script is an arbitrary byte array which has historically been used by Miners to signal identity and pass messages from block winning nodes to the rest of the network.&lt;br /&gt;
* The sum of the values of all txout's cannot exceed the total of the [[Miner subsidy]] and the mining fees paid by all other transactions included in the block.&lt;br /&gt;
&lt;br /&gt;
A part of the coinbase can also used as an 'extra nonce' during the block discovery process due to a single ASIC Miner being able to test more combinations than allowed for, in the 2^32 possible combinations that changing the nonce in the block header can create. The extra nonce field is incremented in the Coinbase transaction, which requires that a small number of hashes in the merkle tree are updated, changing the [[Merkle root]] in the [[block header]] allowing for a further 2^32 possible block hashes to be attempted.&lt;br /&gt;
&lt;br /&gt;
A Coinbase transaction can have as many outputs attached as are needed by the miner. These can be used for second layer functions including:&lt;br /&gt;
*[[Merchant API]], otherwise known as [[MAPI]], which allows the winning Miner to provide a dynamically accessible transaction pricing service enabling users to request pricing and transaction broadcast services from miners on the network.&lt;br /&gt;
*[[MinerID]] also uses the Coinbase transaction to present information to the network such as node identity, MAPI access points and more. This data will use standard formats such that user wallets shall be able to read and parse the information, giving them up-to-date knowledge of which nodes are competing on the network and more.&lt;br /&gt;
&lt;br /&gt;
Due to some early problems with blocks containing only a coinbase transaction with an identical coinbase text and outputs generating coinbase transactions with identical [[TXID|TXIDs]], miners agreed through consensus to begin enforcing [https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki BIP 0034] as a [[Protocol|protocol rule]]. This change mandated that the block height value be specified in the first item of the coinbase transaction. Prior to this, the coinbase script size was between 2 and 100 bytes. Currently the minimum length is 4 bytes which is needed to hold the blockheight in a [[VarInt]]. The maximum value storable in 3 bytes is 16,777,215 so with the generating blocks at a rate of approximately 59,000 per year so if this level of network activity is sustained then from approximately the year 2,300 the minimum length of a coinbase script size will need to increase to 5 bytes.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Mining&amp;diff=3019</id>
		<title>Mining</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Mining&amp;diff=3019"/>
		<updated>2022-04-25T04:26:10Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
'''Mining''' is the process where nodes in the Bitcoin [[Network]] assemble newly broadcast [[Bitcoin Transactions]] into a data structure called a [[block]]. Nodes then compete to append their block to the public [[Blockchain]] by repeatedly mutating the block's header data structure, usually by incrementing the nonce field, then hashing it in an attempt to find a value that satisfies a difficult [[Proof of Work|proof-of-work]]. &lt;br /&gt;
&lt;br /&gt;
When a node finds a valid proof-of-work hash for a block, it broadcasts the block to all nodes. Other nodes accept this block only if all the transactions in it are valid and have not yet been included in a block. Other nodes in the network then express their acceptance of the block by building upon it to create the next block in the chain.&lt;br /&gt;
&lt;br /&gt;
Every block is [[Block timestamp|timestamped]] and references the hash of the block preceding it. Blocks form a backward reinforcing, timestamped chain – a [[Timechain]], the precursor to the term ‘Blockchain’.&lt;br /&gt;
&lt;br /&gt;
The Blockchain structures itself in a manner that is computationally and economically impractical to modify by any one entity. Due to this, transactions included in the Blockchain are considered [[immutable]]. In addition to this quality, the Blockchain establishes an authoritative order of these transactions throughout the network by establishing which, out of any pair of conflicting transactions was seen first, thereby protecting users from [[Double-spending|attempts to re-spend coins]] that have already been spent elsewhere. This is the key innovation of mining and of Bitcoin.&lt;br /&gt;
&lt;br /&gt;
=== Nodes ===&lt;br /&gt;
Nodes are entities which run software that carries out the mining functions above. Nodes communicate using a [[P2P Network]] with its own protocol, and are the authors of the Bitcoin ledger and enforcers of the [[protocol]] rules.&lt;br /&gt;
&lt;br /&gt;
Interestingly, the Bitcoin whitepaper makes no reference to the term ‘Miner’ or the concept of ‘mining’. These terms cover the actions described in section 5 of the [http://bitcoinsv.io/bitcoin.pdf Bitcoin whitepaper] which describes the responsibilities of nodes on the network. &lt;br /&gt;
&lt;br /&gt;
It is possible to run the node client software without performing block assembly or proof-of-work. Such a setup can be used as an interface to the network for other systems such as block explorers, payment gateways and archives. Eventually it is expected that customised client software will be developed for each of these services so they will no longer be dependent on the node client to operate.&lt;br /&gt;
&lt;br /&gt;
Computers that run a node client which do not perform proof-of-work cannot append new blocks to the Blockchain. This means they can neither express acceptance of valid blocks by working on extending them, nor reject invalid blocks by refusing to work on them. These computers exist as passive entities that follow the gatekeepers of the network, the Miners.&lt;br /&gt;
&lt;br /&gt;
=== Mempool ===&lt;br /&gt;
Before a transaction can be timestamped in the Bitcoin [[Blockchain]] it needs to be received and validated by a Miner. If the Miner deems the transaction valid, they add the transaction to one of several [[Protocol#mempool|mempools]]. Mempools are temporary transaction stores and can be used to hold transactions grouped in different ways, such as transactions to be mined in the next block, transactions to watch, or transactions which cannot be mined due to an nLocktime/nSequence lock.&lt;br /&gt;
&lt;br /&gt;
It is important to note every Miner has their own mempools and that mempools vary across Miners. It is also important to note that an individual transaction can be included in different mempools at the same time. &lt;br /&gt;
&lt;br /&gt;
A Miner takes the transactions it intends to include in the next block and hashes them into a [[Protocol#Merkle_Trees|merkle tree]] structure, and includes the resulting [[merkle root]] within a candidate [[block header]]. The Miner then hashes this candidate block header, attempting to find a valid proof-of-work.&lt;br /&gt;
&lt;br /&gt;
=== Hashing ===&lt;br /&gt;
A hash is a function that converts a string of data into a fixed length value that represents the original string, called the hash value. Every hash value is unique. &lt;br /&gt;
&lt;br /&gt;
Hashing is a one-way function, meaning it is infeasible to determine what the input data is by looking at the hash produced from it. Conversely, it is trivial to run the same input data through the same hash function and reproduce the same hash. Because of this, a hash value of input data can be thought of as the digital fingerprint of that data. In Bitcoin mining, the input data is the 80-byte [[Block hashing algorithm|block header]].&lt;br /&gt;
&lt;br /&gt;
The hashing algorithm used in Bitcoin mining is [[SHA-256]]. SHA-256 stands for Secure Hash Algorithm – 256 bit. Passing the same block header data through this algorithm will always output the same 256-bit number. However, if the header data is modified even by a single bit, the result will be a completely different and unrelated 256-bit number. &lt;br /&gt;
&lt;br /&gt;
Bitcoin mining passes the block header data through the SHA-256 algorithm twice (SHA-256d).&lt;br /&gt;
&lt;br /&gt;
=== Proof-of-work ===&lt;br /&gt;
Bitcoin uses a [[Proof of Work]] function based on the earlier work of [[hashcash]].&lt;br /&gt;
&lt;br /&gt;
A Miner cannot create a new block without finding a valid proof-of-work hash, for the block header they are hashing. To be valid, the SHA-256d hash (which is just a number) of the block header must be less than another number, called the [[target]]. The target value is defined by the [[Block hashing algorithm|Bits]] field in the block header that is being hashed.&lt;br /&gt;
 &lt;br /&gt;
The target adjusts so that the average time it takes for the entire network to find a valid proof-of-work hash is ten minutes. &lt;br /&gt;
&lt;br /&gt;
Because of the extraordinarily large SHA-256 target space, it is extremely unlikely that any given hash will be below the target. As a result of this, hashing entities invest large amounts of capital into specialised hashing hardware, along with the associated electricity costs in order to produce as many of these hashes as possible in a given time period. Therefore, the only way a Miner can append a block to the Block chain is through a substantial commitment of operational expenditure – proof-of-work.&lt;br /&gt;
&lt;br /&gt;
=== Incentive ===&lt;br /&gt;
The first transaction in every block is called the [[Coinbase]] transaction. The Coinbase transaction is a special transaction which pays bitcoins to the Miner of the block. The Coinbase payment is made up of the [[Miner subsidy|subsidy]] amount and the sum of all [[transaction fees]] paid by transactions within the mined block.&lt;br /&gt;
&lt;br /&gt;
== Competition ==&lt;br /&gt;
&lt;br /&gt;
=== Propagation and validation ===&lt;br /&gt;
If a Miner finds a valid proof-of-work for the block header they are hashing, they immediately announce this by sending the entire block to other Miners. Meanwhile, they start working on finding the next block in the chain. &lt;br /&gt;
&lt;br /&gt;
Competing Miners receive this block and immediately check that all transactions within the block, as well as the proof-of-work are valid. If the block is valid, they discontinue mining on top of the previous block and start working on hashing a new block header, building on the block just found by their competitor.&lt;br /&gt;
&lt;br /&gt;
There are incentives at play here. First, winning 'Miner A' strives to get their winning block to all other Miners as quickly as possible. This reduces the possibility that competing 'Miner B' (who found a valid block at approximately the same time) propagates their block to some Miners before 'Miner A' could. This opens up the possibility that 'Miner A's' block, could later be [[Orphan Block|orphaned]] and the Coinbase reward rendered invalid and unusable by 'Miner A'. The degree of bandwidth and connectivity to other Miners can be seen as a competitive advantage and as such, the mining network tends toward a densely connected, small world structure with high bandwidth.&lt;br /&gt;
&lt;br /&gt;
There also exists a competitive advantage in validating transactions. When validating a block, each transaction's inputs must be looked up in the miner's [[VOUT|UTXO]] set to check they are unspent and the amount in satoshis is correct. Additionally, each inputs locking and unlocking scripts need to be run by the Miner to assess whether each transaction is valid.&lt;br /&gt;
&lt;br /&gt;
=== Rejected blocks ===&lt;br /&gt;
At any given point in time, two or more independent Miners may mine a block at the same time. In this situation, nodes can be in disagreement about which of these blocks should be the tip of the Block chain.&lt;br /&gt;
&lt;br /&gt;
Miners always follow the longest chain they deem to be valid. Eventually another block will be found that builds on one of the competing chain tips. Miners then switch to this tip provided they consider it to be valid. As such, such scenarios are eventually resolved back to one persistent chain through the actions of the majority of hash power via [[Nakamoto Consensus]].&lt;br /&gt;
&lt;br /&gt;
In this scenario, a block that doesn't end up forming part of the longest chain is rejected by the network and called an [[Orphan Block]]. An orphan block represents wasted effort on the behalf of a Miner and an incentive to invest in infrastructure in order to reduce the frequency of these events. However, orphans do not reduce the overall revenues of the Bitcoin system as the wasted work is not factored into the difficulty adjustment.  Thus, if a certain percentage of hashing work is wasted due to the orphaned blocks, the difficulty will adjust downwards by a similar percentage, maintaining the same rate of valid block production overall.  Additionally, the fee paying transactions in the orphaned block will still be valid and included in the competing block or its descendants.&lt;br /&gt;
&lt;br /&gt;
Competing valid blocks are not the only way that blocks end up being rejected. Any miner can refuse to build on any block for any reason. Such an action by a particular Miner is only meaningful if the majority of Miners carry out the same action. It is through this mechanism that the mining network can establish consensus on variables that are Miner configurable - such as maximum block size. This is the basis of [[Nakamoto Consensus]]:&lt;br /&gt;
&lt;br /&gt;
{{quote|1=''&amp;quot; They vote with their CPU power, expressing their acceptance of valid blocks by working on extending them and rejecting invalid blocks by refusing to work on them. Any needed rules and incentives can be enforced with this consensus mechanism.&amp;quot;''}}&lt;br /&gt;
&lt;br /&gt;
== The mining ecosystem ==&lt;br /&gt;
&lt;br /&gt;
=== Asic mining ===&lt;br /&gt;
An application-specific integrated circuit, or [[ASIC]], is a microchip designed and manufactured for a very specific purpose. ASICs designed for Bitcoin mining were first released in 2013. For the amount of power they consume, they are vastly more energy efficient than predecessor approaches to mining - using [[CPU]], GPU or FPGA.&lt;br /&gt;
&lt;br /&gt;
=== Pooled mining ===&lt;br /&gt;
Pooled mining is the use of a block template allocation system that provides, distributed hashing infrastructure updated block headers against which they perform proof of work. This system of hash allocation to nodes is a primary part of [[Nakamoto Consensus]], in that individual operators of hash power can choose to re-allocate their hash to nodes, producing blocks that meet their expectations in terms of maximised profitability and adherence to the Bitcoin ruleset. Miners who distribute block templates that don't maximise profit, or which attempt to implement changed rule sets, risk the owners of the hash machinery they depend on re-deploying it to a different node on the network.&lt;br /&gt;
 &lt;br /&gt;
==== Stratum ====&lt;br /&gt;
Stratum is an open-source mining protocol used by many mining pools. Stratum facilitates coordination between the mining pool operator and individual mining machines.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [https://bitcoinsv.io/bitcoin.pdf Bitcoin Whitepaper]&lt;br /&gt;
&lt;br /&gt;
==Attribution==&lt;br /&gt;
This content is based on content sourced from https://en.bitcoin.it/wiki/Mining under [https://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0]. Although it may have been extensively revised and updated, we acknowledge the original authors.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Payment_Channels&amp;diff=3018</id>
		<title>Payment Channels</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Payment_Channels&amp;diff=3018"/>
		<updated>2022-04-25T04:25:41Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''Payment Channels'' are a mechanism where two or more parties can directly exchange and update a transaction. The mechanism includes methods for establishing, or opening a payment channel, updating the channel, and finalising, or closing the payment channel. The mechanism also covers the possibility of any of the parties becoming unresponsive, usually by enabling the recovery of funds after a fixed time.&lt;br /&gt;
&lt;br /&gt;
Payment channels support extremely rapid transaction updates with only the final closing transaction being timestamped on the blockchain.&lt;br /&gt;
&lt;br /&gt;
Payment channels can be useful for streaming data, operating a sequence of events, or operating with a live dataset in applications such as gaming and more.&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
*Payment channels can be opened and closed arbitrarily.&lt;br /&gt;
*Payment channels can be opened directly with the participating peers, without needing a third party.&lt;br /&gt;
*It is possible to open a payment channel with or without an on-chain action.&lt;br /&gt;
*Payment channels can be private or public.&lt;br /&gt;
*You can have many peers in a channel.&lt;br /&gt;
*You can add and remove peers from a channel.&lt;br /&gt;
*Payment channels are data conduits.&lt;br /&gt;
*Channels are typically closed with an on-chain payment, however an on-chain payment can be made outside the channel which causes it to update.&lt;br /&gt;
&lt;br /&gt;
==Overview of the Mechanism==&lt;br /&gt;
A payment channel uses a transaction that has an [[nSequence]] that is less than 0xFFFFFFFF, and a nLocktime set to a time or block height in the future. The transaction can be updated many times between the peers until either, the nLocktime is reached, or nSequence is finalised and one of the parties transmits the transaction to the blockchain.&lt;br /&gt;
&lt;br /&gt;
==Example - Streaming Movie==&lt;br /&gt;
The following goes through the sequence of opening, using, and closing a payment channel for the purposes of serving streamed content.&lt;br /&gt;
&lt;br /&gt;
===STEP 1===&lt;br /&gt;
User browses catalog for titles to watch. Content can be on-chain or off-chain. &lt;br /&gt;
&lt;br /&gt;
===Step 2===&lt;br /&gt;
User selects the content. At this point, there can be a few ways to manage the channel:&lt;br /&gt;
*In public via mining network.&lt;br /&gt;
*In private with pre-funded UTXO per channel.&lt;br /&gt;
*In private with separate channels for content purchase and service delivery per user.&lt;br /&gt;
&lt;br /&gt;
===Step 3===&lt;br /&gt;
In this example, peers will use a timelocked UTXO in a public channel managed by Miners to serve the content.&lt;br /&gt;
For the sake of this example we will assume a single UTXO is being used. This UTXO goes into a double spend monitoring pool.&lt;br /&gt;
&lt;br /&gt;
The viewer sends a transaction with the following output script to the provider to initiate the channel:&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
* S&amp;lt;sub&amp;gt;vn&amp;lt;/sub&amp;gt; is the Viewer's  nth [[iteration]] of the channel signature.&lt;br /&gt;
* P&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt; is the Viewer's pubkey.&lt;br /&gt;
* H&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt; is the Viewer's PKH.&lt;br /&gt;
&lt;br /&gt;
* S&amp;lt;sub&amp;gt;pn&amp;lt;/sub&amp;gt; is the service provider's nth iteration of the channel signature.&lt;br /&gt;
* P&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt; is the service provider's pubkey.&lt;br /&gt;
* H&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt; is the service provider's PKH.&lt;br /&gt;
* H&amp;lt;sub&amp;gt;c0&amp;lt;/sub&amp;gt; is the hash of the [[merkle root]] of the content being selected.&lt;br /&gt;
* H&amp;lt;sub&amp;gt;cn&amp;lt;/sub&amp;gt; is the hash of each content frame with H&amp;lt;sub&amp;gt;c1&amp;lt;/sub&amp;gt; being the hash of the first frame.&lt;br /&gt;
* C&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt; is the content frame with C&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; being the first frame data.&lt;br /&gt;
* H&amp;lt;sub&amp;gt;fm&amp;lt;/sub&amp;gt; is the hash of a message the user can trigger to prematurely end or pause the stream.&lt;br /&gt;
* F&amp;lt;sub&amp;gt;m&amp;lt;/sub&amp;gt; is a message that the provider uses to end the stream.&lt;br /&gt;
&lt;br /&gt;
The sequence no. for the input being spent is still 1.&lt;br /&gt;
&lt;br /&gt;
The transaction iterates between the two scripts as as follows:&lt;br /&gt;
&lt;br /&gt;
==Iteration 1==&lt;br /&gt;
&lt;br /&gt;
The user signs the inputs they want to spend in, as payment using SIGHASH_ALL with the following outputs:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Script No.&lt;br /&gt;
! Purpose&lt;br /&gt;
! Script&lt;br /&gt;
! Amount&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Iteration 1: Content Request&lt;br /&gt;
| H&amp;lt;sub&amp;gt;c0&amp;lt;/sub&amp;gt; DROP DUP HASH160 H&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt; EQUALVERIFY CHECKSIGVERIFY EQUALVERIFY DUP HASH160 H&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt; EQUALVERIFY CHECKSIG&lt;br /&gt;
| Price of first frame&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Change&lt;br /&gt;
| Viewer's change script&lt;br /&gt;
| Change amount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Viewer also supplies the following data allowing the content provider to spend the payment channel output if the payment channel is closed:&lt;br /&gt;
&lt;br /&gt;
*''S&amp;lt;sub&amp;gt;v0&amp;lt;/sub&amp;gt; P&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt;'' where the signature is signed as SIGHASH_ANYONECANPAY | SIGHASH_NONE. The user can do this as the payment channel's current TXID can be generated allowing the user to sign the output against the most recent revision of the payment channel.&lt;br /&gt;
&lt;br /&gt;
This would allow the service provider to close the channel by countersigning the tx and settling on the network, guaranteeing payment for the first frame.&lt;br /&gt;
&lt;br /&gt;
The transaction pays out the price of the first frame to the service provider and the remainder is returned to the viewer as change. If the viewer cancels their session without watching, the transaction can still be processed on the network, and using the provided second signature the service provider can claim their money.&lt;br /&gt;
&lt;br /&gt;
===Step 4===&lt;br /&gt;
The provider responds with a new version of the transaction that modifies the output as shown:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Script No.&lt;br /&gt;
! Purpose&lt;br /&gt;
! Script&lt;br /&gt;
! Amount&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Iteration 2: First frame&lt;br /&gt;
| SHA256 H&amp;lt;sub&amp;gt;c1&amp;lt;/sub&amp;gt; EQUALVERIFY DUP HASH160 H&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt; EQUALVERIFY CHECKSIGVERIFY EQUALVERIFY DUP HASH160 H&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt; EQUALVERIFY CHECKSIG&lt;br /&gt;
| Price of second frame&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Change&lt;br /&gt;
| Viewer's change script&lt;br /&gt;
| Change amount&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
They also provide a new signature ''S&amp;lt;sub&amp;gt;p0&amp;lt;/sub&amp;gt;'' for this output, allowing the user to countersign and broadcast the previous iteration should they wish to close the channel.&lt;br /&gt;
&lt;br /&gt;
When the user receives this new output, they sign the inputs against the updated content to indicate they have received the first frame and provide the streaming service with payment for the second frame. The amounts can be optimised for the service provider's fee model.&lt;br /&gt;
&lt;br /&gt;
If the payment channel were closed, this output could be subsequently spent by providing the second packet of movie data as part of the input. This is not the ideal way for the output to be created on-chain, as there are higher transaction fees involved, but is done this way to allow both parties to acknowledge the progression through the content.&lt;br /&gt;
&lt;br /&gt;
===Step 5===&lt;br /&gt;
The viewer completes the transaction as shown:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Script No.&lt;br /&gt;
! Purpose&lt;br /&gt;
! Script&lt;br /&gt;
! Amount&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Iteration 3: Second frame&lt;br /&gt;
| SHA256 ''H&amp;lt;sub&amp;gt;c2&amp;lt;/sub&amp;gt;'' EQUALVERIFY DUP HASH160 H&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt; EQUALVERIFY CHECKSIGVERIFY EQUALVERIFY DUP HASH160 H&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt; EQUALVERIFY CHECKSIG&lt;br /&gt;
| Price of second frame&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Change&lt;br /&gt;
| Viewer's change script&lt;br /&gt;
| Change amount&lt;br /&gt;
|}&lt;br /&gt;
As in the previous iteration, they sign to indicate they have received the frame and provide the streaming service with payment for the next frame. This can be optimised for each service provider's fee model. &lt;br /&gt;
&lt;br /&gt;
They also provide a new signature for this output, ''S&amp;lt;sub&amp;gt;v1&amp;lt;/sub&amp;gt;'', allowing the service provider to countersign should they need to close the channel. In this example, the keypairs being used don't need to change for each iteration, but they could.&lt;br /&gt;
&lt;br /&gt;
===Step N===&lt;br /&gt;
The user can request that the provider close the channel. Streams can also be paused, or take place at any framerate, or even use larger transactions to move chunks at a time. &lt;br /&gt;
In this case the user is deciding to close it.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Script No.&lt;br /&gt;
! Purpose&lt;br /&gt;
! Script&lt;br /&gt;
! Amount&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Iteration N: Final frame&lt;br /&gt;
| SHA256 H&amp;lt;sub&amp;gt;fm&amp;lt;/sub&amp;gt; EQUALVERIFY DUP HASH160 H&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt; EQUALVERIFY CHECKSIGVERIFY EQUALVERIFY DUP HASH160 H&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt; EQUALVERIFY CHECKSIG&lt;br /&gt;
| Price of second frame&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Change&lt;br /&gt;
| Viewer's change script&lt;br /&gt;
| Change amount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The user puts the finish message hash at the front of the output. The streaming provider sees this and knows the customer wants to close the channel. &lt;br /&gt;
The user provides a new signature for this output, ''S&amp;lt;sub&amp;gt;vn&amp;lt;/sub&amp;gt;''. This allows the streaming service provider to finalise the channel.&lt;br /&gt;
&lt;br /&gt;
===Step N+1===&lt;br /&gt;
&lt;br /&gt;
The provider broadcasts the final transaction and spends their payment with the following script:&lt;br /&gt;
&lt;br /&gt;
''S&amp;lt;sub&amp;gt;vn&amp;lt;/sub&amp;gt; P&amp;lt;sub&amp;gt;v&amp;lt;/sub&amp;gt; S&amp;lt;sub&amp;gt;pn&amp;lt;/sub&amp;gt; P&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt; F&amp;lt;sub&amp;gt;m&amp;lt;/sub&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
In this way, rather than closing the transaction with a potentially large blob of content data at the front, just a short code need be used.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_root&amp;diff=3017</id>
		<title>Merkle root</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_root&amp;diff=3017"/>
		<updated>2022-04-25T04:22:55Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The hash value that summarises all data elements included in a [[Merkle Tree]]. &lt;br /&gt;
&lt;br /&gt;
As the leaf nodes are concatenated in pairs and hashed, the same occurs for all interior node values, whereupon the binary tree structure converge to a single root value.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Getminingcandidate&amp;diff=3016</id>
		<title>Getminingcandidate</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Getminingcandidate&amp;diff=3016"/>
		<updated>2022-04-22T05:37:50Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''getminingcandidate'' or GMC is a Remote Procedure Call (RPC) available in the Bitcoin SV node software.&lt;br /&gt;
&lt;br /&gt;
Its purpose is to provide mining software/pools with a suitable block candidate for hashing in order to mine a block. In addition it is greatly decoupled from block size unlike its predecessor [https://wiki.bitcoinsv.io/index.php/GetBlockTemplate_interface GetBlockTemplate], meaning it can scale and support very large block sizes.&lt;br /&gt;
&lt;br /&gt;
The way it supports blocks of very large sizes is by only providing a minimal set of data required for mining hardware to hash and generate a possible block solution. If a blocksolution is found it can be returned to the node software via the sibling RPC call ''submitminingsolution''.&lt;br /&gt;
&lt;br /&gt;
GMCs predecessor ''getblocktemplate'' gave the call mining software more control, but in order to do this, it had to provide a full and complete dataset of the current block and pending transactions in the mempool. A Miner trying to mine large blocks must put a lot more strain on both the node software and RPC interface to transmit a record of every transaction that is in the mempool, often resulting in lack of memory and/or performance issues.&lt;br /&gt;
&lt;br /&gt;
GMC removes this issue by only providing the mining software with a merkle proof of included transactions, rather than a complete listing, this lowers the amount of data to be produced and transmitted to log2(blocksize).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the node software receives a GMC request it will respond with a [https://www.json.org/json-en.html JSON] representation of the current block candidate. A description of this response body is shown below.&lt;br /&gt;
&lt;br /&gt;
===Response body of getminingcandidate===&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=&amp;quot;center&amp;quot;&amp;gt;Variable&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th align=&amp;quot;center&amp;quot;&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[uuid] id&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;The assigned id from Bitcoind. This must be provided with submitting a potential solution&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[hex string] prevHash&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Big Endian hash of the previous block&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[hex string] Coinbase (optional)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Suggested coinbase transaction is provided. Miner is free to supply their own or alter the supplied one. Altering will require parsing and splitting the coinbase in order to splice in/out data as required.  Requires Wallet to be enabled. Only returned when provide_coinbase_tx argument is set to true. Returns error if Wallet is not enabled&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[int32_t] version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;The block version&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[int64_t] coinbaseValue&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Total funds available for the coinbase tx (in Satoshis)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[uint32_t] nBits&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Compressed hexadecimal difficulty&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[uint32_t] time&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Current block time&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[int] height&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;The candidate block height&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;[array] merkleProof&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;Merkle branch/path for the block, used to calculate the [[Merkle root]] of the block candidate. This is a list of Little-Endian hex strings ordered from top to bottom&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a more technical breakdown of ''GetMiningCandidate'' and its implementation, see the protocol spec [https://github.com/bitcoin-sv-specs/protocol/blob/master/rpc/GetMiningCandidate.md here]&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Block_header&amp;diff=3015</id>
		<title>Block header</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Block_header&amp;diff=3015"/>
		<updated>2022-04-22T05:37:25Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The block header is the first piece of information propagated by a node when it finds a valid block solution. Other nodes on the network can validate the node's hash solution and determine whether the proposed block warrants the further checking required to secure its place as the top-most link in the longest chain of valid proof of work.&lt;br /&gt;
&lt;br /&gt;
A block header contains these fields:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field&lt;br /&gt;
! Purpose&lt;br /&gt;
! Updated when...&lt;br /&gt;
! Size (Bytes)&lt;br /&gt;
|-&lt;br /&gt;
|Version&lt;br /&gt;
|Block version&lt;br /&gt;
|&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|hashPrevBlock&lt;br /&gt;
|256-bit hash of the previous block header&lt;br /&gt;
|A new block comes in&lt;br /&gt;
|32&lt;br /&gt;
|-d&lt;br /&gt;
|hashMerkleRoot&lt;br /&gt;
|256-bit hash based on all of the transactions in the block&lt;br /&gt;
|An updated merkle tree is completed&lt;br /&gt;
|32&lt;br /&gt;
|-&lt;br /&gt;
|Time&lt;br /&gt;
|Current [[block timestamp]] as seconds since 1970-01-01T00:00 UTC&lt;br /&gt;
|Every few seconds&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|Bits&lt;br /&gt;
|Current [[target]] in compact format&lt;br /&gt;
|The [[difficulty]] is adjusted (approx 2 weeks)&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|Nonce&lt;br /&gt;
|32-bit number (starts at 0)&lt;br /&gt;
|A hash is tried (increments)&lt;br /&gt;
|4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The body of the block contains the transactions. These are hashed only indirectly through the [[Merkle root]]. Because transactions aren't hashed directly, the proof of work needed to mine a block with 1 transaction takes exactly the same amount of effort as a block with 10,000, 10,000,000 or 10,000,000,000 transactions.&lt;br /&gt;
&lt;br /&gt;
The format of target is a [[floating-point]] number encoded using a 3 byte mantissa with the leading 5 bytes as exponent. The number's range is within 2 &amp;lt;sup&amp;gt;256&amp;lt;/sup&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is not possible for two nodes to be working on the same Merkle root because the [[Coinbase]] transaction is unique to that node, generating a different hash output. Every hash attempt made has the same chance of winning as every other hash calculated across the network.&lt;br /&gt;
&lt;br /&gt;
==Endianess==&lt;br /&gt;
Note that the hash, which is a 256-bit number, has lots of leading zero bytes when stored or printed as a [[big-endian]] [[hexadecimal]] constant, but it has trailing zero bytes when stored or printed in [[little-endian]]. For example, if interpreted as a string and the lowest (or start of) the string address keeps lowest significant byte, it is little-endian.&lt;br /&gt;
&lt;br /&gt;
Most block explorers display the hash values as big-endian numbers; notation for numbers is usual (leading digits are the most significant digits read from left to right).&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Block_hashing_algorithm&amp;diff=3014</id>
		<title>Block hashing algorithm</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Block_hashing_algorithm&amp;diff=3014"/>
		<updated>2022-04-22T05:36:50Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bitcoin mining uses a [[SHA-256]] hash based [[Proof of Work]] function. The algorithm requires the following parameters: a service string, a nonce, and a counter.  In Bitcoin the service string is encoded in the block header data structure, and includes a version field, the hash of the previous block, the root hash of the [[wikipedia:Merkle tree|Merkle tree]] of all transactions in the block, the current time, and the [[target]] of the proof of work function.&lt;br /&gt;
&lt;br /&gt;
Bitcoin Miners commonly make use of two nonce fields:&lt;br /&gt;
# The Nonce field which is included in the block header&lt;br /&gt;
# The extraNonce field which is part of the [[Coinbase]] transaction&lt;br /&gt;
&lt;br /&gt;
Each field includes a counter parameter that is relatively small (32-bits). The hash function cycles through all values of the Nonce field, testing each outcome of the hash function against the difficulty setting, then increments (or otherwise changes) the extraNonce field before going through all permutations of the Nonce again. Incrementing the extraNonce field entails recomputing the [[Merkle root|Merkle tree root]] as it modifies the hash of the Coinbase transaction.&lt;br /&gt;
&lt;br /&gt;
==Attribution==&lt;br /&gt;
This content is based on content sourced from https://en.bitcoin.it/wiki/Block_hashing_algorithm under [https://creativecommons.org/licenses/by/3.0/ Creative Commons Attribution 3.0]. Although it may have been extensively revised and updated, we acknowledge the original authors.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_root&amp;diff=3013</id>
		<title>Merkle root</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_root&amp;diff=3013"/>
		<updated>2022-04-22T05:31:24Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;The hash values that summarises all data elements included in a Merkle Tree.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The hash values that summarises all data elements included in a [[Merkle Tree]].&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_path&amp;diff=3012</id>
		<title>Merkle path</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_path&amp;diff=3012"/>
		<updated>2022-04-22T05:30:58Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The path of values that connects a [[leaf (node)|leaf]] node to the [[Merkle root]].&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_path&amp;diff=3011</id>
		<title>Merkle path</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_path&amp;diff=3011"/>
		<updated>2022-04-22T05:30:41Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The path of values that connects a [[leaf (node)|leaf]] node to the Merkle root.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Merkle_path&amp;diff=3010</id>
		<title>Merkle path</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Merkle_path&amp;diff=3010"/>
		<updated>2022-04-22T05:30:21Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;The path of values that connects a leaf node to the Merkle root.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The path of values that connects a [[leaf (node)|leaf node]] to the Merkle root.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Simplified_Payment_Verification&amp;diff=3009</id>
		<title>Simplified Payment Verification</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Simplified_Payment_Verification&amp;diff=3009"/>
		<updated>2022-04-22T05:29:39Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Simplified Payment Verification (SPV) is described in section 8 of the [[Bitcoin whitepaper]]. It allows a transaction recipient to prove that the sender has control of the source funds of the payment they are offering without downloading the full [[Blockchain]], by utilising the properties of [[Simplified_Payment_Verification #Merkle_Trees.2C_Merkle_Roots.2C_Merkle_Paths_and_Merkle_Proofs|Merkle proofs]]. This does not guarantee that the funds have not been previously spent, this assurance is received by submitting the transaction to the Bitcoin miners. However, in such a case the SPV proof acts as strong evidence of fraud backed by legally recognised digital signature technology.&lt;br /&gt;
&lt;br /&gt;
SPV allows users to securely transact with each other, peer-to-peer, while nodes act to form the settlement layer.&lt;br /&gt;
&lt;br /&gt;
===Advantages===&lt;br /&gt;
The advantages of using SPV are clear in terms of the volume of data required:&lt;br /&gt;
&lt;br /&gt;
* a wallet can store '''all necessary block headers in around 50MB - this covers  the entire block chain''' (as of January 2020, with 80 bytes per block and around 620,000 blocks in the chain). The total '''grows linearly''' at around 4MB per year (i.e. it increases by 80 bytes with each block mined, regardless of the size of that block).&lt;br /&gt;
&lt;br /&gt;
* contrast this with the '''hundreds of gigabytes''' which would be required to store the entire chain, if SPV were not being used.&lt;br /&gt;
&lt;br /&gt;
* The size of the data required for the '''[[merkle path]]s''' is of maximum &amp;lt;math&amp;gt;64log_{2}{n}&amp;lt;/math&amp;gt; bytes, where &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; is the total number of transaction in one block. &lt;br /&gt;
&lt;br /&gt;
As explained in Section 8 of the [[Bitcoin whitepaper]]:&lt;br /&gt;
{{quote|1=''&amp;quot; ... [An SPV client] only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he's convinced he has the longest chain, and obtain the Merkle branch linking the transaction to the block it's timestamped in ... }}&lt;br /&gt;
&lt;br /&gt;
And in Section 7:&lt;br /&gt;
{{quote|1=''&amp;quot; ... A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year ...&amp;quot;''}} &lt;br /&gt;
&lt;br /&gt;
===Approach===&lt;br /&gt;
There have been a lot of previous misunderstandings around SPV and peer-to-peer transacting. Previously, the custom had been for the sender of the payment to just broadcast the payment to the Bitcoin network nodes. The receiver of the payment would then need to somehow filter through all of the transactions coming onto the network for specific transactions relating to them (an extremely difficult task in of itself). Even if the sender sent the transaction to the receiver as well as the network nodes, the custom had been for the receiver to always wait for the transaction to be [[confirmation|confirmed]] at least 6 times whatever the transaction type, amount or situation.&lt;br /&gt;
&lt;br /&gt;
The better approach is that transactions between SPV clients are negotiated peer-to-peer and settled on the ledger through the network nodes. An analogy for this is a transaction done using cheque at a much faster speed. The customer hands the the signed cheque (transaction) to the merchant, who then banks or cashes the cheque (settles the transaction on chain).  When/if the merchant is satisfied according to the situational risk of the transaction, then they can hand over the goods or services.&lt;br /&gt;
&lt;br /&gt;
There is no such thing as absolute security, there is always a risk against the cost of being defrauded (which decreases exponentially as time goes by). If the transaction is only for a cup of coffee, then the merchant will be exposed to less risk than if the transaction is to buy a car for example, and they would behave differently.  If selling a cup of coffee, they can satisfy themselves that the transaction they have received appears to be valid using the SPV process detailed above, and submit the transaction themselves to the network (or even to a trusted miner if using a [[Merchant API]]). Given that they will likely receive notification and proof of a fraud attempt within seconds, they will not want to maintain a copy of the entire ledger or even the [[UTXO]] set to check against, because the risk they face does not justify the cost.  SPV is adequate just as an instant contactless payment without a pin number although arguably the security of SPV is far superior given that discovery of fraud attempts is rapid.  Likewise, they will not want to detain their customer while they wait for 6 confirmations - it simply is not necessary - they have received a transaction which appears to be valid, and it has been accepted by the network without a double spend alert.  This will probably be enough for them to risk the cost of the coffee.&lt;br /&gt;
&lt;br /&gt;
===Merkle Trees, Merkle Roots, Merkle Paths and Merkle Proofs===&lt;br /&gt;
A '''Merkle Tree''' is a structure used in computer science to validate data - see [https://en.wikipedia.org/wiki/Merkle_tree wikipedia definition] for more information.&lt;br /&gt;
&lt;br /&gt;
The '''Merkle Root''' in a Bitcoin block is the hash contained in the [[Block_hashing_algorithm#Block_Header|block header]], which is derived from the hashes of all other transactions in the block.&lt;br /&gt;
&lt;br /&gt;
A '''Merkle Path''' in SPV represents the information which the user needs to calculate the expected value for the Merkle root for a block, from their own transaction hash contained in that block.  The Merkle path is used as part of of the Merkle Proof.&lt;br /&gt;
&lt;br /&gt;
A '''Merkle Proof''' in SPV proves the existence of a specific transaction in a specific block (without the user needing to examine all the transactions in the Block).  It includes the Merkle Root and the Merkle Path.&lt;br /&gt;
&lt;br /&gt;
* To '''create''' a Merkle proof, a user or (or their wallet) simply needs the Merkle path of the transaction as well as the [[Block_hashing_algorithm#Block_Header|block header]] for a given block (80 bytes).&lt;br /&gt;
&lt;br /&gt;
* To '''validate''' a proof, a user (or their wallet) only needs the chain of block headers (as opposed to the whole blocks themselves). I.e. they need their own copy of the [[block header]] of each block, that they know to be accurate.  Using their own block header chain, together with the transaction (or its hash/id) they want to verify, as well as its Merkle proof (also sometimes referred to as an inclusion proof), a user can verify the transaction was time stamped in a specific block, without examining every transaction in that block.&lt;br /&gt;
&lt;br /&gt;
An article in March 2019 entitled [https://craigwright.net/blog/bitcoin-blockchain-tech/merkle-trees-and-spv Merkle Trees and SPV] (Craig Wright, 2019) clarified some previous misunderstandings around SPV and transaction verification. The article included the following diagram which shows how transaction hashes can be related to the Merkle root in a block header:&lt;br /&gt;
&lt;br /&gt;
[[File: Merkle_tree2.png|frameless|1000px|alt=Three transactions and the Merkle paths which can be used to relate them to blocks]]&lt;br /&gt;
&lt;br /&gt;
===SPV Wallet===&lt;br /&gt;
An SPV wallet is a lightweight wallet that uses the mechanism of SPV to construct Bitcoin transactions and payments. &lt;br /&gt;
&lt;br /&gt;
To spend a UTXO, a user of a SPV wallet will pass on the following information to the receiver:&lt;br /&gt;
# &amp;lt;math&amp;gt;Transaction_0&amp;lt;/math&amp;gt; - the transaction that contains the UTXO as an output,&lt;br /&gt;
# The Merkle path of &amp;lt;math&amp;gt;Transaction_0&amp;lt;/math&amp;gt;&lt;br /&gt;
# The block header that contains the Merkle root derived from the Merkle path (or its identifier, e.g., block height)&lt;br /&gt;
# &amp;lt;math&amp;gt;Transaction_1&amp;lt;/math&amp;gt; - the transaction that spends the UTXO&lt;br /&gt;
&lt;br /&gt;
To validate the information, a user computes the Merkle root from the Merkle path of &amp;lt;math&amp;gt;Transaction_0&amp;lt;/math&amp;gt;. The user then compares it with the Merkle root specified in the block header. If they are the same, the user accepts that &amp;lt;math&amp;gt;Transaction_0&amp;lt;/math&amp;gt; is in the chain.&lt;br /&gt;
&lt;br /&gt;
=== Offline Payment ===&lt;br /&gt;
Note that by storing &amp;lt;math&amp;gt;Transaction_0&amp;lt;/math&amp;gt; locally, a user will be able to sign &amp;lt;math&amp;gt;Transaction_1&amp;lt;/math&amp;gt; offline, as any signature on &amp;lt;math&amp;gt;Transaction_1&amp;lt;/math&amp;gt; requires the scriptPubKey (locking script) part from &amp;lt;math&amp;gt;Transaction_0&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Ancestor_Limit&amp;diff=3008</id>
		<title>Ancestor Limit</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Ancestor_Limit&amp;diff=3008"/>
		<updated>2022-04-22T05:27:47Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the first iteration of the Bitcoin software, bitcoind v0.1.0 handled the creation of blocks fairly simply. Once a second or so, the software would take a memory map of all the transactions it had received, check any new ones to ensure they met the minimum fee requirement set for the node and if so, add them to the block template which was basically an ordered list of valid transactions. It would then calculate a merkle tree from that set of transactions and build a block header to start doing proof of work upon.&lt;br /&gt;
&lt;br /&gt;
Because of the arbitrary 1MB block size limit imposed on the software at a later time, the software was then optimized to select transactions for block building with the highest fee rates until the 1MB block size limit was filled. Due to this accounting and other policy based limitations, the software inefficiently added transactions to block templates.&lt;br /&gt;
&lt;br /&gt;
This inefficiency manifested in a big way when creating long chains of descendant transactions prior to a block being found. Descendant transactions refers to transactions that are added to a node's [[mempool]] that are dependent on previous transactions that are also in that node's mempool. Because the older Bitcoin software was designed around 1MB blocks, situations arose where these long chains of transactions had to be split across multiple blocks. &lt;br /&gt;
&lt;br /&gt;
Starting in October 2015, the BTC Core developers introduced a rule in bitcoin v0.12 to account for this inefficiency by limiting the number of descendants a coin could have to 25. This limit, also called the Ancestor Limit, rejected any transactions that violated this rule with error code 64: too-long-mempool-chain. Bitcoin SV Node v1.0.7 raised this default limit to 1000, and plan to remove the limit entirely soon. Since this restriction is miner policy, miners are free to raise this limit themselves as well.&lt;br /&gt;
&lt;br /&gt;
[[File:ancestor_limit.gif|centre|alt=Ancestor Limit Performance Comparison for Bitcoin SV Node 1.0.7]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
In the above graphic, you can see the performance increase for long chain submission to the node software in v1.0.7.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Mediation&amp;diff=3007</id>
		<title>Mediation</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Mediation&amp;diff=3007"/>
		<updated>2022-04-22T05:27:14Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;The attempt to settle a dispute through a neutral third party.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The attempt to settle a dispute through a neutral third party.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Maximum_Acceptable_Transaction_Size_Limit&amp;diff=3006</id>
		<title>Maximum Acceptable Transaction Size Limit</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Maximum_Acceptable_Transaction_Size_Limit&amp;diff=3006"/>
		<updated>2022-04-22T05:26:44Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A node configurable limit for the number of bytes in the serialised transaction.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Maximum_Acceptable_Transaction_Size_Limit&amp;diff=3004</id>
		<title>Maximum Acceptable Transaction Size Limit</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Maximum_Acceptable_Transaction_Size_Limit&amp;diff=3004"/>
		<updated>2022-04-22T05:26:14Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Todd Price moved page Maximum Acceptable Transaction Size to Maximum Acceptable Transaction Size Limit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A standard local policy that configures the largest transactions that the software will propagate across the P2P network or include in a block. It needs to be lower than the network wide maximum transaction size consensus rule for it to have any effect.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Maximum_Acceptable_Transaction_Size&amp;diff=3005</id>
		<title>Maximum Acceptable Transaction Size</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Maximum_Acceptable_Transaction_Size&amp;diff=3005"/>
		<updated>2022-04-22T05:26:14Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Todd Price moved page Maximum Acceptable Transaction Size to Maximum Acceptable Transaction Size Limit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Maximum Acceptable Transaction Size Limit]]&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Maximum_Acceptable_Transaction_Size_Policy&amp;diff=3003</id>
		<title>Maximum Acceptable Transaction Size Policy</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Maximum_Acceptable_Transaction_Size_Policy&amp;diff=3003"/>
		<updated>2022-04-22T05:25:38Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;Is a standard local policy that configures the largest transactions that the software will propagate across the P2P network or include in a block. It needs to be lower than th...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Is a standard local policy that configures the largest transactions that the software will propagate across the P2P network or include in a block. It needs to be lower than the network wide maximum transaction size consensus rule for it to have any effect.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Maximum_Acceptable_Transaction_Size_Limit&amp;diff=3002</id>
		<title>Maximum Acceptable Transaction Size Limit</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Maximum_Acceptable_Transaction_Size_Limit&amp;diff=3002"/>
		<updated>2022-04-22T05:25:04Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;A standard local policy that configures the largest transactions that the software will propagate across the P2P network or include in a block. It needs to be lower than the n...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A standard local policy that configures the largest transactions that the software will propagate across the P2P network or include in a block. It needs to be lower than the network wide maximum transaction size consensus rule for it to have any effect.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Markup_language&amp;diff=3001</id>
		<title>Markup language</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Markup_language&amp;diff=3001"/>
		<updated>2022-04-22T05:09:40Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: Created page with &amp;quot;In computer text processing, a markup language is a system for annotating a document in a way that it is visually distinguishable from the content.   It is only used to format...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In computer text processing, a markup language is a system for annotating a document in a way that it is visually distinguishable from the content. &lt;br /&gt;
&lt;br /&gt;
It is only used to format the text, so that when the document is processed for display, the markup language does not appear.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitcoinsv.io/index.php?title=Markdown&amp;diff=3000</id>
		<title>Markdown</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitcoinsv.io/index.php?title=Markdown&amp;diff=3000"/>
		<updated>2022-04-22T05:08:41Z</updated>

		<summary type="html">&lt;p&gt;Todd Price: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Markdown is a lightweight [[markup language]] for creating formatted text using a plain-text editor.&lt;/div&gt;</summary>
		<author><name>Todd Price</name></author>
		
	</entry>
</feed>