<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.snowblossom.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fireduck</id>
	<title>Snowblossom Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.snowblossom.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fireduck"/>
	<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php/Special:Contributions/Fireduck"/>
	<updated>2026-05-17T17:12:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Wallet_Management&amp;diff=365</id>
		<title>Wallet Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Wallet_Management&amp;diff=365"/>
		<updated>2025-01-20T05:34:45Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: Created page with &amp;quot;== Wallet Management ==   === General === Snowblossom clients, including SnowBlossomClient and IceLeaf use a wallet database mechanism that involves a directory rather...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wallet Management ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
Snowblossom clients, including [[SnowBlossomClient]] and [[IceLeaf]] use a wallet database mechanism that involves a directory rather than a single file.&lt;br /&gt;
&lt;br /&gt;
It has some really cool properties.&lt;br /&gt;
&lt;br /&gt;
* All writes involve adding data - the wallet can be see as an append only data store of sorts.&lt;br /&gt;
* The operations are all idempotent, so there is no problem if multiple files have the same data.&lt;br /&gt;
* So when a client saves data, like adding a new key and address, it simply adds a new data file.&lt;br /&gt;
* To avoid an explosion of data file numbers, when a client starts up it reads all existing files and merges them into a single new database file.&lt;br /&gt;
* Only once the new file is written correctly, the old files are deleted.&lt;br /&gt;
&lt;br /&gt;
The net effect is that you can do a lot of things safely.&lt;br /&gt;
&lt;br /&gt;
* You can run multiple clients using the same data directory using real-time syncing, like a shared filesystem&lt;br /&gt;
* You can run multiple clients using the same data directory with eventual consistency syncing, like Dropbox&lt;br /&gt;
* You can run multiple clients using manual syncing.  Not sure which clients have been generating new keys?  Maybe multiple have?  No problem, just copy all files into the wallet database directory.  The client will merge them all on startup.&lt;br /&gt;
&lt;br /&gt;
For HD Seed wallets, this isn't very important, you can just restore from seed.  However our new and interesting wallet types do not support deterministic generation from seed, so as new keys are generated it is important to keep the wallet backed up.&lt;br /&gt;
&lt;br /&gt;
=== How Key Generation Works ===&lt;br /&gt;
&lt;br /&gt;
For non-HD wallets, the client will automatically generate new addresses and associated keys as needed to maintain a pool of unused addresses.  As addresses get used, the client will mark them as used and generate more.  So as you use a wallet and it is creating new addresses, it is important to make regular backups.  The frequency of the required backups is relative to the number of transactions you do to new addresses.&lt;br /&gt;
&lt;br /&gt;
Example:  Lets say on Jan 1st, you make a new non-HD wallet and create a backup.  10 fresh addresses are automatically generated and those 10 addresses and keys are in the backup.  If you use a fresh address for each receive and when you send an unused address is used for each send for the change, then you can do 10 transactions without doing another backup.  The addresses you use will be the ones used in that initial backup.  However, after that you'll be using new addresses that are not in the backup and it should be updated.&lt;br /&gt;
&lt;br /&gt;
So in short, if you don't do many transactions, you don't need to update your backup.  If you do regular transactions, you need to update the backup regularly.&lt;br /&gt;
&lt;br /&gt;
Note: if all you do is receive transactions and reuse addresses (like mining rewards) then you don't need to refresh backups.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=IceLeaf&amp;diff=364</id>
		<title>IceLeaf</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=IceLeaf&amp;diff=364"/>
		<updated>2025-01-20T05:20:20Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* Backup Wallets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
IceLeaf is a graphical client that should work on any desktop OS where Java runs.  See [[Download]] for how to get and install it.&lt;br /&gt;
&lt;br /&gt;
Or it can be built from source, of course.&lt;br /&gt;
&lt;br /&gt;
    bazel build :IceLeaf_deploy.jar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Existing Features==&lt;br /&gt;
&lt;br /&gt;
* Allows optional running a full node&lt;br /&gt;
* Allows connecting to other nodes instead of running a full node&lt;br /&gt;
* Supports creating Seed word wallets&lt;br /&gt;
* Supports creating old standard ecdsa (without seed) wallets&lt;br /&gt;
* Supports creating QHard wallets (see [[Quantum_Tough]])&lt;br /&gt;
* Supports multiple named wallets at the same time&lt;br /&gt;
* Sending simple transactions&lt;br /&gt;
* Supports creating watch-only wallets using xpub of seed wallet&lt;br /&gt;
* Shows address list with balance on each address&lt;br /&gt;
&lt;br /&gt;
==Planned Features==&lt;br /&gt;
* Address list for a wallet, showing used status, number of transactions and UTXOs&lt;br /&gt;
* History for a wallet, showing all transactions and their confirmation status&lt;br /&gt;
* Wallet file encryption (in progress)&lt;br /&gt;
* Wallet file export&lt;br /&gt;
* Wallet file import&lt;br /&gt;
* Unsigned transaction export&lt;br /&gt;
* Unsigned transaction import/signing/broadcast&lt;br /&gt;
* Multisig wallet creation&lt;br /&gt;
* Switch to async notifications to make network use more efficent&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open Issues==&lt;br /&gt;
&lt;br /&gt;
==How To Do Things==&lt;br /&gt;
&lt;br /&gt;
===Backup Wallets===&lt;br /&gt;
&lt;br /&gt;
Backup all the contents of the directory set as &amp;quot;Wallet Directory&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: Instead of doing this, if your wallets are all HD Seed wallets and you have a record of the 12 word seeds, those are sufficient to recover the wallets.&lt;br /&gt;
&lt;br /&gt;
See [[Wallet Management]]&lt;br /&gt;
&lt;br /&gt;
===Rename A Wallet===&lt;br /&gt;
&lt;br /&gt;
* Exit IceLeaf&lt;br /&gt;
* In &amp;quot;Wallet Directory&amp;quot; find the wallet directory in question and rename it&lt;br /&gt;
&lt;br /&gt;
===Remove A Wallet===&lt;br /&gt;
&lt;br /&gt;
* Exit IceLeaf&lt;br /&gt;
* In &amp;quot;Wallet Direcory&amp;quot; find the wallet directory and remove it&lt;br /&gt;
&lt;br /&gt;
===Use a wallet from multiple computers===&lt;br /&gt;
&lt;br /&gt;
Options:&lt;br /&gt;
* Use HD Seed wallets and import the seed words on another computer&lt;br /&gt;
* Use Dropbox/OneDrive/Google Drive or any other synchronization tool, put your wallet directory in there&lt;br /&gt;
** This is safe because of [[How Snow Blossom Client Wallet Files Work]]&lt;br /&gt;
&lt;br /&gt;
==Node Vs Other Servers==&lt;br /&gt;
&lt;br /&gt;
If you are running a node, you don't need to leave it running.  After the first sync, which will probably take an hour or two, whenever you do run IceLeaf it will quickly update with any blocks you missed and be ready to go fairly quickly.  You can leave it running, but you don't need to.&lt;br /&gt;
&lt;br /&gt;
On the node selection tab:&lt;br /&gt;
* local - your local node&lt;br /&gt;
* seed - seed nodes built into the IceLeaf binary.  This list is curated by Fireduck and each node has a TLS key for private communication.&lt;br /&gt;
* list - any other nodes you wish to include&lt;br /&gt;
&lt;br /&gt;
After making this selection, IceLeaf will use the node that responds to a GetNodeStatus the fastest.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Wallet_Types&amp;diff=363</id>
		<title>Wallet Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Wallet_Types&amp;diff=363"/>
		<updated>2025-01-20T05:19:25Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: Created page with &amp;quot;== Wallet Types ==  === HD Seed ===  * Uses a BIP32 to define a set of keys derived from a single 12 word seed. * Signing: Elliptic Curve secp256k1 * Same as Bitcoin and Bitco...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wallet Types ==&lt;br /&gt;
&lt;br /&gt;
=== HD Seed ===&lt;br /&gt;
&lt;br /&gt;
* Uses a BIP32 to define a set of keys derived from a single 12 word seed.&lt;br /&gt;
* Signing: Elliptic Curve secp256k1&lt;br /&gt;
* Same as Bitcoin and Bitcoin clients like Electrum&lt;br /&gt;
&lt;br /&gt;
=== Old Standard ===&lt;br /&gt;
&lt;br /&gt;
* Signing: Elliptic Curve secp256k1&lt;br /&gt;
* Same as Bitcoin&lt;br /&gt;
* Does not use a seed.  Wallet will need to be backed up as new keys/addresses are generated.  See [[Wallet Management]]&lt;br /&gt;
&lt;br /&gt;
=== QHard ===&lt;br /&gt;
&lt;br /&gt;
* Signing: Elliptic Curve secp256k1, RSA 8192 bit, DSTU4145 (3 of 3)&lt;br /&gt;
* Old Quantum answer.  Still safe, but should use PQC1 instead for new wallets.&lt;br /&gt;
* Does not use a seed.  Wallet will need to be backed up as new keys/addresses are generated.  See [[Wallet Management]]&lt;br /&gt;
&lt;br /&gt;
=== PQC1 ===&lt;br /&gt;
&lt;br /&gt;
* Signing: Elliptic Curve secp256k1, DSTU415, Sphincs+, Dilithium (4 of 4)&lt;br /&gt;
* Uses some old and proved algos with newer Post Quantum Cryptography algorithms.&lt;br /&gt;
* Our new gold standard for long term protection.&lt;br /&gt;
* Does not use a seed.  Wallet will need to be backed up as new keys/addresses are generated.  See [[Wallet Management]]&lt;br /&gt;
* Somewhat larger key sizes and transaction sizes.&lt;br /&gt;
&lt;br /&gt;
=== PQC Lite ===&lt;br /&gt;
&lt;br /&gt;
* Signing: Falcon&lt;br /&gt;
* Uses one of the Post Quantum Cryptography algorithms&lt;br /&gt;
* Uses an algorithm tuned for small key sizes.&lt;br /&gt;
* Does not use a seed.  Wallet will need to be backed up as new keys/addresses are generated.  See [[Wallet Management]]&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Quantum_Tough&amp;diff=362</id>
		<title>Quantum Tough</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Quantum_Tough&amp;diff=362"/>
		<updated>2025-01-20T05:10:20Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Terminology==&lt;br /&gt;
&lt;br /&gt;
* Quantum Resistant - A thing is quantum resistant if no known algorithm makes it easier to break with a quantum computer than a classical computer.&lt;br /&gt;
* Quantum Safe - A thing is quantum safe is it is proven that no possible algorithm would make it easier to break with a quantum computer than a classical computer.&lt;br /&gt;
&lt;br /&gt;
Previously we used the term quantum resistant, which was in error.  That is not the term for what we have going on (currently).&lt;br /&gt;
&lt;br /&gt;
==Where we started==&lt;br /&gt;
&lt;br /&gt;
It is estimated by people much smarter than I that 256-bit elliptic curve (like bitcoin uses) could be broken by a quantum computer with about 1600 qubits. RSA is expected to take 2x the key size (in bits) in qubits.&lt;br /&gt;
&lt;br /&gt;
So a reasonable long term storage multisignature scheme might be a 3of3 consisting of:&lt;br /&gt;
&lt;br /&gt;
* standard secp256k1 - in case someone breaks factoring to break RSA&lt;br /&gt;
* RSA 8192-bit - in case someone builds a quantum computer with a few thousand qubits&lt;br /&gt;
* DSTU 4145 - just to include something a bit different&lt;br /&gt;
&lt;br /&gt;
This is enabled in the SnowBlossomClient. Simply put &amp;quot;key_mode=qhard&amp;quot; in your configuration before you make your wallet.&lt;br /&gt;
&lt;br /&gt;
[https://explorer.snowblossom.org/?search=5dc53f864b6d060f218284121e67c3da85ede422ebe28786510dd3ea371c79b0 QHard TX]&lt;br /&gt;
&lt;br /&gt;
Note: the public keys and signature (which need to be included in a spending transaction will be large for that large of RSA). A transaction spending such a scheme would be at least 4k plus normal transaction overhead, so probably around 4.4k. Compare to a regular standard EC transaction, which is around 270 bytes.&lt;br /&gt;
&lt;br /&gt;
So it might cost more in fees but could easily be worth it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Elliptic-curve_cryptography#Quantum_computing_attacks EC - Quantum_computing_attacks]&lt;br /&gt;
* [https://crypto.stackexchange.com/questions/35137/how-many-qubits-are-required-to-break-rsa-2048-or-4096-with-a-universal-quantum how-many-qubits-are-required-to-break-rsa-2048-or-4096-with-a-universal-quantum]&lt;br /&gt;
&lt;br /&gt;
In short, if you use QHARD keys in your Snowblossom Client you should be safe until quantum computers are in the 16000 qubit range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Where we are now==&lt;br /&gt;
&lt;br /&gt;
Having watched the NIST Post-Quantum Cryptography process, we have adopted the finalists into Snowblossom.&lt;br /&gt;
Snowblossom now supports Sphinx+, Falcon and Dilithium keys.&lt;br /&gt;
&lt;br /&gt;
Users will have to create new wallets to use these keys.  See [[Wallet Types]]&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Main_Page&amp;diff=361</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Main_Page&amp;diff=361"/>
		<updated>2025-01-20T05:10:04Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* Snowblossom Cryptocurrency */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Snowblossom Cryptocurrency =&lt;br /&gt;
&lt;br /&gt;
Snowblossom is a fresh take on cryptocurrency.&lt;br /&gt;
&lt;br /&gt;
* Simple&lt;br /&gt;
* Scalable&lt;br /&gt;
* Portable&lt;br /&gt;
* [[Quantum Tough]]&lt;br /&gt;
* Genuinely ASIC Resistant&lt;br /&gt;
* Ready to go Block Explorer, Pool, Miner software&lt;br /&gt;
&lt;br /&gt;
'''Information'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Security Advisory]]'''&lt;br /&gt;
* '''[[Download]]'''&lt;br /&gt;
* '''[[Features]]'''&lt;br /&gt;
* '''[[Wallet Types]]'''&lt;br /&gt;
* '''[[Creators]]'''&lt;br /&gt;
* '''[[Community]]'''&lt;br /&gt;
* '''[[Launch]]'''&lt;br /&gt;
* '''[https://github.com/snowblossomcoin/snowblossom/blob/master/RELEASE-NOTES.md Release Notes]'''&lt;br /&gt;
* '''[[:Category:Mining|Mining]]'''&lt;br /&gt;
* '''[[Programs]]'''&lt;br /&gt;
* '''[[Migration]]'''&lt;br /&gt;
* '''[[Road Map]]'''&lt;br /&gt;
* '''[[Channels]]'''&lt;br /&gt;
* '''[[Timestamp Service]]'''&lt;br /&gt;
&lt;br /&gt;
'''Using Snowblossom'''&lt;br /&gt;
* '''[[:Category:ConfigOptions|Config Options]]'''&lt;br /&gt;
&lt;br /&gt;
'''Get Started'''&lt;br /&gt;
&lt;br /&gt;
* '''[[FAQ]]'''&lt;br /&gt;
* '''[[Quickstart]]'''&lt;br /&gt;
* '''[[Quickstart-from-Source]]'''&lt;br /&gt;
* '''[[Docker]]'''&lt;br /&gt;
* '''[[User-Guide]]'''&lt;br /&gt;
* '''[[Config-Files]]'''&lt;br /&gt;
* '''[[Mining-Pools]]'''&lt;br /&gt;
* '''[[Trading]]'''&lt;br /&gt;
* '''[https://1209k.com/faucet/ Faucet]'''&lt;br /&gt;
* '''[[:Category:HowTo]]'''&lt;br /&gt;
&lt;br /&gt;
'''Further'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Proposals]]'''&lt;br /&gt;
* '''[[Future-Plans]]'''&lt;br /&gt;
* '''[http://testnet.snowblossom-explorer.org/ Testnet Explorer with Faucet]'''&lt;br /&gt;
* '''[http://snowblossom.org/richlist.txt Rich address list]'''&lt;br /&gt;
&lt;br /&gt;
'''Developers'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Install-from-Source]]'''&lt;br /&gt;
* '''[[Technical-Design]]'''&lt;br /&gt;
* '''[[JSON-RPC-Commands]]'''&lt;br /&gt;
* '''[[Watch-only-Wallets]]'''&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Proposals&amp;diff=360</id>
		<title>Proposals</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Proposals&amp;diff=360"/>
		<updated>2025-01-19T20:34:32Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Voting =&lt;br /&gt;
&lt;br /&gt;
* Not voting / Abstaining, will not be counted.&lt;br /&gt;
* Pools vote on behalf of their miners.&lt;br /&gt;
* Miners may vote by appending their config files with: &amp;lt;code&amp;gt;vote_yes=   vote_no=&amp;lt;/code&amp;gt;&lt;br /&gt;
* You may vote for or against proposals such as: &amp;lt;code&amp;gt;vote_yes=1,2,3   vote_no=4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposals =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| ID&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Proposal&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Condition&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Verdict&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [[SIP1-Fix-Block-Reward-Halving-Time]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [[SIP2-Increase-Work-Weighting-For-Higher-Fields]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 7289&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [[SIP3-Add-lock-option-to-TxOuts-and-allow-extra-data]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 22157&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [[SIP4-Optional-Input-Value]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED ~134400&lt;br /&gt;
|- &lt;br /&gt;
| 5&lt;br /&gt;
| [[SIP5-Sharding]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 198613&lt;br /&gt;
|- &lt;br /&gt;
| 6&lt;br /&gt;
| [[SIP6-PQC]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| Not sure if passed, but no objections so doing it&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=359</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=359"/>
		<updated>2024-03-09T08:55:42Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uses ==&lt;br /&gt;
The cheap is super important.  Often, we probably won't know the value of data or having a proof on it until much later.&lt;br /&gt;
&lt;br /&gt;
So for example, an app that saved the hash of every picture you took on your phone might be cool.  Most wouldn't matter, but it would be nice if you ever needed to later prove that one of the pictures was not edited after the time of the timestamp.&lt;br /&gt;
&lt;br /&gt;
So images, videos, even video streams (if you can get low level enough into the video stream to decide what data to predictably hash on).  Documents.  Source code.  Things I haven't thought of.&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
* /api/v1/info - get general info about the service&lt;br /&gt;
* /api/v1/publish?hash=XXXX - publish a hash. The hash must be a hex encoded string&lt;br /&gt;
* /api/v1/getproof?transaction_hash=XXXX - check on a transaction hash, which is given as an output to a publish&lt;br /&gt;
&lt;br /&gt;
== Instances ==&lt;br /&gt;
&lt;br /&gt;
We are running an instance that anyone is free to use at [https://timestamp.snowblossom.org/api/v1/info https://timestamp.snowblossom.org/]&lt;br /&gt;
&lt;br /&gt;
[https://timestamp.snowblossom.org/api/v1/info Info]&lt;br /&gt;
[https://timestamp.snowblossom.org/api/v1/publish?hash=c638dd867d7d49fc626e8aed0aef56c1b62da71ff43622d26c0b859e449dfc07 Publish]&lt;br /&gt;
[https://timestamp.snowblossom.org/api/v1/getproof?transaction_hash=b21cd8220f6c900cdbeeac406b7d81c27f3ae11ea04f06f4599d2f867b91896a  GetProof]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
This timestamp service uses [[Channels]] as the metadata storage layer.  Requested timestamp data is encoded into ContentInfo objects that are placed in Snowblossom Channels blocks for the channel the timestamp service is running as.  Then on a schedule, the top channel block is encoded as the tx_extra field in a cryptocurrency transaction.&lt;br /&gt;
&lt;br /&gt;
Once that is done and the resulting cryptocurrency transaction is confirmed into a block, then it is possible for the timestamp service to generate the complete proof all the way from the input data to the block hash of a cryptocurrency block.&lt;br /&gt;
&lt;br /&gt;
The structure of the proof will be a series of hash steps that look like:&lt;br /&gt;
&lt;br /&gt;
M = input data&lt;br /&gt;
&lt;br /&gt;
Each step will define a hash algorithm, a prefix and a postfix string.&lt;br /&gt;
M = hash( prefix + M + postfix )&lt;br /&gt;
&lt;br /&gt;
The final M will be the block hash of a cryptocurrency block that can be verified with a local node or a block explorer.&lt;br /&gt;
&lt;br /&gt;
All strings are hex encoded binary and all hash operations should occur on the binary data.  Put another way, a 64 character long hex string needs to be converted to a 32 byte array before doing any hash operations.&lt;br /&gt;
&lt;br /&gt;
Example proof, which proves that the data_hash of 710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2 was included in Snowblossom Block [https://explorer.snowblossom.org/?search=0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8 0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8].&lt;br /&gt;
&lt;br /&gt;
The number of steps will depend on the depth of the merkle trees for timestamp data going into the channel block, the number of channel blocks until one that is included in the public blockchain and the merkle depth of transactions in the blockchain.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;snow_block&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
  &amp;quot;data_hash&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
  &amp;quot;proofs&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10b4d3bae3e131aa017f0a20b82b7a9edd0fb5faaacf7b9c7877dedf74f00feb3fd0ffc95ff4203271a94db418202220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;2a142e74b7bd6036178436b129bead2095b4a2da0bb0d2012056b2407d8c038a50ad01c546ff7037acd46871fa3a281fbf29ced7e982be2325&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502210099df6b4d399ff3e101c04e41b72e62524752c3d287fafe9dfe31ff7ffc23dda902201c985cd2b85847d27ae1c2247c9cc605c67e0e13792db5fba86f266479505ab4&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8c3bde3e131a2016608011090161a142e74b7bd6036178436b129bead2095b4a2da0bb022202b9d8f6a293e4749ff1de445996ab1982ca0c66d2f9e475a0470281d3e6e82363220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;38e8c3bde3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304602210094127432d522878c481771815f0b08f0dc74c83cf60a2d03dbdb257f3b8619e9022100e591e96ee5cff085bf2ee41b173a6d111c41186dfe4db11b0ee7514520072285&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a7edc4e3e131a2016608011091161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322028cbab24a483b47034af702dbcc8d4e78211bb16901d9bf2669eca3eaf93c06638a7edc4e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100ea4cb42e77918a287ce9bb4c9372dcb56124feba27b210c198a230931b0e4a6c022100dc76a79d68b103d6655d0a0f4cb93c31588b3402c5d360fc697c8bc2400202c7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e796cce3e131a2016608011092161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322075a3a001c4d79659006842c0118ddd7e2a2a5f0b867e2bd3bf02a3ee9695aaed38e796cce3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402202f0a44742b02709b2961bcd805c507527749d9d0d33ca9bf37bc26c4e83ace95022013c775d28823b283e4a9002d2865cffa014deb55133a9f22aaecf9d7a367c06a&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8c0d3e3e131a2016608011093161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220c3383909249d5ae30659888a94dda0397c3247bf4a877c37f4a251ce1861929c38a8c0d3e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100dc8433156e2568c4e43fdfef0d2ce30489980a64adceb5f41f225b3ed341cd720221008769e368c6dffc252198d4c64c298642191f0a7e7a748d516f8031cc57e392c8&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e7e9dae3e131a2016608011094161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32207f1696622d4e1baae075ab6e4a808d32e19a505a75530052dc45c3649e85726438e7e9dae3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3044022003bc9542824945aa70973fb277090546d63f6786e6074eeb34cd13f3c50331b502201f371bc771cb34044e797351ad7554bcab65a2a1c802ab267651a195dcada878&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a993e2e3e131a2016608011095161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322043fb9d34172ff2fe03948270638da9cc412e73ee4cdf472a39afee3d8f3aa6fa38a893e2e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402205d974b41c97dde821edfa37695aeb30958049f4e0847ea119a90197ca99cd30a02204342468b8d9a57c83605011c32e46ceab3ef5af5103f1b9d18e65d82c596cace&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8bce9e3e131a2016608011096161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220393a2c4d3b05def1ad3d34ea6aeff9c37473e8025f368f0c61f0b18ef2f77be038e8bce9e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502204339a508ecafd9b5a63e9aa60afc5cf8e4b7bc5f665065aee026215016c7b654022100ddb053a9bd0d1468a90d06628237265128b2a9987c9fad7cd9bb221246bd77f7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8e6f0e3e131a2016608011097161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200b4ddc38bf088ef57f0cb96a83117257e47e85a9d21064ea65b511f4ee0d37e938a8e6f0e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3045022100c2945652229417e75d99fdffa11846f64be02ba97dc1e13c9cbe0f2c8a11672d022048a9f74f085cfd468b160596a42453a8d38af3da6a7fe402866d4aff679302a7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e88ff8e3e131a2016608011098161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32204cb2dd58bcc6eb9d5118e9b17ee8e700fb1b227cb01447303e6852ffd32d4abb38e88ff8e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450221009d031ce0c5014ead018dda4a2ba65d7fa2fba1d0f65dc10ac02e6a36219a9a3f022026599e551b57196789152ae2fb9a2ae9f9627501359eeb5d66292a6297ee6cfa&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8b9ffe3e131a2016608011099161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200811b8b7383d841b6c878d6f7dc39ee4a5c6b27e5c055fb5d107c0aa2e0846af38a8b9ffe3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502207e79e97cf8cef396e3c6a6fcb08aa98390c44182becc393ff13d756d716f0635022100cffce8f2b911d7c930a02857202d4a850c690e1e760517bfabd64e6e37a007de&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8e286e4e131a201660801109a161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220bfecfcaf4c7bb13c210dcbd643791a988a97f3be42d7453a8fa868e8ac1800be38e8e286e4e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450220571a29f8ee83901f537fd013c216390dd07106dfa0d5fa783c52887cbeb6d3c1022100ef805fef432440f5fafbc9d897bcaab79ede7c57e032515755f9b1b2ff909ea1&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;080122380a149adb8a3c67660a5ebc8db83f69cf525783f3d17d12204c6c0e011ed421cbda86dceea00c51248516cdfe838f13abcf509d61a186bed02a1b08a0b4e31712149adb8a3c67660a5ebc8db83f69cf525783f3d17d322908011225080112210284bb49bd3f7ddabc1dc8dc257c74e995bcfa62493215710a1f885fed95af127a40d7065220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow tx has channel block hash&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;9468a809e1d7815d0683541931268e9facc17e45ff4a7eabbce7ffcb11a2c997&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle right&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;4e50cf9f67d76d62d14c1217f279567fa1c54b926315df596b71de929c051fde&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle left&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;2c89f35817fc051f865bda04000000020004aeb20000018e1c869322000000090000000000131e991e09fa2694657603c9d26d5578fc582f422c5b71bb9bd337&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;483d59f8110c4385124fe6750fade03b395eb4a5dda12788b8253ce15085429c00000000002917a199dd3484bc37b0dae90b65578600b4a75e18b0f48429266100000000000002a100000003&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;78d974a450cdccd36ab7d61bbb892142&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a4e09416b53b7d140750c6e8d93c347f&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;59d76d65c58f64591a53b69cac1d04da&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;134b6dae2ca7d24a71e9b907c2a1c671&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a3ee7f5aacd86a286ad95d17def4b751&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;888ab462b300217ca79c19fafffc614d&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;channel_block_hash&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
  &amp;quot;transaction_hash&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
  &amp;quot;snow_transaction&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
A user of the service can either request and save proofs (which stand on their own with no additional metadata required) or the user can have their own snowblossom channels node join the timestamp service channel and replicate the metadata.  That way, their own node could always generate proofs as needed.&lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom (done as of 2024.03.04)&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;br /&gt;
&lt;br /&gt;
For such a service to be really useful, it needs to scale and continue to be inexpensive.&lt;br /&gt;
&lt;br /&gt;
Here is an example architecture that would work:&lt;br /&gt;
&lt;br /&gt;
API endpoint goes to a request router.  The request router knows which backends (each running their own channel) are availible.&lt;br /&gt;
Request router sends timestamp requests to an available backend.&lt;br /&gt;
Request router sends proof requests to the appropriate backend for the chain the transaction is on.&lt;br /&gt;
&lt;br /&gt;
The backend nodes operate on channels each with an active-active configuration where any of the nodes on a channel could accept timestamp requests, service proof lookups or generate blocks.  There would have to be a little coordination to avoid creating blocks close in time and confusing the channel's mempool.  Same for deciding when to save state to the upstream timestamp service.&lt;br /&gt;
&lt;br /&gt;
So imagine the backend nodes as pairs, each pair servicing one channel.  Then the occasionally save state to an upstream timestamp service.  Add more pairs running channels as needed for the load.&lt;br /&gt;
&lt;br /&gt;
The upstream master timestamp service would occasionally save to public blockchains.&lt;br /&gt;
&lt;br /&gt;
With this model, we can extend to a very high request rate while still only saving a transaction on a public chain every few blocks.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=358</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=358"/>
		<updated>2024-03-09T08:53:30Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uses ==&lt;br /&gt;
The cheap is super important.  Often, we probably won't know the value of data or having a proof on it until much later.&lt;br /&gt;
&lt;br /&gt;
So for example, an app that saved the hash of every picture you took on your phone might be cool.  Most wouldn't matter, but it would be nice if you ever needed to later prove that one of the pictures was not edited after the time of the timestamp.&lt;br /&gt;
&lt;br /&gt;
So images, videos, even video streams (if you can get low level enough into the video stream to decide what data to predictably hash on).  Documents.  Source code.  Things I haven't thought of.&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
* /api/v1/info - get general info about the service&lt;br /&gt;
* /api/v1/publish?hash=XXXX - publish a hash. The hash must be a hex encoded string&lt;br /&gt;
* /api/v1/getproof?transaction_hash=XXXX - check on a transaction hash, which is given as an output to a publish&lt;br /&gt;
&lt;br /&gt;
== Instances ==&lt;br /&gt;
&lt;br /&gt;
We are running an instance that anyone is free to use at [https://timestamp.snowblossom.org/api/v1/info https://timestamp.snowblossom.org/]&lt;br /&gt;
&lt;br /&gt;
[https://timestamp.snowblossom.org/api/v1/info Info]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
This timestamp service uses [[Channels]] as the metadata storage layer.  Requested timestamp data is encoded into ContentInfo objects that are placed in Snowblossom Channels blocks for the channel the timestamp service is running as.  Then on a schedule, the top channel block is encoded as the tx_extra field in a cryptocurrency transaction.&lt;br /&gt;
&lt;br /&gt;
Once that is done and the resulting cryptocurrency transaction is confirmed into a block, then it is possible for the timestamp service to generate the complete proof all the way from the input data to the block hash of a cryptocurrency block.&lt;br /&gt;
&lt;br /&gt;
The structure of the proof will be a series of hash steps that look like:&lt;br /&gt;
&lt;br /&gt;
M = input data&lt;br /&gt;
&lt;br /&gt;
Each step will define a hash algorithm, a prefix and a postfix string.&lt;br /&gt;
M = hash( prefix + M + postfix )&lt;br /&gt;
&lt;br /&gt;
The final M will be the block hash of a cryptocurrency block that can be verified with a local node or a block explorer.&lt;br /&gt;
&lt;br /&gt;
All strings are hex encoded binary and all hash operations should occur on the binary data.  Put another way, a 64 character long hex string needs to be converted to a 32 byte array before doing any hash operations.&lt;br /&gt;
&lt;br /&gt;
Example proof, which proves that the data_hash of 710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2 was included in Snowblossom Block [https://explorer.snowblossom.org/?search=0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8 0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8].&lt;br /&gt;
&lt;br /&gt;
The number of steps will depend on the depth of the merkle trees for timestamp data going into the channel block, the number of channel blocks until one that is included in the public blockchain and the merkle depth of transactions in the blockchain.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;snow_block&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
  &amp;quot;data_hash&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
  &amp;quot;proofs&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10b4d3bae3e131aa017f0a20b82b7a9edd0fb5faaacf7b9c7877dedf74f00feb3fd0ffc95ff4203271a94db418202220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;2a142e74b7bd6036178436b129bead2095b4a2da0bb0d2012056b2407d8c038a50ad01c546ff7037acd46871fa3a281fbf29ced7e982be2325&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502210099df6b4d399ff3e101c04e41b72e62524752c3d287fafe9dfe31ff7ffc23dda902201c985cd2b85847d27ae1c2247c9cc605c67e0e13792db5fba86f266479505ab4&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8c3bde3e131a2016608011090161a142e74b7bd6036178436b129bead2095b4a2da0bb022202b9d8f6a293e4749ff1de445996ab1982ca0c66d2f9e475a0470281d3e6e82363220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;38e8c3bde3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304602210094127432d522878c481771815f0b08f0dc74c83cf60a2d03dbdb257f3b8619e9022100e591e96ee5cff085bf2ee41b173a6d111c41186dfe4db11b0ee7514520072285&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a7edc4e3e131a2016608011091161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322028cbab24a483b47034af702dbcc8d4e78211bb16901d9bf2669eca3eaf93c06638a7edc4e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100ea4cb42e77918a287ce9bb4c9372dcb56124feba27b210c198a230931b0e4a6c022100dc76a79d68b103d6655d0a0f4cb93c31588b3402c5d360fc697c8bc2400202c7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e796cce3e131a2016608011092161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322075a3a001c4d79659006842c0118ddd7e2a2a5f0b867e2bd3bf02a3ee9695aaed38e796cce3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402202f0a44742b02709b2961bcd805c507527749d9d0d33ca9bf37bc26c4e83ace95022013c775d28823b283e4a9002d2865cffa014deb55133a9f22aaecf9d7a367c06a&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8c0d3e3e131a2016608011093161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220c3383909249d5ae30659888a94dda0397c3247bf4a877c37f4a251ce1861929c38a8c0d3e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100dc8433156e2568c4e43fdfef0d2ce30489980a64adceb5f41f225b3ed341cd720221008769e368c6dffc252198d4c64c298642191f0a7e7a748d516f8031cc57e392c8&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e7e9dae3e131a2016608011094161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32207f1696622d4e1baae075ab6e4a808d32e19a505a75530052dc45c3649e85726438e7e9dae3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3044022003bc9542824945aa70973fb277090546d63f6786e6074eeb34cd13f3c50331b502201f371bc771cb34044e797351ad7554bcab65a2a1c802ab267651a195dcada878&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a993e2e3e131a2016608011095161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322043fb9d34172ff2fe03948270638da9cc412e73ee4cdf472a39afee3d8f3aa6fa38a893e2e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402205d974b41c97dde821edfa37695aeb30958049f4e0847ea119a90197ca99cd30a02204342468b8d9a57c83605011c32e46ceab3ef5af5103f1b9d18e65d82c596cace&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8bce9e3e131a2016608011096161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220393a2c4d3b05def1ad3d34ea6aeff9c37473e8025f368f0c61f0b18ef2f77be038e8bce9e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502204339a508ecafd9b5a63e9aa60afc5cf8e4b7bc5f665065aee026215016c7b654022100ddb053a9bd0d1468a90d06628237265128b2a9987c9fad7cd9bb221246bd77f7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8e6f0e3e131a2016608011097161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200b4ddc38bf088ef57f0cb96a83117257e47e85a9d21064ea65b511f4ee0d37e938a8e6f0e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3045022100c2945652229417e75d99fdffa11846f64be02ba97dc1e13c9cbe0f2c8a11672d022048a9f74f085cfd468b160596a42453a8d38af3da6a7fe402866d4aff679302a7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e88ff8e3e131a2016608011098161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32204cb2dd58bcc6eb9d5118e9b17ee8e700fb1b227cb01447303e6852ffd32d4abb38e88ff8e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450221009d031ce0c5014ead018dda4a2ba65d7fa2fba1d0f65dc10ac02e6a36219a9a3f022026599e551b57196789152ae2fb9a2ae9f9627501359eeb5d66292a6297ee6cfa&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8b9ffe3e131a2016608011099161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200811b8b7383d841b6c878d6f7dc39ee4a5c6b27e5c055fb5d107c0aa2e0846af38a8b9ffe3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502207e79e97cf8cef396e3c6a6fcb08aa98390c44182becc393ff13d756d716f0635022100cffce8f2b911d7c930a02857202d4a850c690e1e760517bfabd64e6e37a007de&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8e286e4e131a201660801109a161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220bfecfcaf4c7bb13c210dcbd643791a988a97f3be42d7453a8fa868e8ac1800be38e8e286e4e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450220571a29f8ee83901f537fd013c216390dd07106dfa0d5fa783c52887cbeb6d3c1022100ef805fef432440f5fafbc9d897bcaab79ede7c57e032515755f9b1b2ff909ea1&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;080122380a149adb8a3c67660a5ebc8db83f69cf525783f3d17d12204c6c0e011ed421cbda86dceea00c51248516cdfe838f13abcf509d61a186bed02a1b08a0b4e31712149adb8a3c67660a5ebc8db83f69cf525783f3d17d322908011225080112210284bb49bd3f7ddabc1dc8dc257c74e995bcfa62493215710a1f885fed95af127a40d7065220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow tx has channel block hash&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;9468a809e1d7815d0683541931268e9facc17e45ff4a7eabbce7ffcb11a2c997&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle right&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;4e50cf9f67d76d62d14c1217f279567fa1c54b926315df596b71de929c051fde&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle left&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;2c89f35817fc051f865bda04000000020004aeb20000018e1c869322000000090000000000131e991e09fa2694657603c9d26d5578fc582f422c5b71bb9bd337&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;483d59f8110c4385124fe6750fade03b395eb4a5dda12788b8253ce15085429c00000000002917a199dd3484bc37b0dae90b65578600b4a75e18b0f48429266100000000000002a100000003&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;78d974a450cdccd36ab7d61bbb892142&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a4e09416b53b7d140750c6e8d93c347f&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;59d76d65c58f64591a53b69cac1d04da&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;134b6dae2ca7d24a71e9b907c2a1c671&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a3ee7f5aacd86a286ad95d17def4b751&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;888ab462b300217ca79c19fafffc614d&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;channel_block_hash&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
  &amp;quot;transaction_hash&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
  &amp;quot;snow_transaction&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
A user of the service can either request and save proofs (which stand on their own with no additional metadata required) or the user can have their own snowblossom channels node join the timestamp service channel and replicate the metadata.  That way, their own node could always generate proofs as needed.&lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom (done as of 2024.03.04)&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;br /&gt;
&lt;br /&gt;
For such a service to be really useful, it needs to scale and continue to be inexpensive.&lt;br /&gt;
&lt;br /&gt;
Here is an example architecture that would work:&lt;br /&gt;
&lt;br /&gt;
API endpoint goes to a request router.  The request router knows which backends (each running their own channel) are availible.&lt;br /&gt;
Request router sends timestamp requests to an available backend.&lt;br /&gt;
Request router sends proof requests to the appropriate backend for the chain the transaction is on.&lt;br /&gt;
&lt;br /&gt;
The backend nodes operate on channels each with an active-active configuration where any of the nodes on a channel could accept timestamp requests, service proof lookups or generate blocks.  There would have to be a little coordination to avoid creating blocks close in time and confusing the channel's mempool.  Same for deciding when to save state to the upstream timestamp service.&lt;br /&gt;
&lt;br /&gt;
So imagine the backend nodes as pairs, each pair servicing one channel.  Then the occasionally save state to an upstream timestamp service.  Add more pairs running channels as needed for the load.&lt;br /&gt;
&lt;br /&gt;
The upstream master timestamp service would occasionally save to public blockchains.&lt;br /&gt;
&lt;br /&gt;
With this model, we can extend to a very high request rate while still only saving a transaction on a public chain every few blocks.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=357</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=357"/>
		<updated>2024-03-09T08:52:44Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uses ==&lt;br /&gt;
The cheap is super important.  Often, we probably won't know the value of data or having a proof on it until much later.&lt;br /&gt;
&lt;br /&gt;
So for example, an app that saved the hash of every picture you took on your phone might be cool.  Most wouldn't matter, but it would be nice if you ever needed to later prove that one of the pictures was not edited after the time of the timestamp.&lt;br /&gt;
&lt;br /&gt;
So images, videos, even video streams (if you can get low level enough into the video stream to decide what data to predictably hash on).  Documents.  Source code.  Things I haven't thought of.&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
* /api/v1/info - get general info about the service&lt;br /&gt;
* /api/v1/publish?hash=XXXX - publish a hash. The hash must be a hex encoded string&lt;br /&gt;
* /api/v1/getproof?transaction_hash=XXXX - check on a transaction hash, which is given as an output to a publish&lt;br /&gt;
&lt;br /&gt;
== Instances ==&lt;br /&gt;
&lt;br /&gt;
We are running an instance that anyone is free to use at https://timestamp.snowblossom.org/&lt;br /&gt;
&lt;br /&gt;
[https://timestamp.snowblossom.org/api/v1/info Info]&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
This timestamp service uses [[Channels]] as the metadata storage layer.  Requested timestamp data is encoded into ContentInfo objects that are placed in Snowblossom Channels blocks for the channel the timestamp service is running as.  Then on a schedule, the top channel block is encoded as the tx_extra field in a cryptocurrency transaction.&lt;br /&gt;
&lt;br /&gt;
Once that is done and the resulting cryptocurrency transaction is confirmed into a block, then it is possible for the timestamp service to generate the complete proof all the way from the input data to the block hash of a cryptocurrency block.&lt;br /&gt;
&lt;br /&gt;
The structure of the proof will be a series of hash steps that look like:&lt;br /&gt;
&lt;br /&gt;
M = input data&lt;br /&gt;
&lt;br /&gt;
Each step will define a hash algorithm, a prefix and a postfix string.&lt;br /&gt;
M = hash( prefix + M + postfix )&lt;br /&gt;
&lt;br /&gt;
The final M will be the block hash of a cryptocurrency block that can be verified with a local node or a block explorer.&lt;br /&gt;
&lt;br /&gt;
All strings are hex encoded binary and all hash operations should occur on the binary data.  Put another way, a 64 character long hex string needs to be converted to a 32 byte array before doing any hash operations.&lt;br /&gt;
&lt;br /&gt;
Example proof, which proves that the data_hash of 710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2 was included in Snowblossom Block [https://explorer.snowblossom.org/?search=0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8 0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8].&lt;br /&gt;
&lt;br /&gt;
The number of steps will depend on the depth of the merkle trees for timestamp data going into the channel block, the number of channel blocks until one that is included in the public blockchain and the merkle depth of transactions in the blockchain.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;snow_block&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
  &amp;quot;data_hash&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
  &amp;quot;proofs&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10b4d3bae3e131aa017f0a20b82b7a9edd0fb5faaacf7b9c7877dedf74f00feb3fd0ffc95ff4203271a94db418202220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;2a142e74b7bd6036178436b129bead2095b4a2da0bb0d2012056b2407d8c038a50ad01c546ff7037acd46871fa3a281fbf29ced7e982be2325&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502210099df6b4d399ff3e101c04e41b72e62524752c3d287fafe9dfe31ff7ffc23dda902201c985cd2b85847d27ae1c2247c9cc605c67e0e13792db5fba86f266479505ab4&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8c3bde3e131a2016608011090161a142e74b7bd6036178436b129bead2095b4a2da0bb022202b9d8f6a293e4749ff1de445996ab1982ca0c66d2f9e475a0470281d3e6e82363220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;38e8c3bde3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304602210094127432d522878c481771815f0b08f0dc74c83cf60a2d03dbdb257f3b8619e9022100e591e96ee5cff085bf2ee41b173a6d111c41186dfe4db11b0ee7514520072285&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a7edc4e3e131a2016608011091161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322028cbab24a483b47034af702dbcc8d4e78211bb16901d9bf2669eca3eaf93c06638a7edc4e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100ea4cb42e77918a287ce9bb4c9372dcb56124feba27b210c198a230931b0e4a6c022100dc76a79d68b103d6655d0a0f4cb93c31588b3402c5d360fc697c8bc2400202c7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e796cce3e131a2016608011092161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322075a3a001c4d79659006842c0118ddd7e2a2a5f0b867e2bd3bf02a3ee9695aaed38e796cce3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402202f0a44742b02709b2961bcd805c507527749d9d0d33ca9bf37bc26c4e83ace95022013c775d28823b283e4a9002d2865cffa014deb55133a9f22aaecf9d7a367c06a&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8c0d3e3e131a2016608011093161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220c3383909249d5ae30659888a94dda0397c3247bf4a877c37f4a251ce1861929c38a8c0d3e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100dc8433156e2568c4e43fdfef0d2ce30489980a64adceb5f41f225b3ed341cd720221008769e368c6dffc252198d4c64c298642191f0a7e7a748d516f8031cc57e392c8&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e7e9dae3e131a2016608011094161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32207f1696622d4e1baae075ab6e4a808d32e19a505a75530052dc45c3649e85726438e7e9dae3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3044022003bc9542824945aa70973fb277090546d63f6786e6074eeb34cd13f3c50331b502201f371bc771cb34044e797351ad7554bcab65a2a1c802ab267651a195dcada878&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a993e2e3e131a2016608011095161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322043fb9d34172ff2fe03948270638da9cc412e73ee4cdf472a39afee3d8f3aa6fa38a893e2e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402205d974b41c97dde821edfa37695aeb30958049f4e0847ea119a90197ca99cd30a02204342468b8d9a57c83605011c32e46ceab3ef5af5103f1b9d18e65d82c596cace&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8bce9e3e131a2016608011096161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220393a2c4d3b05def1ad3d34ea6aeff9c37473e8025f368f0c61f0b18ef2f77be038e8bce9e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502204339a508ecafd9b5a63e9aa60afc5cf8e4b7bc5f665065aee026215016c7b654022100ddb053a9bd0d1468a90d06628237265128b2a9987c9fad7cd9bb221246bd77f7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8e6f0e3e131a2016608011097161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200b4ddc38bf088ef57f0cb96a83117257e47e85a9d21064ea65b511f4ee0d37e938a8e6f0e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3045022100c2945652229417e75d99fdffa11846f64be02ba97dc1e13c9cbe0f2c8a11672d022048a9f74f085cfd468b160596a42453a8d38af3da6a7fe402866d4aff679302a7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e88ff8e3e131a2016608011098161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32204cb2dd58bcc6eb9d5118e9b17ee8e700fb1b227cb01447303e6852ffd32d4abb38e88ff8e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450221009d031ce0c5014ead018dda4a2ba65d7fa2fba1d0f65dc10ac02e6a36219a9a3f022026599e551b57196789152ae2fb9a2ae9f9627501359eeb5d66292a6297ee6cfa&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8b9ffe3e131a2016608011099161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200811b8b7383d841b6c878d6f7dc39ee4a5c6b27e5c055fb5d107c0aa2e0846af38a8b9ffe3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502207e79e97cf8cef396e3c6a6fcb08aa98390c44182becc393ff13d756d716f0635022100cffce8f2b911d7c930a02857202d4a850c690e1e760517bfabd64e6e37a007de&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8e286e4e131a201660801109a161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220bfecfcaf4c7bb13c210dcbd643791a988a97f3be42d7453a8fa868e8ac1800be38e8e286e4e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450220571a29f8ee83901f537fd013c216390dd07106dfa0d5fa783c52887cbeb6d3c1022100ef805fef432440f5fafbc9d897bcaab79ede7c57e032515755f9b1b2ff909ea1&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;080122380a149adb8a3c67660a5ebc8db83f69cf525783f3d17d12204c6c0e011ed421cbda86dceea00c51248516cdfe838f13abcf509d61a186bed02a1b08a0b4e31712149adb8a3c67660a5ebc8db83f69cf525783f3d17d322908011225080112210284bb49bd3f7ddabc1dc8dc257c74e995bcfa62493215710a1f885fed95af127a40d7065220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow tx has channel block hash&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;9468a809e1d7815d0683541931268e9facc17e45ff4a7eabbce7ffcb11a2c997&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle right&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;4e50cf9f67d76d62d14c1217f279567fa1c54b926315df596b71de929c051fde&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle left&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;2c89f35817fc051f865bda04000000020004aeb20000018e1c869322000000090000000000131e991e09fa2694657603c9d26d5578fc582f422c5b71bb9bd337&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;483d59f8110c4385124fe6750fade03b395eb4a5dda12788b8253ce15085429c00000000002917a199dd3484bc37b0dae90b65578600b4a75e18b0f48429266100000000000002a100000003&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;78d974a450cdccd36ab7d61bbb892142&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a4e09416b53b7d140750c6e8d93c347f&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;59d76d65c58f64591a53b69cac1d04da&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;134b6dae2ca7d24a71e9b907c2a1c671&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a3ee7f5aacd86a286ad95d17def4b751&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;888ab462b300217ca79c19fafffc614d&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;channel_block_hash&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
  &amp;quot;transaction_hash&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
  &amp;quot;snow_transaction&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
A user of the service can either request and save proofs (which stand on their own with no additional metadata required) or the user can have their own snowblossom channels node join the timestamp service channel and replicate the metadata.  That way, their own node could always generate proofs as needed.&lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom (done as of 2024.03.04)&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;br /&gt;
&lt;br /&gt;
For such a service to be really useful, it needs to scale and continue to be inexpensive.&lt;br /&gt;
&lt;br /&gt;
Here is an example architecture that would work:&lt;br /&gt;
&lt;br /&gt;
API endpoint goes to a request router.  The request router knows which backends (each running their own channel) are availible.&lt;br /&gt;
Request router sends timestamp requests to an available backend.&lt;br /&gt;
Request router sends proof requests to the appropriate backend for the chain the transaction is on.&lt;br /&gt;
&lt;br /&gt;
The backend nodes operate on channels each with an active-active configuration where any of the nodes on a channel could accept timestamp requests, service proof lookups or generate blocks.  There would have to be a little coordination to avoid creating blocks close in time and confusing the channel's mempool.  Same for deciding when to save state to the upstream timestamp service.&lt;br /&gt;
&lt;br /&gt;
So imagine the backend nodes as pairs, each pair servicing one channel.  Then the occasionally save state to an upstream timestamp service.  Add more pairs running channels as needed for the load.&lt;br /&gt;
&lt;br /&gt;
The upstream master timestamp service would occasionally save to public blockchains.&lt;br /&gt;
&lt;br /&gt;
With this model, we can extend to a very high request rate while still only saving a transaction on a public chain every few blocks.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=356</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=356"/>
		<updated>2024-03-08T21:44:27Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uses ==&lt;br /&gt;
The cheap is super important.  Often, we probably won't know the value of data or having a proof on it until much later.&lt;br /&gt;
&lt;br /&gt;
So for example, an app that saved the hash of every picture you took on your phone might be cool.  Most wouldn't matter, but it would be nice if you ever needed to later prove that one of the pictures was not edited after the time of the timestamp.&lt;br /&gt;
&lt;br /&gt;
So images, videos, even video streams (if you can get low level enough into the video stream to decide what data to predictably hash on).  Documents.  Source code.  Things I haven't thought of.&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
This timestamp service uses [[Channels]] as the metadata storage layer.  Requested timestamp data is encoded into ContentInfo objects that are placed in Snowblossom Channels blocks for the channel the timestamp service is running as.  Then on a schedule, the top channel block is encoded as the tx_extra field in a cryptocurrency transaction.&lt;br /&gt;
&lt;br /&gt;
Once that is done and the resulting cryptocurrency transaction is confirmed into a block, then it is possible for the timestamp service to generate the complete proof all the way from the input data to the block hash of a cryptocurrency block.&lt;br /&gt;
&lt;br /&gt;
The structure of the proof will be a series of hash steps that look like:&lt;br /&gt;
&lt;br /&gt;
M = input data&lt;br /&gt;
&lt;br /&gt;
Each step will define a hash algorithm, a prefix and a postfix string.&lt;br /&gt;
M = hash( prefix + M + postfix )&lt;br /&gt;
&lt;br /&gt;
The final M will be the block hash of a cryptocurrency block that can be verified with a local node or a block explorer.&lt;br /&gt;
&lt;br /&gt;
All strings are hex encoded binary and all hash operations should occur on the binary data.  Put another way, a 64 character long hex string needs to be converted to a 32 byte array before doing any hash operations.&lt;br /&gt;
&lt;br /&gt;
Example proof, which proves that the data_hash of 710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2 was included in Snowblossom Block [https://explorer.snowblossom.org/?search=0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8 0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8].&lt;br /&gt;
&lt;br /&gt;
The number of steps will depend on the depth of the merkle trees for timestamp data going into the channel block, the number of channel blocks until one that is included in the public blockchain and the merkle depth of transactions in the blockchain.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;snow_block&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
  &amp;quot;data_hash&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
  &amp;quot;proofs&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10b4d3bae3e131aa017f0a20b82b7a9edd0fb5faaacf7b9c7877dedf74f00feb3fd0ffc95ff4203271a94db418202220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;2a142e74b7bd6036178436b129bead2095b4a2da0bb0d2012056b2407d8c038a50ad01c546ff7037acd46871fa3a281fbf29ced7e982be2325&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502210099df6b4d399ff3e101c04e41b72e62524752c3d287fafe9dfe31ff7ffc23dda902201c985cd2b85847d27ae1c2247c9cc605c67e0e13792db5fba86f266479505ab4&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8c3bde3e131a2016608011090161a142e74b7bd6036178436b129bead2095b4a2da0bb022202b9d8f6a293e4749ff1de445996ab1982ca0c66d2f9e475a0470281d3e6e82363220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;38e8c3bde3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304602210094127432d522878c481771815f0b08f0dc74c83cf60a2d03dbdb257f3b8619e9022100e591e96ee5cff085bf2ee41b173a6d111c41186dfe4db11b0ee7514520072285&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a7edc4e3e131a2016608011091161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322028cbab24a483b47034af702dbcc8d4e78211bb16901d9bf2669eca3eaf93c06638a7edc4e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100ea4cb42e77918a287ce9bb4c9372dcb56124feba27b210c198a230931b0e4a6c022100dc76a79d68b103d6655d0a0f4cb93c31588b3402c5d360fc697c8bc2400202c7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e796cce3e131a2016608011092161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322075a3a001c4d79659006842c0118ddd7e2a2a5f0b867e2bd3bf02a3ee9695aaed38e796cce3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402202f0a44742b02709b2961bcd805c507527749d9d0d33ca9bf37bc26c4e83ace95022013c775d28823b283e4a9002d2865cffa014deb55133a9f22aaecf9d7a367c06a&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8c0d3e3e131a2016608011093161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220c3383909249d5ae30659888a94dda0397c3247bf4a877c37f4a251ce1861929c38a8c0d3e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100dc8433156e2568c4e43fdfef0d2ce30489980a64adceb5f41f225b3ed341cd720221008769e368c6dffc252198d4c64c298642191f0a7e7a748d516f8031cc57e392c8&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e7e9dae3e131a2016608011094161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32207f1696622d4e1baae075ab6e4a808d32e19a505a75530052dc45c3649e85726438e7e9dae3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3044022003bc9542824945aa70973fb277090546d63f6786e6074eeb34cd13f3c50331b502201f371bc771cb34044e797351ad7554bcab65a2a1c802ab267651a195dcada878&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a993e2e3e131a2016608011095161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322043fb9d34172ff2fe03948270638da9cc412e73ee4cdf472a39afee3d8f3aa6fa38a893e2e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402205d974b41c97dde821edfa37695aeb30958049f4e0847ea119a90197ca99cd30a02204342468b8d9a57c83605011c32e46ceab3ef5af5103f1b9d18e65d82c596cace&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8bce9e3e131a2016608011096161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220393a2c4d3b05def1ad3d34ea6aeff9c37473e8025f368f0c61f0b18ef2f77be038e8bce9e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502204339a508ecafd9b5a63e9aa60afc5cf8e4b7bc5f665065aee026215016c7b654022100ddb053a9bd0d1468a90d06628237265128b2a9987c9fad7cd9bb221246bd77f7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8e6f0e3e131a2016608011097161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200b4ddc38bf088ef57f0cb96a83117257e47e85a9d21064ea65b511f4ee0d37e938a8e6f0e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3045022100c2945652229417e75d99fdffa11846f64be02ba97dc1e13c9cbe0f2c8a11672d022048a9f74f085cfd468b160596a42453a8d38af3da6a7fe402866d4aff679302a7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e88ff8e3e131a2016608011098161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32204cb2dd58bcc6eb9d5118e9b17ee8e700fb1b227cb01447303e6852ffd32d4abb38e88ff8e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450221009d031ce0c5014ead018dda4a2ba65d7fa2fba1d0f65dc10ac02e6a36219a9a3f022026599e551b57196789152ae2fb9a2ae9f9627501359eeb5d66292a6297ee6cfa&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8b9ffe3e131a2016608011099161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200811b8b7383d841b6c878d6f7dc39ee4a5c6b27e5c055fb5d107c0aa2e0846af38a8b9ffe3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502207e79e97cf8cef396e3c6a6fcb08aa98390c44182becc393ff13d756d716f0635022100cffce8f2b911d7c930a02857202d4a850c690e1e760517bfabd64e6e37a007de&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8e286e4e131a201660801109a161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220bfecfcaf4c7bb13c210dcbd643791a988a97f3be42d7453a8fa868e8ac1800be38e8e286e4e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450220571a29f8ee83901f537fd013c216390dd07106dfa0d5fa783c52887cbeb6d3c1022100ef805fef432440f5fafbc9d897bcaab79ede7c57e032515755f9b1b2ff909ea1&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;080122380a149adb8a3c67660a5ebc8db83f69cf525783f3d17d12204c6c0e011ed421cbda86dceea00c51248516cdfe838f13abcf509d61a186bed02a1b08a0b4e31712149adb8a3c67660a5ebc8db83f69cf525783f3d17d322908011225080112210284bb49bd3f7ddabc1dc8dc257c74e995bcfa62493215710a1f885fed95af127a40d7065220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow tx has channel block hash&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;9468a809e1d7815d0683541931268e9facc17e45ff4a7eabbce7ffcb11a2c997&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle right&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;4e50cf9f67d76d62d14c1217f279567fa1c54b926315df596b71de929c051fde&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle left&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;2c89f35817fc051f865bda04000000020004aeb20000018e1c869322000000090000000000131e991e09fa2694657603c9d26d5578fc582f422c5b71bb9bd337&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;483d59f8110c4385124fe6750fade03b395eb4a5dda12788b8253ce15085429c00000000002917a199dd3484bc37b0dae90b65578600b4a75e18b0f48429266100000000000002a100000003&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;78d974a450cdccd36ab7d61bbb892142&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a4e09416b53b7d140750c6e8d93c347f&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;59d76d65c58f64591a53b69cac1d04da&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;134b6dae2ca7d24a71e9b907c2a1c671&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a3ee7f5aacd86a286ad95d17def4b751&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;888ab462b300217ca79c19fafffc614d&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;channel_block_hash&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
  &amp;quot;transaction_hash&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
  &amp;quot;snow_transaction&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
A user of the service can either request and save proofs (which stand on their own with no additional metadata required) or the user can have their own snowblossom channels node join the timestamp service channel and replicate the metadata.  That way, their own node could always generate proofs as needed.&lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom (done as of 2024.03.04)&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;br /&gt;
&lt;br /&gt;
For such a service to be really useful, it needs to scale and continue to be inexpensive.&lt;br /&gt;
&lt;br /&gt;
Here is an example architecture that would work:&lt;br /&gt;
&lt;br /&gt;
API endpoint goes to a request router.  The request router knows which backends (each running their own channel) are availible.&lt;br /&gt;
Request router sends timestamp requests to an available backend.&lt;br /&gt;
Request router sends proof requests to the appropriate backend for the chain the transaction is on.&lt;br /&gt;
&lt;br /&gt;
The backend nodes operate on channels each with an active-active configuration where any of the nodes on a channel could accept timestamp requests, service proof lookups or generate blocks.  There would have to be a little coordination to avoid creating blocks close in time and confusing the channel's mempool.  Same for deciding when to save state to the upstream timestamp service.&lt;br /&gt;
&lt;br /&gt;
So imagine the backend nodes as pairs, each pair servicing one channel.  Then the occasionally save state to an upstream timestamp service.  Add more pairs running channels as needed for the load.&lt;br /&gt;
&lt;br /&gt;
The upstream master timestamp service would occasionally save to public blockchains.&lt;br /&gt;
&lt;br /&gt;
With this model, we can extend to a very high request rate while still only saving a transaction on a public chain every few blocks.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=355</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=355"/>
		<updated>2024-03-08T21:43:09Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* Scaling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uses ==&lt;br /&gt;
The cheap is super important.  Often, we probably won't know the value of data or having a proof on it until much later.&lt;br /&gt;
&lt;br /&gt;
So for example, an app that saved the hash of every picture you took on your phone might be cool.  Most wouldn't matter, but it would be nice if you ever needed to later prove that one of the pictures was not edited after the time of the timestamp.&lt;br /&gt;
&lt;br /&gt;
So images, videos, even video streams (if you can get low level enough into the video stream to decide what data to predictably hash on).  Documents.  Source code.  Things I haven't thought of.&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
This timestamp service uses [[Channels]] as the metadata storage layer.  Requested timestamp data is encoded into ContentInfo objects that are placed in Snowblossom Channels blocks for the channel the timestamp service is running as.  Then on a schedule, the top channel block is encoded as the tx_extra field in a cryptocurrency transaction.&lt;br /&gt;
&lt;br /&gt;
Once that is done and the resulting cryptocurrency transaction is confirmed into a block, then it is possible for the timestamp service to generate the complete proof all the way from the input data to the block hash of a cryptocurrency block.&lt;br /&gt;
&lt;br /&gt;
The structure of the proof will be a series of hash steps that look like:&lt;br /&gt;
&lt;br /&gt;
M = input data&lt;br /&gt;
&lt;br /&gt;
Each step will define a hash algorithm, a prefix and a postfix string.&lt;br /&gt;
M = hash( prefix + M + postfix )&lt;br /&gt;
&lt;br /&gt;
The final M will be the block hash of a cryptocurrency block that can be verified with a local node or a block explorer.&lt;br /&gt;
&lt;br /&gt;
All strings are hex encoded binary and all hash operations should occur on the binary data.  Put another way, a 64 character long hex string needs to be converted to a 32 byte array before doing any hash operations.&lt;br /&gt;
&lt;br /&gt;
Example proof, which proves that the data_hash of 710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2 was included in Snowblossom Block [https://explorer.snowblossom.org/?search=0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8 0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8].&lt;br /&gt;
&lt;br /&gt;
The number of steps will depend on the depth of the merkle trees for timestamp data going into the channel block, the number of channel blocks until one that is included in the public blockchain and the merkle depth of transactions in the blockchain.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;snow_block&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
  &amp;quot;data_hash&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
  &amp;quot;proofs&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10b4d3bae3e131aa017f0a20b82b7a9edd0fb5faaacf7b9c7877dedf74f00feb3fd0ffc95ff4203271a94db418202220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;2a142e74b7bd6036178436b129bead2095b4a2da0bb0d2012056b2407d8c038a50ad01c546ff7037acd46871fa3a281fbf29ced7e982be2325&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502210099df6b4d399ff3e101c04e41b72e62524752c3d287fafe9dfe31ff7ffc23dda902201c985cd2b85847d27ae1c2247c9cc605c67e0e13792db5fba86f266479505ab4&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8c3bde3e131a2016608011090161a142e74b7bd6036178436b129bead2095b4a2da0bb022202b9d8f6a293e4749ff1de445996ab1982ca0c66d2f9e475a0470281d3e6e82363220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;38e8c3bde3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304602210094127432d522878c481771815f0b08f0dc74c83cf60a2d03dbdb257f3b8619e9022100e591e96ee5cff085bf2ee41b173a6d111c41186dfe4db11b0ee7514520072285&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a7edc4e3e131a2016608011091161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322028cbab24a483b47034af702dbcc8d4e78211bb16901d9bf2669eca3eaf93c06638a7edc4e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100ea4cb42e77918a287ce9bb4c9372dcb56124feba27b210c198a230931b0e4a6c022100dc76a79d68b103d6655d0a0f4cb93c31588b3402c5d360fc697c8bc2400202c7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e796cce3e131a2016608011092161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322075a3a001c4d79659006842c0118ddd7e2a2a5f0b867e2bd3bf02a3ee9695aaed38e796cce3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402202f0a44742b02709b2961bcd805c507527749d9d0d33ca9bf37bc26c4e83ace95022013c775d28823b283e4a9002d2865cffa014deb55133a9f22aaecf9d7a367c06a&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8c0d3e3e131a2016608011093161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220c3383909249d5ae30659888a94dda0397c3247bf4a877c37f4a251ce1861929c38a8c0d3e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100dc8433156e2568c4e43fdfef0d2ce30489980a64adceb5f41f225b3ed341cd720221008769e368c6dffc252198d4c64c298642191f0a7e7a748d516f8031cc57e392c8&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e7e9dae3e131a2016608011094161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32207f1696622d4e1baae075ab6e4a808d32e19a505a75530052dc45c3649e85726438e7e9dae3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3044022003bc9542824945aa70973fb277090546d63f6786e6074eeb34cd13f3c50331b502201f371bc771cb34044e797351ad7554bcab65a2a1c802ab267651a195dcada878&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a993e2e3e131a2016608011095161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322043fb9d34172ff2fe03948270638da9cc412e73ee4cdf472a39afee3d8f3aa6fa38a893e2e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402205d974b41c97dde821edfa37695aeb30958049f4e0847ea119a90197ca99cd30a02204342468b8d9a57c83605011c32e46ceab3ef5af5103f1b9d18e65d82c596cace&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8bce9e3e131a2016608011096161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220393a2c4d3b05def1ad3d34ea6aeff9c37473e8025f368f0c61f0b18ef2f77be038e8bce9e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502204339a508ecafd9b5a63e9aa60afc5cf8e4b7bc5f665065aee026215016c7b654022100ddb053a9bd0d1468a90d06628237265128b2a9987c9fad7cd9bb221246bd77f7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8e6f0e3e131a2016608011097161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200b4ddc38bf088ef57f0cb96a83117257e47e85a9d21064ea65b511f4ee0d37e938a8e6f0e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3045022100c2945652229417e75d99fdffa11846f64be02ba97dc1e13c9cbe0f2c8a11672d022048a9f74f085cfd468b160596a42453a8d38af3da6a7fe402866d4aff679302a7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e88ff8e3e131a2016608011098161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32204cb2dd58bcc6eb9d5118e9b17ee8e700fb1b227cb01447303e6852ffd32d4abb38e88ff8e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450221009d031ce0c5014ead018dda4a2ba65d7fa2fba1d0f65dc10ac02e6a36219a9a3f022026599e551b57196789152ae2fb9a2ae9f9627501359eeb5d66292a6297ee6cfa&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8b9ffe3e131a2016608011099161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200811b8b7383d841b6c878d6f7dc39ee4a5c6b27e5c055fb5d107c0aa2e0846af38a8b9ffe3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502207e79e97cf8cef396e3c6a6fcb08aa98390c44182becc393ff13d756d716f0635022100cffce8f2b911d7c930a02857202d4a850c690e1e760517bfabd64e6e37a007de&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8e286e4e131a201660801109a161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220bfecfcaf4c7bb13c210dcbd643791a988a97f3be42d7453a8fa868e8ac1800be38e8e286e4e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450220571a29f8ee83901f537fd013c216390dd07106dfa0d5fa783c52887cbeb6d3c1022100ef805fef432440f5fafbc9d897bcaab79ede7c57e032515755f9b1b2ff909ea1&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;080122380a149adb8a3c67660a5ebc8db83f69cf525783f3d17d12204c6c0e011ed421cbda86dceea00c51248516cdfe838f13abcf509d61a186bed02a1b08a0b4e31712149adb8a3c67660a5ebc8db83f69cf525783f3d17d322908011225080112210284bb49bd3f7ddabc1dc8dc257c74e995bcfa62493215710a1f885fed95af127a40d7065220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow tx has channel block hash&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;9468a809e1d7815d0683541931268e9facc17e45ff4a7eabbce7ffcb11a2c997&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle right&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;4e50cf9f67d76d62d14c1217f279567fa1c54b926315df596b71de929c051fde&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle left&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;2c89f35817fc051f865bda04000000020004aeb20000018e1c869322000000090000000000131e991e09fa2694657603c9d26d5578fc582f422c5b71bb9bd337&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;483d59f8110c4385124fe6750fade03b395eb4a5dda12788b8253ce15085429c00000000002917a199dd3484bc37b0dae90b65578600b4a75e18b0f48429266100000000000002a100000003&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;78d974a450cdccd36ab7d61bbb892142&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a4e09416b53b7d140750c6e8d93c347f&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;59d76d65c58f64591a53b69cac1d04da&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;134b6dae2ca7d24a71e9b907c2a1c671&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a3ee7f5aacd86a286ad95d17def4b751&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;888ab462b300217ca79c19fafffc614d&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;channel_block_hash&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
  &amp;quot;transaction_hash&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
  &amp;quot;snow_transaction&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom (done as of 2024.03.04)&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;br /&gt;
&lt;br /&gt;
For such a service to be really useful, it needs to scale and continue to be inexpensive.&lt;br /&gt;
&lt;br /&gt;
Here is an example architecture that would work:&lt;br /&gt;
&lt;br /&gt;
API endpoint goes to a request router.  The request router knows which backends (each running their own channel) are availible.&lt;br /&gt;
Request router sends timestamp requests to an available backend.&lt;br /&gt;
Request router sends proof requests to the appropriate backend for the chain the transaction is on.&lt;br /&gt;
&lt;br /&gt;
The backend nodes operate on channels each with an active-active configuration where any of the nodes on a channel could accept timestamp requests, service proof lookups or generate blocks.  There would have to be a little coordination to avoid creating blocks close in time and confusing the channel's mempool.  Same for deciding when to save state to the upstream timestamp service.&lt;br /&gt;
&lt;br /&gt;
So imagine the backend nodes as pairs, each pair servicing one channel.  Then the occasionally save state to an upstream timestamp service.  Add more pairs running channels as needed for the load.&lt;br /&gt;
&lt;br /&gt;
The upstream master timestamp service would occasionally save to public blockchains.&lt;br /&gt;
&lt;br /&gt;
With this model, we can extend to a very high request rate while still only saving a transaction on a public chain every few blocks.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=354</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=354"/>
		<updated>2024-03-08T21:36:15Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* Uses */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uses ==&lt;br /&gt;
The cheap is super important.  Often, we probably won't know the value of data or having a proof on it until much later.&lt;br /&gt;
&lt;br /&gt;
So for example, an app that saved the hash of every picture you took on your phone might be cool.  Most wouldn't matter, but it would be nice if you ever needed to later prove that one of the pictures was not edited after the time of the timestamp.&lt;br /&gt;
&lt;br /&gt;
So images, videos, even video streams (if you can get low level enough into the video stream to decide what data to predictably hash on).  Documents.  Source code.  Things I haven't thought of.&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
This timestamp service uses [[Channels]] as the metadata storage layer.  Requested timestamp data is encoded into ContentInfo objects that are placed in Snowblossom Channels blocks for the channel the timestamp service is running as.  Then on a schedule, the top channel block is encoded as the tx_extra field in a cryptocurrency transaction.&lt;br /&gt;
&lt;br /&gt;
Once that is done and the resulting cryptocurrency transaction is confirmed into a block, then it is possible for the timestamp service to generate the complete proof all the way from the input data to the block hash of a cryptocurrency block.&lt;br /&gt;
&lt;br /&gt;
The structure of the proof will be a series of hash steps that look like:&lt;br /&gt;
&lt;br /&gt;
M = input data&lt;br /&gt;
&lt;br /&gt;
Each step will define a hash algorithm, a prefix and a postfix string.&lt;br /&gt;
M = hash( prefix + M + postfix )&lt;br /&gt;
&lt;br /&gt;
The final M will be the block hash of a cryptocurrency block that can be verified with a local node or a block explorer.&lt;br /&gt;
&lt;br /&gt;
All strings are hex encoded binary and all hash operations should occur on the binary data.  Put another way, a 64 character long hex string needs to be converted to a 32 byte array before doing any hash operations.&lt;br /&gt;
&lt;br /&gt;
Example proof, which proves that the data_hash of 710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2 was included in Snowblossom Block [https://explorer.snowblossom.org/?search=0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8 0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8].&lt;br /&gt;
&lt;br /&gt;
The number of steps will depend on the depth of the merkle trees for timestamp data going into the channel block, the number of channel blocks until one that is included in the public blockchain and the merkle depth of transactions in the blockchain.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;snow_block&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
  &amp;quot;data_hash&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
  &amp;quot;proofs&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10b4d3bae3e131aa017f0a20b82b7a9edd0fb5faaacf7b9c7877dedf74f00feb3fd0ffc95ff4203271a94db418202220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;2a142e74b7bd6036178436b129bead2095b4a2da0bb0d2012056b2407d8c038a50ad01c546ff7037acd46871fa3a281fbf29ced7e982be2325&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502210099df6b4d399ff3e101c04e41b72e62524752c3d287fafe9dfe31ff7ffc23dda902201c985cd2b85847d27ae1c2247c9cc605c67e0e13792db5fba86f266479505ab4&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8c3bde3e131a2016608011090161a142e74b7bd6036178436b129bead2095b4a2da0bb022202b9d8f6a293e4749ff1de445996ab1982ca0c66d2f9e475a0470281d3e6e82363220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;38e8c3bde3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304602210094127432d522878c481771815f0b08f0dc74c83cf60a2d03dbdb257f3b8619e9022100e591e96ee5cff085bf2ee41b173a6d111c41186dfe4db11b0ee7514520072285&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a7edc4e3e131a2016608011091161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322028cbab24a483b47034af702dbcc8d4e78211bb16901d9bf2669eca3eaf93c06638a7edc4e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100ea4cb42e77918a287ce9bb4c9372dcb56124feba27b210c198a230931b0e4a6c022100dc76a79d68b103d6655d0a0f4cb93c31588b3402c5d360fc697c8bc2400202c7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e796cce3e131a2016608011092161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322075a3a001c4d79659006842c0118ddd7e2a2a5f0b867e2bd3bf02a3ee9695aaed38e796cce3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402202f0a44742b02709b2961bcd805c507527749d9d0d33ca9bf37bc26c4e83ace95022013c775d28823b283e4a9002d2865cffa014deb55133a9f22aaecf9d7a367c06a&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8c0d3e3e131a2016608011093161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220c3383909249d5ae30659888a94dda0397c3247bf4a877c37f4a251ce1861929c38a8c0d3e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100dc8433156e2568c4e43fdfef0d2ce30489980a64adceb5f41f225b3ed341cd720221008769e368c6dffc252198d4c64c298642191f0a7e7a748d516f8031cc57e392c8&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e7e9dae3e131a2016608011094161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32207f1696622d4e1baae075ab6e4a808d32e19a505a75530052dc45c3649e85726438e7e9dae3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3044022003bc9542824945aa70973fb277090546d63f6786e6074eeb34cd13f3c50331b502201f371bc771cb34044e797351ad7554bcab65a2a1c802ab267651a195dcada878&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a993e2e3e131a2016608011095161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322043fb9d34172ff2fe03948270638da9cc412e73ee4cdf472a39afee3d8f3aa6fa38a893e2e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402205d974b41c97dde821edfa37695aeb30958049f4e0847ea119a90197ca99cd30a02204342468b8d9a57c83605011c32e46ceab3ef5af5103f1b9d18e65d82c596cace&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8bce9e3e131a2016608011096161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220393a2c4d3b05def1ad3d34ea6aeff9c37473e8025f368f0c61f0b18ef2f77be038e8bce9e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502204339a508ecafd9b5a63e9aa60afc5cf8e4b7bc5f665065aee026215016c7b654022100ddb053a9bd0d1468a90d06628237265128b2a9987c9fad7cd9bb221246bd77f7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8e6f0e3e131a2016608011097161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200b4ddc38bf088ef57f0cb96a83117257e47e85a9d21064ea65b511f4ee0d37e938a8e6f0e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3045022100c2945652229417e75d99fdffa11846f64be02ba97dc1e13c9cbe0f2c8a11672d022048a9f74f085cfd468b160596a42453a8d38af3da6a7fe402866d4aff679302a7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e88ff8e3e131a2016608011098161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32204cb2dd58bcc6eb9d5118e9b17ee8e700fb1b227cb01447303e6852ffd32d4abb38e88ff8e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450221009d031ce0c5014ead018dda4a2ba65d7fa2fba1d0f65dc10ac02e6a36219a9a3f022026599e551b57196789152ae2fb9a2ae9f9627501359eeb5d66292a6297ee6cfa&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8b9ffe3e131a2016608011099161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200811b8b7383d841b6c878d6f7dc39ee4a5c6b27e5c055fb5d107c0aa2e0846af38a8b9ffe3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502207e79e97cf8cef396e3c6a6fcb08aa98390c44182becc393ff13d756d716f0635022100cffce8f2b911d7c930a02857202d4a850c690e1e760517bfabd64e6e37a007de&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8e286e4e131a201660801109a161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220bfecfcaf4c7bb13c210dcbd643791a988a97f3be42d7453a8fa868e8ac1800be38e8e286e4e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450220571a29f8ee83901f537fd013c216390dd07106dfa0d5fa783c52887cbeb6d3c1022100ef805fef432440f5fafbc9d897bcaab79ede7c57e032515755f9b1b2ff909ea1&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;080122380a149adb8a3c67660a5ebc8db83f69cf525783f3d17d12204c6c0e011ed421cbda86dceea00c51248516cdfe838f13abcf509d61a186bed02a1b08a0b4e31712149adb8a3c67660a5ebc8db83f69cf525783f3d17d322908011225080112210284bb49bd3f7ddabc1dc8dc257c74e995bcfa62493215710a1f885fed95af127a40d7065220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow tx has channel block hash&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;9468a809e1d7815d0683541931268e9facc17e45ff4a7eabbce7ffcb11a2c997&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle right&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;4e50cf9f67d76d62d14c1217f279567fa1c54b926315df596b71de929c051fde&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle left&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;2c89f35817fc051f865bda04000000020004aeb20000018e1c869322000000090000000000131e991e09fa2694657603c9d26d5578fc582f422c5b71bb9bd337&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;483d59f8110c4385124fe6750fade03b395eb4a5dda12788b8253ce15085429c00000000002917a199dd3484bc37b0dae90b65578600b4a75e18b0f48429266100000000000002a100000003&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;78d974a450cdccd36ab7d61bbb892142&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a4e09416b53b7d140750c6e8d93c347f&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;59d76d65c58f64591a53b69cac1d04da&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;134b6dae2ca7d24a71e9b907c2a1c671&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a3ee7f5aacd86a286ad95d17def4b751&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;888ab462b300217ca79c19fafffc614d&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;channel_block_hash&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
  &amp;quot;transaction_hash&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
  &amp;quot;snow_transaction&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom (done as of 2024.03.04)&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=353</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=353"/>
		<updated>2024-03-08T21:32:59Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uses ==&lt;br /&gt;
The cheap is super important.  Often, we probably won't know the value of data or having a proof on it until much later.  &lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
This timestamp service uses [[Channels]] as the metadata storage layer.  Requested timestamp data is encoded into ContentInfo objects that are placed in Snowblossom Channels blocks for the channel the timestamp service is running as.  Then on a schedule, the top channel block is encoded as the tx_extra field in a cryptocurrency transaction.&lt;br /&gt;
&lt;br /&gt;
Once that is done and the resulting cryptocurrency transaction is confirmed into a block, then it is possible for the timestamp service to generate the complete proof all the way from the input data to the block hash of a cryptocurrency block.&lt;br /&gt;
&lt;br /&gt;
The structure of the proof will be a series of hash steps that look like:&lt;br /&gt;
&lt;br /&gt;
M = input data&lt;br /&gt;
&lt;br /&gt;
Each step will define a hash algorithm, a prefix and a postfix string.&lt;br /&gt;
M = hash( prefix + M + postfix )&lt;br /&gt;
&lt;br /&gt;
The final M will be the block hash of a cryptocurrency block that can be verified with a local node or a block explorer.&lt;br /&gt;
&lt;br /&gt;
All strings are hex encoded binary and all hash operations should occur on the binary data.  Put another way, a 64 character long hex string needs to be converted to a 32 byte array before doing any hash operations.&lt;br /&gt;
&lt;br /&gt;
Example proof, which proves that the data_hash of 710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2 was included in Snowblossom Block [https://explorer.snowblossom.org/?search=0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8 0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8].&lt;br /&gt;
&lt;br /&gt;
The number of steps will depend on the depth of the merkle trees for timestamp data going into the channel block, the number of channel blocks until one that is included in the public blockchain and the merkle depth of transactions in the blockchain.&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;snow_block&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
  &amp;quot;data_hash&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
  &amp;quot;proofs&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10b4d3bae3e131aa017f0a20b82b7a9edd0fb5faaacf7b9c7877dedf74f00feb3fd0ffc95ff4203271a94db418202220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;2a142e74b7bd6036178436b129bead2095b4a2da0bb0d2012056b2407d8c038a50ad01c546ff7037acd46871fa3a281fbf29ced7e982be2325&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502210099df6b4d399ff3e101c04e41b72e62524752c3d287fafe9dfe31ff7ffc23dda902201c985cd2b85847d27ae1c2247c9cc605c67e0e13792db5fba86f266479505ab4&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8c3bde3e131a2016608011090161a142e74b7bd6036178436b129bead2095b4a2da0bb022202b9d8f6a293e4749ff1de445996ab1982ca0c66d2f9e475a0470281d3e6e82363220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;38e8c3bde3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304602210094127432d522878c481771815f0b08f0dc74c83cf60a2d03dbdb257f3b8619e9022100e591e96ee5cff085bf2ee41b173a6d111c41186dfe4db11b0ee7514520072285&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a7edc4e3e131a2016608011091161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322028cbab24a483b47034af702dbcc8d4e78211bb16901d9bf2669eca3eaf93c06638a7edc4e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100ea4cb42e77918a287ce9bb4c9372dcb56124feba27b210c198a230931b0e4a6c022100dc76a79d68b103d6655d0a0f4cb93c31588b3402c5d360fc697c8bc2400202c7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e796cce3e131a2016608011092161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322075a3a001c4d79659006842c0118ddd7e2a2a5f0b867e2bd3bf02a3ee9695aaed38e796cce3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402202f0a44742b02709b2961bcd805c507527749d9d0d33ca9bf37bc26c4e83ace95022013c775d28823b283e4a9002d2865cffa014deb55133a9f22aaecf9d7a367c06a&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8c0d3e3e131a2016608011093161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220c3383909249d5ae30659888a94dda0397c3247bf4a877c37f4a251ce1861929c38a8c0d3e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100dc8433156e2568c4e43fdfef0d2ce30489980a64adceb5f41f225b3ed341cd720221008769e368c6dffc252198d4c64c298642191f0a7e7a748d516f8031cc57e392c8&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e7e9dae3e131a2016608011094161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32207f1696622d4e1baae075ab6e4a808d32e19a505a75530052dc45c3649e85726438e7e9dae3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3044022003bc9542824945aa70973fb277090546d63f6786e6074eeb34cd13f3c50331b502201f371bc771cb34044e797351ad7554bcab65a2a1c802ab267651a195dcada878&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a993e2e3e131a2016608011095161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322043fb9d34172ff2fe03948270638da9cc412e73ee4cdf472a39afee3d8f3aa6fa38a893e2e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402205d974b41c97dde821edfa37695aeb30958049f4e0847ea119a90197ca99cd30a02204342468b8d9a57c83605011c32e46ceab3ef5af5103f1b9d18e65d82c596cace&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8bce9e3e131a2016608011096161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220393a2c4d3b05def1ad3d34ea6aeff9c37473e8025f368f0c61f0b18ef2f77be038e8bce9e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502204339a508ecafd9b5a63e9aa60afc5cf8e4b7bc5f665065aee026215016c7b654022100ddb053a9bd0d1468a90d06628237265128b2a9987c9fad7cd9bb221246bd77f7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8e6f0e3e131a2016608011097161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200b4ddc38bf088ef57f0cb96a83117257e47e85a9d21064ea65b511f4ee0d37e938a8e6f0e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3045022100c2945652229417e75d99fdffa11846f64be02ba97dc1e13c9cbe0f2c8a11672d022048a9f74f085cfd468b160596a42453a8d38af3da6a7fe402866d4aff679302a7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e88ff8e3e131a2016608011098161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32204cb2dd58bcc6eb9d5118e9b17ee8e700fb1b227cb01447303e6852ffd32d4abb38e88ff8e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450221009d031ce0c5014ead018dda4a2ba65d7fa2fba1d0f65dc10ac02e6a36219a9a3f022026599e551b57196789152ae2fb9a2ae9f9627501359eeb5d66292a6297ee6cfa&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8b9ffe3e131a2016608011099161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200811b8b7383d841b6c878d6f7dc39ee4a5c6b27e5c055fb5d107c0aa2e0846af38a8b9ffe3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502207e79e97cf8cef396e3c6a6fcb08aa98390c44182becc393ff13d756d716f0635022100cffce8f2b911d7c930a02857202d4a850c690e1e760517bfabd64e6e37a007de&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8e286e4e131a201660801109a161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220bfecfcaf4c7bb13c210dcbd643791a988a97f3be42d7453a8fa868e8ac1800be38e8e286e4e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450220571a29f8ee83901f537fd013c216390dd07106dfa0d5fa783c52887cbeb6d3c1022100ef805fef432440f5fafbc9d897bcaab79ede7c57e032515755f9b1b2ff909ea1&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;080122380a149adb8a3c67660a5ebc8db83f69cf525783f3d17d12204c6c0e011ed421cbda86dceea00c51248516cdfe838f13abcf509d61a186bed02a1b08a0b4e31712149adb8a3c67660a5ebc8db83f69cf525783f3d17d322908011225080112210284bb49bd3f7ddabc1dc8dc257c74e995bcfa62493215710a1f885fed95af127a40d7065220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow tx has channel block hash&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;9468a809e1d7815d0683541931268e9facc17e45ff4a7eabbce7ffcb11a2c997&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle right&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;4e50cf9f67d76d62d14c1217f279567fa1c54b926315df596b71de929c051fde&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle left&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;2c89f35817fc051f865bda04000000020004aeb20000018e1c869322000000090000000000131e991e09fa2694657603c9d26d5578fc582f422c5b71bb9bd337&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;483d59f8110c4385124fe6750fade03b395eb4a5dda12788b8253ce15085429c00000000002917a199dd3484bc37b0dae90b65578600b4a75e18b0f48429266100000000000002a100000003&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;78d974a450cdccd36ab7d61bbb892142&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a4e09416b53b7d140750c6e8d93c347f&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;59d76d65c58f64591a53b69cac1d04da&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;134b6dae2ca7d24a71e9b907c2a1c671&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a3ee7f5aacd86a286ad95d17def4b751&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;888ab462b300217ca79c19fafffc614d&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;channel_block_hash&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
  &amp;quot;transaction_hash&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
  &amp;quot;snow_transaction&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom (done as of 2024.03.04)&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=352</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=352"/>
		<updated>2024-03-08T21:31:08Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uses ==&lt;br /&gt;
The cheap is super important.  Often, we probably won't know the value of data or having a proof on it until much later.  &lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
This timestamp service uses [[Channels]] as the metadata storage layer.  Requested timestamp data is encoded into ContentInfo objects that are placed in Snowblossom Channels blocks for the channel the timestamp service is running as.  Then on a schedule, the top channel block is encoded as the tx_extra field in a cryptocurrency transaction.&lt;br /&gt;
&lt;br /&gt;
Once that is done and the resulting cryptocurrency transaction is confirmed into a block, then it is possible for the timestamp service to generate the complete proof all the way from the input data to the block hash of a cryptocurrency block.&lt;br /&gt;
&lt;br /&gt;
The structure of the proof will be a series of hash steps that look like:&lt;br /&gt;
&lt;br /&gt;
M = input data&lt;br /&gt;
&lt;br /&gt;
Each step will define a hash algorithm, a prefix and a postfix string.&lt;br /&gt;
M = hash( prefix + M + postfix )&lt;br /&gt;
&lt;br /&gt;
The final M will be the block hash of a cryptocurrency block that can be verified with a local node or a block explorer.&lt;br /&gt;
&lt;br /&gt;
All strings are hex encoded binary and all hash operations should occur on the binary data.  Put another way, a 64 character long hex string needs to be converted to a 32 byte array before doing any hash operations.&lt;br /&gt;
&lt;br /&gt;
Example proof, which proves that the data_hash of 710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2 was included in Snowblossom Block [https://explorer.snowblossom.org/?search=0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8 0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8].&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
  &amp;quot;snow_block&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
  &amp;quot;data_hash&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
  &amp;quot;proofs&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10b4d3bae3e131aa017f0a20b82b7a9edd0fb5faaacf7b9c7877dedf74f00feb3fd0ffc95ff4203271a94db418202220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;2a142e74b7bd6036178436b129bead2095b4a2da0bb0d2012056b2407d8c038a50ad01c546ff7037acd46871fa3a281fbf29ced7e982be2325&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;710150e9eb6d7b7377e75d82f43bb4a84fc3ea42f08ea56bd594c4be7c4fb3b2&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502210099df6b4d399ff3e101c04e41b72e62524752c3d287fafe9dfe31ff7ffc23dda902201c985cd2b85847d27ae1c2247c9cc605c67e0e13792db5fba86f266479505ab4&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;transaction outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;49f3b7c82f9086ac4a787b12f28d953271d8e52e6d57fe67c3b6466ed72ef437&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8c3bde3e131a2016608011090161a142e74b7bd6036178436b129bead2095b4a2da0bb022202b9d8f6a293e4749ff1de445996ab1982ca0c66d2f9e475a0470281d3e6e82363220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;38e8c3bde3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304602210094127432d522878c481771815f0b08f0dc74c83cf60a2d03dbdb257f3b8619e9022100e591e96ee5cff085bf2ee41b173a6d111c41186dfe4db11b0ee7514520072285&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;block outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;411949ff64a54d4301ac5ccbf5e67999c5f4a1d499254f1599f165931a428139&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a7edc4e3e131a2016608011091161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322028cbab24a483b47034af702dbcc8d4e78211bb16901d9bf2669eca3eaf93c06638a7edc4e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100ea4cb42e77918a287ce9bb4c9372dcb56124feba27b210c198a230931b0e4a6c022100dc76a79d68b103d6655d0a0f4cb93c31588b3402c5d360fc697c8bc2400202c7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e312bbac7a5f8134b5dac041a8d858442b5f7e8d1e9fc8e26b7377fbf449bb10&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e796cce3e131a2016608011092161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322075a3a001c4d79659006842c0118ddd7e2a2a5f0b867e2bd3bf02a3ee9695aaed38e796cce3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;b4cd4316465c7abcd8a4bd6816e9e6970dc4c255d92a05e508e0875f463a9bc0&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402202f0a44742b02709b2961bcd805c507527749d9d0d33ca9bf37bc26c4e83ace95022013c775d28823b283e4a9002d2865cffa014deb55133a9f22aaecf9d7a367c06a&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1126cc1f6a30d0790489f5ce40efec834ac9f202503a8697e38b77f7eb70b80e&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8c0d3e3e131a2016608011093161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220c3383909249d5ae30659888a94dda0397c3247bf4a877c37f4a251ce1861929c38a8c0d3e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;1badbbf025a4ed85b9544b07217df889ecd8f60c845458083b723eca0e84d29d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3046022100dc8433156e2568c4e43fdfef0d2ce30489980a64adceb5f41f225b3ed341cd720221008769e368c6dffc252198d4c64c298642191f0a7e7a748d516f8031cc57e392c8&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a258424398a45b6e60804267c8546577b0a22d7de8ddafd1818f28190c6ba1a4&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e7e9dae3e131a2016608011094161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32207f1696622d4e1baae075ab6e4a808d32e19a505a75530052dc45c3649e85726438e7e9dae3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;f8b8ce1090d4fb1d0f07bc7e1f7b2eed0bdab5e0ea45e139920a4ad7647d0c50&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3044022003bc9542824945aa70973fb277090546d63f6786e6074eeb34cd13f3c50331b502201f371bc771cb34044e797351ad7554bcab65a2a1c802ab267651a195dcada878&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;076e82df4ad0baff75cb9d29b125d24b7c2ba692ad5b11d2e1089f21951a2ac8&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a993e2e3e131a2016608011095161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;322043fb9d34172ff2fe03948270638da9cc412e73ee4cdf472a39afee3d8f3aa6fa38a893e2e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;d75e66cb7577aa33ca29efe783956ac52ea0d0dc0c594f1fd544d09383edc18a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304402205d974b41c97dde821edfa37695aeb30958049f4e0847ea119a90197ca99cd30a02204342468b8d9a57c83605011c32e46ceab3ef5af5103f1b9d18e65d82c596cace&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;a1b4b2fdb4a88c7a0be1622969d6ee895f8d277296248e1b3c2ee97857da8bbd&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8bce9e3e131a2016608011096161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220393a2c4d3b05def1ad3d34ea6aeff9c37473e8025f368f0c61f0b18ef2f77be038e8bce9e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;fa692ea57b6cc00301b74e43ee883a0ee1ad14e727296cd1185a881d2ac6b334&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502204339a508ecafd9b5a63e9aa60afc5cf8e4b7bc5f665065aee026215016c7b654022100ddb053a9bd0d1468a90d06628237265128b2a9987c9fad7cd9bb221246bd77f7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9aaf7c7a9fa59108595902fd0d5299d0652fab2654ec6a153b66fde9270f5081&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8e6f0e3e131a2016608011097161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200b4ddc38bf088ef57f0cb96a83117257e47e85a9d21064ea65b511f4ee0d37e938a8e6f0e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;e759e9e9e47dd7f12f9d31f3c82a42b3b2497f0a6adda49a8f0113d1cf40d19a&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3045022100c2945652229417e75d99fdffa11846f64be02ba97dc1e13c9cbe0f2c8a11672d022048a9f74f085cfd468b160596a42453a8d38af3da6a7fe402866d4aff679302a7&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;0da7eedddb27a71d1f8b966cc38a99e94b147b9afbed4f9caf66dac3f64bcce6&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e88ff8e3e131a2016608011098161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32204cb2dd58bcc6eb9d5118e9b17ee8e700fb1b227cb01447303e6852ffd32d4abb38e88ff8e3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;97c417aa95f05c7a9a3fbd3cae48941ebb328f53e114c13237e15bd4a30740d9&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450221009d031ce0c5014ead018dda4a2ba65d7fa2fba1d0f65dc10ac02e6a36219a9a3f022026599e551b57196789152ae2fb9a2ae9f9627501359eeb5d66292a6297ee6cfa&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;883718f2d638d77a4ebaf2f9ab5953cc53235c38e47d90909be91d88a4ccdb68&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10a8b9ffe3e131a2016608011099161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;32200811b8b7383d841b6c878d6f7dc39ee4a5c6b27e5c055fb5d107c0aa2e0846af38a8b9ffe3e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;aa78e8bf5cc7fd1eb3ab7c63ad68d3095e946b2b1aeacc9bf01f1fbdde18d513&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;304502207e79e97cf8cef396e3c6a6fcb08aa98390c44182becc393ff13d756d716f0635022100cffce8f2b911d7c930a02857202d4a850c690e1e760517bfabd64e6e37a007de&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;9ba69d92a20a944560552d6f8f83512b75bbd15ca89fb5e0c2c6d6df12d0dd74&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;0a290801122508011221023bf6b14c3b03f0ed8b9b642dba44167c3535bbd7d68b4a3b32f63ddda746dc8e10e8e286e4e131a201660801109a161a142e74b7bd6036178436b129bead2095b4a2da0bb02220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;3220bfecfcaf4c7bb13c210dcbd643791a988a97f3be42d7453a8fa868e8ac1800be38e8e286e4e131&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path payload&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;45ad167039ba0ef4cb7af43b7d787bfa35d16d9f18e0d5fa2a2595739f0bd154&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;30450220571a29f8ee83901f537fd013c216390dd07106dfa0d5fa783c52887cbeb6d3c1022100ef805fef432440f5fafbc9d897bcaab79ede7c57e032515755f9b1b2ff909ea1&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;channel block path outer&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7abe420906b785e5baf20944db6efb4e91e2e387c9f6761cfa5583bd28e90a08&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;080122380a149adb8a3c67660a5ebc8db83f69cf525783f3d17d12204c6c0e011ed421cbda86dceea00c51248516cdfe838f13abcf509d61a186bed02a1b08a0b4e31712149adb8a3c67660a5ebc8db83f69cf525783f3d17d322908011225080112210284bb49bd3f7ddabc1dc8dc257c74e995bcfa62493215710a1f885fed95af127a40d7065220&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow tx has channel block hash&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c30aad00cfee24452be412e40bde662bce32c82a89f307ee917733bbbeefea6c&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;9468a809e1d7815d0683541931268e9facc17e45ff4a7eabbce7ffcb11a2c997&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle right&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;4e50cf9f67d76d62d14c1217f279567fa1c54b926315df596b71de929c051fde&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;merkle left&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;69a7ea6037c7e05899248fdfdff4e5b264ef157509c1ea5b27c477b5795cc804&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;2c89f35817fc051f865bda04000000020004aeb20000018e1c869322000000090000000000131e991e09fa2694657603c9d26d5578fc582f422c5b71bb9bd337&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;483d59f8110c4385124fe6750fade03b395eb4a5dda12788b8253ce15085429c00000000002917a199dd3484bc37b0dae90b65578600b4a75e18b0f48429266100000000000002a100000003&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;7115e6ac4f08eda934e1a5ca3e72035b7f224a157cf790906333401cf0064a2d&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;78d974a450cdccd36ab7d61bbb892142&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;96968de1dbe63b3723e86d68f672362166b826c7710e9b073fab41a02c0a7796&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a4e09416b53b7d140750c6e8d93c347f&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;2c6c12de3a5d2b1d7fe3c72c855b443603d9d54dcdc9fd39a6e4ac8c32e0f1cf&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;59d76d65c58f64591a53b69cac1d04da&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;11540bc97b97c8d1f381c4f1af2e3688060ce9d437a1308203adc132641c3827&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;134b6dae2ca7d24a71e9b907c2a1c671&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62f52521c688922c4e6d256181e49c6438e2981acae3514d44c3767b06ccfe29&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;a3ee7f5aacd86a286ad95d17def4b751&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;42bbdb5ca5a7613d849814e5625231f0965550a30db6486976fbcb0ce8902304&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;output&amp;quot;: &amp;quot;0000000000276312f079297412ecd2168f9b21057dc911758984add713c551b8&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix_data&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;postfix_data&amp;quot;: &amp;quot;888ab462b300217ca79c19fafffc614d&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;snow pow step&amp;quot;,&lt;br /&gt;
      &amp;quot;mid_data&amp;quot;: &amp;quot;62cd17a79318589d1a8580d2a0eb5d7f1ed91eff1b879f75c47d3482e81b8783&amp;quot;,&lt;br /&gt;
      &amp;quot;algo&amp;quot;: &amp;quot;Skein-256-256&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;channel_block_hash&amp;quot;: &amp;quot;565a051329f8dfd2f8c0787ecf97df682d522026e38bf0b4f718a91c4d114ce8&amp;quot;,&lt;br /&gt;
  &amp;quot;transaction_hash&amp;quot;: &amp;quot;d5f022da0cd087b926179af71d5d68d3858926fed74787347b5684b4be97119e&amp;quot;,&lt;br /&gt;
  &amp;quot;snow_transaction&amp;quot;: &amp;quot;c3be5a72e6ab2d6fabf3eae673cf4e6491d551946b48a4b2270cf75fc4b4c2bb&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom (done as of 2024.03.04)&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=351</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=351"/>
		<updated>2024-03-08T21:22:07Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uses ==&lt;br /&gt;
The cheap is super important.  Often, we probably won't know the value of data or having a proof on it until much later.  &lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
This timestamp service uses [[Channels]] as the metadata storage layer.  &lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom (done as of 2024.03.04)&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=350</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=350"/>
		<updated>2024-03-08T21:18:19Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* Version Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom (done as of 2024.03.04)&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=349</id>
		<title>Timestamp Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Timestamp_Service&amp;diff=349"/>
		<updated>2024-03-08T21:18:00Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: Created page with &amp;quot;= Overview =  A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.  Tradition...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
A timestamp service is one where a user submits some data (or a hash of some data) and gets back a document that proves the data existed at that time.&lt;br /&gt;
&lt;br /&gt;
Traditionally this was done by [https://en.wikipedia.org/wiki/Trusted_timestamping Trusted Timestamp] services.  These would sign the data with their keys and return a signed and dated document.&lt;br /&gt;
&lt;br /&gt;
This depended on the trusthwothiness, security and impartiality of the service provider in addition to regular public key infrastructure [https://en.wikipedia.org/wiki/Public_key_infrastructure PKI].&lt;br /&gt;
&lt;br /&gt;
In the blockchain world, we like to ask &amp;quot;Do we really need to trust someone for this?  Can we make it trustless?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The answer is of course, yes, we can.  We can take some data and embed it into a transaction that gets folded into the next block in a chain.  This is not new, we've been doing this since nearly the start of Bitcoin.  Example from myself: [https://github.com/fireduck64/BitcoinTimestamp Bitcoin Timestamp]&lt;br /&gt;
&lt;br /&gt;
However, this means making transactions on the public ledger, which are not cheap.  [https://en.wikipedia.org/wiki/Merkle_tree Merkle Trees] to the rescue.  We can take a bunch of data we want to timestamp, combine it all using a merkle tree and embed that single result in the blockchain.  That is the purpose of this project, to be able to make cheap blockchain based timestamps.&lt;br /&gt;
&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
The API is simple.  One call that provides the data to include and the result is some transaction ID for the timestamp.&lt;br /&gt;
Then some time later, the user can call again with the transaction ID and get the entire proof.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version Plan ==&lt;br /&gt;
&lt;br /&gt;
* v1 - Basic operation backed by Snowblossom&lt;br /&gt;
* v2 - Recursive operation (a timestamp service can use another timestamp service as its backing)&lt;br /&gt;
* v3 - Other chains (Bitcoin, Bitcoin Cash, Ethereum)&lt;br /&gt;
&lt;br /&gt;
== Scaling ==&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Main_Page&amp;diff=348</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Main_Page&amp;diff=348"/>
		<updated>2024-03-08T21:08:32Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Snowblossom Cryptocurrency =&lt;br /&gt;
&lt;br /&gt;
Snowblossom is a fresh take on cryptocurrency.&lt;br /&gt;
&lt;br /&gt;
* Simple&lt;br /&gt;
* Scalable&lt;br /&gt;
* Portable&lt;br /&gt;
* [[Quantum Tough]]&lt;br /&gt;
* Genuinely ASIC Resistant&lt;br /&gt;
* Ready to go Block Explorer, Pool, Miner software&lt;br /&gt;
&lt;br /&gt;
'''Information'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Security Advisory]]'''&lt;br /&gt;
* '''[[Download]]'''&lt;br /&gt;
* '''[[Features]]'''&lt;br /&gt;
* '''[[Creators]]'''&lt;br /&gt;
* '''[[Community]]'''&lt;br /&gt;
* '''[[Launch]]'''&lt;br /&gt;
* '''[https://github.com/snowblossomcoin/snowblossom/blob/master/RELEASE-NOTES.md Release Notes]'''&lt;br /&gt;
* '''[[:Category:Mining|Mining]]'''&lt;br /&gt;
* '''[[Programs]]'''&lt;br /&gt;
* '''[[Migration]]'''&lt;br /&gt;
* '''[[Road Map]]'''&lt;br /&gt;
* '''[[Channels]]'''&lt;br /&gt;
* '''[[Timestamp Service]]'''&lt;br /&gt;
&lt;br /&gt;
'''Using Snowblossom'''&lt;br /&gt;
* '''[[:Category:ConfigOptions|Config Options]]'''&lt;br /&gt;
&lt;br /&gt;
'''Get Started'''&lt;br /&gt;
&lt;br /&gt;
* '''[[FAQ]]'''&lt;br /&gt;
* '''[[Quickstart]]'''&lt;br /&gt;
* '''[[Quickstart-from-Source]]'''&lt;br /&gt;
* '''[[Docker]]'''&lt;br /&gt;
* '''[[User-Guide]]'''&lt;br /&gt;
* '''[[Config-Files]]'''&lt;br /&gt;
* '''[[Mining-Pools]]'''&lt;br /&gt;
* '''[[Trading]]'''&lt;br /&gt;
* '''[https://1209k.com/faucet/ Faucet]'''&lt;br /&gt;
* '''[[:Category:HowTo]]'''&lt;br /&gt;
&lt;br /&gt;
'''Further'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Proposals]]'''&lt;br /&gt;
* '''[[Future-Plans]]'''&lt;br /&gt;
* '''[http://testnet.snowblossom-explorer.org/ Testnet Explorer with Faucet]'''&lt;br /&gt;
* '''[http://snowblossom.org/richlist.txt Rich address list]'''&lt;br /&gt;
&lt;br /&gt;
'''Developers'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Install-from-Source]]'''&lt;br /&gt;
* '''[[Technical-Design]]'''&lt;br /&gt;
* '''[[JSON-RPC-Commands]]'''&lt;br /&gt;
* '''[[Watch-only-Wallets]]'''&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=SIP6-PQC&amp;diff=347</id>
		<title>SIP6-PQC</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=SIP6-PQC&amp;diff=347"/>
		<updated>2024-01-04T20:32:24Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
One of the major concepts behind Snowblossom in 2018 was that when quantum computers had become better and started to threaten traditional elliptic curve cryptography, we would be able to switch to new quantum resistant algorithms.  See [[Quantum Tough]]&lt;br /&gt;
&lt;br /&gt;
Well, we might be there.  The NIST Post Quantum Cryptography (PQC) contest has proceeded to some finalists and quantum computers are getting more powerful.&lt;br /&gt;
&lt;br /&gt;
So in this Snowblossom Improvement Proposal we will be adding three new signing algorithms:&lt;br /&gt;
&lt;br /&gt;
* Dilithium - public key size: 2616 bytes, signature size: 4627 bytes&lt;br /&gt;
* Falcon - public key size: 915 bytes, signature size: 655 bytes (+/-)&lt;br /&gt;
* SPHINCS+ - public key size: 52 bytes, signature size: 7856 bytes&lt;br /&gt;
&lt;br /&gt;
(Compare to standard ECDSA, key size: 33 bytes, signature size: 71 (+/-))&lt;br /&gt;
&lt;br /&gt;
These will be supported by the network in additional to the existing signing methods (ECDSA, DSA, RSA, DSTU4150).  It will continue to be up to users to decide which signing algorithms they use to generate their wallets.&lt;br /&gt;
&lt;br /&gt;
Dilithium was included because it is the front runner in the PQC contest.  It is a lattice based algorithm.  &lt;br /&gt;
Falcon was included because it is another lattice based, but with an emphasis on being smaller in size and CPU usage so it might be a good option.  &lt;br /&gt;
Sphincs+ was included because it is entirely different from the lattice based methods.  It is based on plain old standard hash functions.  While it is larger in cpu usage and signature size, it should be safe even if something is fundamentally broken with the other lattice based methods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Voting ==&lt;br /&gt;
&lt;br /&gt;
* Passes when 1000 blocks pass containing 25% voting and &amp;gt;50% agreement&lt;br /&gt;
* Pools will represent their miners.&lt;br /&gt;
* Set in your miner or pool configuration file either&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_yes=6&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_no=6&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
This has been tested on testnet and has been running there for several weeks.  It is currently in the https://github.com/snowblossomcoin/snowblossom/tree/pqc-keys branch.&lt;br /&gt;
&lt;br /&gt;
== Risks ==&lt;br /&gt;
&lt;br /&gt;
We are still early in the PQC world.  While all the algorithms are defined enough that the Bouncycastle devs have included them in the standard versions of Bouncycastle cryptography library (which we use) they could still change.  Also, these are also relatively new.  Unexpected vulnerabilities could be found.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
If this SIP is adopted, the roll out will be scheduled roughly 90 days from the vote.  At that time, new binaries, source code and docker images will be available.  This means node operators will need to update within those 90 days.&lt;br /&gt;
&lt;br /&gt;
== Node Operator Actions Required ==&lt;br /&gt;
&lt;br /&gt;
Node operators will need to update or risk forking the network.&lt;br /&gt;
&lt;br /&gt;
== User Actions Required ==&lt;br /&gt;
&lt;br /&gt;
None required.  However, we will publish some guides on how to migrate to a newer wallet type to take advantage of the PQC algorithms if desired.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=SIP6-PQC&amp;diff=346</id>
		<title>SIP6-PQC</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=SIP6-PQC&amp;diff=346"/>
		<updated>2024-01-04T20:26:14Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
One of the major concepts behind Snowblossom in 2018 was that when quantum computers had become better and started to threaten traditional elliptic curve cryptography, we would be able to switch to new quantum resistant algorithms.  See [[Quantum Tough]]&lt;br /&gt;
&lt;br /&gt;
Well, we might be there.  The NIST Post Quantum Cryptography (PQC) contest has proceeded to some finalists and quantum computers are getting more powerful.&lt;br /&gt;
&lt;br /&gt;
So in this Snowblossom Improvement Proposal we will be adding three new signing algorithms:&lt;br /&gt;
&lt;br /&gt;
* Dilithium&lt;br /&gt;
* Falcon&lt;br /&gt;
* SPHINCS+&lt;br /&gt;
&lt;br /&gt;
These will be supported by the network in additional to the existing signing methods (ECDSA, DSA, RSA, DSTU4150).  It will continue to be up to users to decide which signing algorithms they use to generate their wallets.&lt;br /&gt;
&lt;br /&gt;
== Voting ==&lt;br /&gt;
&lt;br /&gt;
* Passes when 1000 blocks pass containing 25% voting and &amp;gt;50% agreement&lt;br /&gt;
* Pools will represent their miners.&lt;br /&gt;
* Set in your miner or pool configuration file either&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_yes=6&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_no=6&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
This has been tested on testnet and has been running there for several weeks.  It is currently in the https://github.com/snowblossomcoin/snowblossom/tree/pqc-keys branch.&lt;br /&gt;
&lt;br /&gt;
== Risks ==&lt;br /&gt;
&lt;br /&gt;
We are still early in the PQC world.  While all the algorithms are defined enough that the Bouncycastle devs have included them in the standard versions of Bouncycastle cryptography library (which we use) they could still change.  Also, these are also relatively new.  Unexpected vulnerabilities could be found.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
If this SIP is adopted, the roll out will be scheduled roughly 90 days from the vote.  At that time, new binaries, source code and docker images will be available.  This means node operators will need to update within those 90 days.&lt;br /&gt;
&lt;br /&gt;
== Node Operator Actions Required ==&lt;br /&gt;
&lt;br /&gt;
Node operators will need to update or risk forking the network.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=SIP6-PQC&amp;diff=345</id>
		<title>SIP6-PQC</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=SIP6-PQC&amp;diff=345"/>
		<updated>2024-01-04T17:46:59Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: Created page with &amp;quot;== Overview ==   == Voting ==  * Passes when 1000 blocks pass containing 25% voting and &amp;gt;50% agreement * Pools will represent their miners. * Set in your miner or pool configu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Voting ==&lt;br /&gt;
&lt;br /&gt;
* Passes when 1000 blocks pass containing 25% voting and &amp;gt;50% agreement&lt;br /&gt;
* Pools will represent their miners.&lt;br /&gt;
* Set in your miner or pool configuration file either&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_yes=6&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_no=6&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
== Risks ==&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
== Node Operator Actions Required ==&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=SIP5-Sharding&amp;diff=344</id>
		<title>SIP5-Sharding</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=SIP5-Sharding&amp;diff=344"/>
		<updated>2024-01-04T17:46:22Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
This proposal is to bring in the changes in the [https://github.com/snowblossomcoin/snowblossom/tree/shardo shardo] branch.  This change includes the following:&lt;br /&gt;
* Adding a sharded L1 scaling solution&lt;br /&gt;
* Revamp of P2P block synchronization&lt;br /&gt;
* Updating version number to 2.0&lt;br /&gt;
&lt;br /&gt;
The documentation for these changes are in [https://docs.google.com/document/d/17cljhZnAiQTL9yzhZ_INxKx131LUzNs2paP2kCCgljo/edit#heading=h.uosl2b838wbg Book of Snowblossom - Braid]&lt;br /&gt;
&lt;br /&gt;
== Voting ==&lt;br /&gt;
&lt;br /&gt;
* Passes when 1000 blocks pass containing 25% voting and &amp;gt;50% agreement&lt;br /&gt;
* Pools will represent their miners.&lt;br /&gt;
* Set in your miner or pool configuration file either&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_yes=5&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_no=5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
These changes have been in testnet and various smaller scale networks for months.  It seems to be very stable.&lt;br /&gt;
&lt;br /&gt;
* Testnet - https://test-b.snowblossom.org/ https://test-b.snowblossom.org/static/shard-visual.html&lt;br /&gt;
* Shardtest - https://snow-testshard.1209k.com/ https://snow-testshard.1209k.com/static/shard-visual.html&lt;br /&gt;
&lt;br /&gt;
Both of those networks upgraded from a single shard to multiple shards based on load as expected.  &lt;br /&gt;
&lt;br /&gt;
== Things Not Complete ==&lt;br /&gt;
&lt;br /&gt;
After the update, then after enough load to trigger shard creation then clients may need to connect to multiple nodes to get a full view of the network.  This code is not yet complete.&lt;br /&gt;
&lt;br /&gt;
Also, there are some improvements that need to be made to the explorer to show reasonable summary of all the shard status.&lt;br /&gt;
&lt;br /&gt;
== Risks ==&lt;br /&gt;
&lt;br /&gt;
The version 2.0 block syncing uses some new operations that only exist in 2.0 so nodes can only do a full block download from 2.0 nodes.  On the plus side, with the new peer information the 2.0 nodes will automatically find each other.  So as long as there are a few 2.0 nodes, it will be fine.  And the on disk database is compatible so upgrading a node is simply running the new version.&lt;br /&gt;
&lt;br /&gt;
When updating the node and running it for the first time, there is an inplace block summary re-index.  This is a one time update and might take as much as an hour.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
If approved, the activation height will be set to be about 90 days from the acceptance vote to allow for updates.&lt;br /&gt;
&lt;br /&gt;
== Node Operator Required Actions ==&lt;br /&gt;
&lt;br /&gt;
By the block height that we define, all nodes will need to be updated to snowblossom 2.0 or later to validate blocks.  The block header format will switch to version 2 at that point and only version blocks will be valid.&lt;br /&gt;
&lt;br /&gt;
Even after shards are triggered, is based on block size average (so is not expected to by any time soon) without an configuration changes each node will just follow all shards so no changes are required.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Proposals&amp;diff=343</id>
		<title>Proposals</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Proposals&amp;diff=343"/>
		<updated>2024-01-04T17:45:08Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Voting =&lt;br /&gt;
&lt;br /&gt;
* Not voting / Abstaining, will not be counted.&lt;br /&gt;
* Pools vote on behalf of their miners.&lt;br /&gt;
* Miners may vote by appending their config files with: &amp;lt;code&amp;gt;vote_yes=   vote_no=&amp;lt;/code&amp;gt;&lt;br /&gt;
* You may vote for or against proposals such as: &amp;lt;code&amp;gt;vote_yes=1,2,3   vote_no=4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposals =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| ID&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Proposal&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Condition&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Verdict&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [[SIP1-Fix-Block-Reward-Halving-Time]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [[SIP2-Increase-Work-Weighting-For-Higher-Fields]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 7289&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [[SIP3-Add-lock-option-to-TxOuts-and-allow-extra-data]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 22157&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [[SIP4-Optional-Input-Value]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED ~134400&lt;br /&gt;
|- &lt;br /&gt;
| 5&lt;br /&gt;
| [[SIP5-Sharding]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 198613&lt;br /&gt;
|- &lt;br /&gt;
| 6&lt;br /&gt;
| [[SIP6-PQC]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PENDING&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=ConfigOption/min_diff&amp;diff=339</id>
		<title>ConfigOption/min diff</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=ConfigOption/min_diff&amp;diff=339"/>
		<updated>2022-07-06T19:24:30Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: Created page with &amp;quot;==min_diff==  MrPlow - The difficulty used for a new mining session and also the lowest difficulty allowed.  Defaults to 22, meaning a miner has to do on average 2^22 mining h...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==min_diff==&lt;br /&gt;
&lt;br /&gt;
MrPlow - The difficulty used for a new mining session and also the lowest difficulty allowed.  Defaults to 22, meaning a miner has to do on average 2^22 mining hashes to get a share.  If the miner gives shares too fast with this difficulty, then the difficulty is increased until the mining rate is reasonable.&lt;br /&gt;
&lt;br /&gt;
Reasonable is defined as between 4 and 12 shares submitted every 120 seconds.  Difficulty for a session may also be adjusted down automatically, but never lower than the min_diff.&lt;br /&gt;
&lt;br /&gt;
NOTE: CHANGING THIS VALUE ON AN EXISTING MRPLOW DATABASE WILL CAUSE THE VALUE OF EXISTING SHARES IN THE DATABASE TO BE WRONG.&lt;br /&gt;
&lt;br /&gt;
This is because the database storage assumes 1 share equals 1 share a min_diff so if min_diff is changed the value of the existing shares will be wrong.  However, it will be roughly correct and will straighten itself out in a few blocks.  The all your miners are the same before and after a min_diff change, there is no impact on their rewards.  If a new miner starts or increases right after a min_diff change or an old miner drops off, they will get skewed amount for a time.&lt;br /&gt;
&lt;br /&gt;
===Default===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
min_diff=22&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
min_diff=24&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ConfigOptions]]&lt;br /&gt;
[[Category:ConfigOptionsMrPlow]]&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Security_Advisory&amp;diff=338</id>
		<title>Security Advisory</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Security_Advisory&amp;diff=338"/>
		<updated>2022-06-29T18:01:24Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Advisories ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID&lt;br /&gt;
!Date&lt;br /&gt;
!Versions&lt;br /&gt;
!Severity&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Security/SA-1|SA-1]]&lt;br /&gt;
|2020.10.30&lt;br /&gt;
|All&lt;br /&gt;
|none&lt;br /&gt;
|ECDSA signing uses SHA1 hash for signatures&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reviews ==&lt;br /&gt;
&lt;br /&gt;
Security Reviews are for when the development team analysis a potential issue and reports on it.  If some action needed to be taken, it would be an advisory instead.  So reviews show that something was considered and then determined to be a non-issue for Snowblossom.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID&lt;br /&gt;
!Date&lt;br /&gt;
!Versions&lt;br /&gt;
!Severity&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Security/SR-1|SR-1]]&lt;br /&gt;
|2022.04.20&lt;br /&gt;
|All&lt;br /&gt;
|none&lt;br /&gt;
|Review of CVE-2022-21449: Psychic Signatures in Java&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
&lt;br /&gt;
If you know or suspect any security issues, please report them via:&lt;br /&gt;
&lt;br /&gt;
* Email: security@snowblossom.org&lt;br /&gt;
* Discord: fireduck#6402&lt;br /&gt;
* Slack: Fireduck&lt;br /&gt;
&lt;br /&gt;
[https://securitytxt.org/ rfc9116] security file: [https://snowblossom.org/.well-known/security.txt security.txt]&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Security_Advisory&amp;diff=337</id>
		<title>Security Advisory</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Security_Advisory&amp;diff=337"/>
		<updated>2022-06-29T16:16:22Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Advisories ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID&lt;br /&gt;
!Date&lt;br /&gt;
!Versions&lt;br /&gt;
!Severity&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Security/SA-1|SA-1]]&lt;br /&gt;
|2020.10.30&lt;br /&gt;
|All&lt;br /&gt;
|none&lt;br /&gt;
|ECDSA signing uses SHA1 hash for signatures&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reviews ==&lt;br /&gt;
&lt;br /&gt;
Security Reviews are for when the development team analysis a potential issue and reports on it.  If some action needed to be taken, it would be an advisory instead.  So reviews show that something was considered and then determined to be a non-issue for Snowblossom.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID&lt;br /&gt;
!Date&lt;br /&gt;
!Versions&lt;br /&gt;
!Severity&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Security/SR-1|SR-1]]&lt;br /&gt;
|2022.04.20&lt;br /&gt;
|All&lt;br /&gt;
|none&lt;br /&gt;
|Review of CVE-2022-21449: Psychic Signatures in Java&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
&lt;br /&gt;
If you know or suspect any security issues, please report them via:&lt;br /&gt;
&lt;br /&gt;
* Email: security@snowblossom.org&lt;br /&gt;
* Discord: fireduck#6402&lt;br /&gt;
* Slack: Fireduck&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Creators&amp;diff=336</id>
		<title>Creators</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Creators&amp;diff=336"/>
		<updated>2022-06-15T17:11:18Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Fireduck - Joseph Gleason =&lt;br /&gt;
&lt;br /&gt;
[[File:Fireduck.jpg|Fireduck]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mini-resume ==&lt;br /&gt;
&lt;br /&gt;
* 2003-2008 - ACM Programming Team member and later coach&lt;br /&gt;
* 2009-2013 - Amazon AWS Messaging (SQS/SNS)&lt;br /&gt;
* 2013-2018 - Google SRE&lt;br /&gt;
&lt;br /&gt;
== Cryptowork ==&lt;br /&gt;
&lt;br /&gt;
* 2013 [https://github.com/fireduck64/SockThing Sockthing] Java bitcoin mining pool software&lt;br /&gt;
* 2013 [http://hhtt.1209k.com/ Horrible Horrendous Terrible Tremendous Mining Pool]&lt;br /&gt;
* 2014-2015 [https://github.com/fireduck64/jelectrum jelectrum] Java electrum server&lt;br /&gt;
* 2017 [https://1209k.com/secure-bitcoin/ securing bitcoin] a little paper on how to lose coins&lt;br /&gt;
* 2018 [https://snowblossom.org Snowblossom]&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
Without really meaning to, the projects I've worked on have ended up being an in depth study of Bitcoin internals. With my mining pool software I had to get rather intimate with block details. With my electrum work I got to learn a great deal about UTXO databases, fast and stable local data stores (rocksdb FTW) and the various ways to index and think about block chains. This has put me in the position to do this snowblossom work learning from many Bitcoin lessons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
= Clueless - Zachary Coon =&lt;br /&gt;
&lt;br /&gt;
[[images/forest_small.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Technical Work ==&lt;br /&gt;
&lt;br /&gt;
* 2011 Digital Cinema District Technician&lt;br /&gt;
* 2014 Applications Engineer&lt;br /&gt;
* 2016 Development Operations - Hospital Monitoring&lt;br /&gt;
&lt;br /&gt;
== Crypto Related ==&lt;br /&gt;
&lt;br /&gt;
* Long time user of #bitcoin, /r/electrum&lt;br /&gt;
* Various recovery, documentation, and support roles for Bitcoin&lt;br /&gt;
&lt;br /&gt;
== About Me ==&lt;br /&gt;
&lt;br /&gt;
All about bringing technology to people. I've always enjoyed consulting, teaching, and the constant challenges. Most of my work has been in site reliability, monitoring, data visualization, frontends, backends building tools to make life easier, and smoothing out operations. My focus will likely be community, project management, testing, documentation, python tooling and implementations.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=File:Fireduck.jpg&amp;diff=335</id>
		<title>File:Fireduck.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=File:Fireduck.jpg&amp;diff=335"/>
		<updated>2022-06-15T17:10:52Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Docker&amp;diff=334</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Docker&amp;diff=334"/>
		<updated>2022-06-01T18:19:45Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Images ==&lt;br /&gt;
&lt;br /&gt;
Images are hosted on Dockerhub: [https://hub.docker.com/u/snowblossom Docker Snowblossom]&lt;br /&gt;
&lt;br /&gt;
We have the following docker images that are automatically updated:&lt;br /&gt;
&lt;br /&gt;
* snowblossom/node - Network Node&lt;br /&gt;
* snowblossom/explorer - Snowblossom explorer web server&lt;br /&gt;
* snowblossom/client - CLI Client&lt;br /&gt;
* snowblossom/poolminer - Regular miner&lt;br /&gt;
* snowblossom/pool - Mr Plow mining pool&lt;br /&gt;
&lt;br /&gt;
Other images:&lt;br /&gt;
&lt;br /&gt;
* snowblossom/snowblossom - Image that can run any of the above with a command line option of which to run.  Not build automatically.  Mostly kept for testing and compatibility with early docker setups.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
All images assume /data is a good place to put things.  Some don't really need any persistent data (like exploder).&lt;br /&gt;
So if you want them to not start from scratch each time, give them a /data that is a persistent volume.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
These all start with somewhat reasonable defaults but any options can be overwritten with environment variables that start with &amp;quot;snowblossom_&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Any config options found here [[:Category:ConfigOptions]] may be used.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
To start a basic node but enable tx_index and addr_index:&lt;br /&gt;
&lt;br /&gt;
    docker run -d --restart always --name snowblossom.node --network host \&lt;br /&gt;
      -v snownode:/data -e snowblossom_addr_index=true -e snowblossom_tx_index=true snowblossom/node:latest&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To run an rpc server client:&lt;br /&gt;
    docker run --pull always -it --rm --network host \&lt;br /&gt;
      -v snow.client:/data \&lt;br /&gt;
      -e snowblossom_rpc_port=9112 \&lt;br /&gt;
      -e snowblossom_rpc_username=hello \&lt;br /&gt;
      -e snowblossom_rpc_password=crabs \&lt;br /&gt;
      snowblossom/snowblossom client rpcserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: the above client is using the the snowblossom/snowblossom image until [https://github.com/snowblossomcoin/snowblossom/issues/224 issue 224] is fixed.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Docker&amp;diff=333</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Docker&amp;diff=333"/>
		<updated>2022-06-01T18:14:12Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Images ==&lt;br /&gt;
&lt;br /&gt;
Images are hosted on Dockerhub: [https://hub.docker.com/u/snowblossom Docker Snowblossom]&lt;br /&gt;
&lt;br /&gt;
We have the following docker images that are automatically updated:&lt;br /&gt;
&lt;br /&gt;
* snowblossom/node - Network Node&lt;br /&gt;
* snowblossom/explorer - Snowblossom explorer web server&lt;br /&gt;
* snowblossom/client - CLI Client&lt;br /&gt;
* snowblossom/poolminer - Regular miner&lt;br /&gt;
* snowblossom/pool - Mr Plow mining pool&lt;br /&gt;
&lt;br /&gt;
Other images:&lt;br /&gt;
&lt;br /&gt;
* snowblossom/snowblossom - Image that can run any of the above with a command line option of which to run.  Not build automatically.  Mostly kept for testing and compatibility with early docker setups.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
All images assume /data is a good place to put things.  Some don't really need any persistent data (like exploder).&lt;br /&gt;
So if you want them to not start from scratch each time, give them a /data that is a persistent volume.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
These all start with somewhat reasonable defaults but any options can be overwritten with environment variables that start with &amp;quot;snowblossom_&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Any config options found here [[:Category:ConfigOptions]] may be used.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
To start a basic node but enable tx_index and addr_index:&lt;br /&gt;
&lt;br /&gt;
    docker run -d --restart always --name snowblossom.node --network host \&lt;br /&gt;
      -v snownode:/data -e snowblossom_addr_index=true -e snowblossom_tx_index=true snowblossom/node:latest&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To run an rpc server client:&lt;br /&gt;
    docker run --pull always -it --rm --network host \&lt;br /&gt;
      -e snowblossom_rpc_port=9112 \&lt;br /&gt;
      -e snowblossom_rpc_username=hello \&lt;br /&gt;
      -e snowblossom_rpc_password=crabs \&lt;br /&gt;
      snowblossom/snowblossom client rpcserver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: the above client is using the the snowblossom/snowblossom image until [https://github.com/snowblossomcoin/snowblossom/issues/224 issue 224] is fixed.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Main_Page&amp;diff=332</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Main_Page&amp;diff=332"/>
		<updated>2022-05-31T18:33:10Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Snowblossom Cryptocurrency =&lt;br /&gt;
&lt;br /&gt;
Snowblossom is a fresh take on cryptocurrency.&lt;br /&gt;
&lt;br /&gt;
* Simple&lt;br /&gt;
* Scalable&lt;br /&gt;
* Portable&lt;br /&gt;
* [[Quantum Tough]]&lt;br /&gt;
* Genuinely ASIC Resistant&lt;br /&gt;
* Ready to go Block Explorer, Pool, Miner software&lt;br /&gt;
&lt;br /&gt;
'''Information'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Security Advisory]]'''&lt;br /&gt;
* '''[[Download]]'''&lt;br /&gt;
* '''[[Features]]'''&lt;br /&gt;
* '''[[Creators]]'''&lt;br /&gt;
* '''[[Community]]'''&lt;br /&gt;
* '''[[Launch]]'''&lt;br /&gt;
* '''[https://github.com/snowblossomcoin/snowblossom/blob/master/RELEASE-NOTES.md Release Notes]'''&lt;br /&gt;
* '''[[:Category:Mining|Mining]]'''&lt;br /&gt;
* '''[[Programs]]'''&lt;br /&gt;
* '''[[Migration]]'''&lt;br /&gt;
* '''[[Road Map]]'''&lt;br /&gt;
* '''[[Channels]]'''&lt;br /&gt;
&lt;br /&gt;
'''Using Snowblossom'''&lt;br /&gt;
* '''[[:Category:ConfigOptions|Config Options]]'''&lt;br /&gt;
&lt;br /&gt;
'''Get Started'''&lt;br /&gt;
&lt;br /&gt;
* '''[[FAQ]]'''&lt;br /&gt;
* '''[[Quickstart]]'''&lt;br /&gt;
* '''[[Quickstart-from-Source]]'''&lt;br /&gt;
* '''[[Docker]]'''&lt;br /&gt;
* '''[[User-Guide]]'''&lt;br /&gt;
* '''[[Config-Files]]'''&lt;br /&gt;
* '''[[Mining-Pools]]'''&lt;br /&gt;
* '''[[Trading]]'''&lt;br /&gt;
* '''[https://1209k.com/faucet/ Faucet]'''&lt;br /&gt;
* '''[[:Category:HowTo]]'''&lt;br /&gt;
&lt;br /&gt;
'''Further'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Proposals]]'''&lt;br /&gt;
* '''[[Future-Plans]]'''&lt;br /&gt;
* '''[http://testnet.snowblossom-explorer.org/ Testnet Explorer with Faucet]'''&lt;br /&gt;
* '''[http://snowblossom.org/richlist.txt Rich address list]'''&lt;br /&gt;
&lt;br /&gt;
'''Developers'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Install-from-Source]]'''&lt;br /&gt;
* '''[[Technical-Design]]'''&lt;br /&gt;
* '''[[JSON-RPC-Commands]]'''&lt;br /&gt;
* '''[[Watch-only-Wallets]]'''&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Docker&amp;diff=331</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Docker&amp;diff=331"/>
		<updated>2022-05-31T18:32:51Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Images ==&lt;br /&gt;
&lt;br /&gt;
Images are hosted on Dockerhub: [https://hub.docker.com/u/snowblossom Docker Snowblossom]&lt;br /&gt;
&lt;br /&gt;
We have the following docker images that are automatically updated:&lt;br /&gt;
&lt;br /&gt;
* snowblossom/node - Network Node&lt;br /&gt;
* snowblossom/explorer - Snowblossom explorer web server&lt;br /&gt;
* snowblossom/client - CLI Client&lt;br /&gt;
* snowblossom/poolminer - Regular miner&lt;br /&gt;
* snowblossom/pool - Mr Plow mining pool&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Persistence ==&lt;br /&gt;
&lt;br /&gt;
All images assume /data is a good place to put things.  Some don't really need any persistent data (like exploder).&lt;br /&gt;
So if you want them to not start from scratch each time, give them a /data that is a persistent volume.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
These all start with somewhat reasonable defaults but any options can be overwritten with environment variables that start with &amp;quot;snowblossom_&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Any config options found here [[:Category:ConfigOptions]] may be used.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
To start a basic node but enable tx_index and addr_index:&lt;br /&gt;
&lt;br /&gt;
    docker run -d --restart always --name snowblossom.node --network host \&lt;br /&gt;
      -v snownode:/data -e snowblossom_addr_index=true -e snowblossom_tx_index=true snowblossom/node:latest&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Docker&amp;diff=330</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Docker&amp;diff=330"/>
		<updated>2022-05-31T18:30:23Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: Created page with &amp;quot;== Images ==  Images are hosted on Dockerhub: [https://hub.docker.com/u/snowblossom Docker Snowblossom]  We have the following docker images that are automatically updated:  *...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Images ==&lt;br /&gt;
&lt;br /&gt;
Images are hosted on Dockerhub: [https://hub.docker.com/u/snowblossom Docker Snowblossom]&lt;br /&gt;
&lt;br /&gt;
We have the following docker images that are automatically updated:&lt;br /&gt;
&lt;br /&gt;
* snowblossom/node - Network Node&lt;br /&gt;
* snowblossom/explorer - Snowblossom explorer web server&lt;br /&gt;
* snowblossom/client - CLI Client&lt;br /&gt;
* snowblossom/poolminer - Regular miner&lt;br /&gt;
* snowblossom/pool - Mr Plow mining pool&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
These all start with somewhat reasonable defaults but any options can be overwritten with environment variables that start with &amp;quot;snowblossom_&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Any config options found here [[:Category:ConfigOptions]] may be used.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
To start a basic node but enable tx_index and addr_index:&lt;br /&gt;
&lt;br /&gt;
    docker run -d --restart always --name snowblossom.node --network host \&lt;br /&gt;
      -v snownode:/data -e snowblossom_addr_index=true -e snowblossom_tx_index=true snowblossom/node:latest&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Download&amp;diff=329</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Download&amp;diff=329"/>
		<updated>2022-05-31T18:16:46Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= New Location =&lt;br /&gt;
&lt;br /&gt;
The new download page should be used: [https://snowblossom.org/downloads.html Downloads]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==GUI Wallet==&lt;br /&gt;
&lt;br /&gt;
There is now a GUI wallet, known as [[IceLeaf]].  It can run a full node or act as a light client using other full nodes for blockchain data.  It supports creating wallets, sending and receiving.&lt;br /&gt;
&lt;br /&gt;
For windows, you'll need a modern 64-bit Java. It will work with anything greater than 8, however it was only in 10 or 11 that the OS UI scaling was respected so if you have a high resolution display you'll want newer.  64-bit is required to run a node, which is an option within the GUI client.&lt;br /&gt;
&lt;br /&gt;
For Windows and macOS, java can be downloaded here:&lt;br /&gt;
&lt;br /&gt;
[https://www.oracle.com/java/technologies/javase-jdk14-downloads.html JDK14 Download]&lt;br /&gt;
[https://jdk.java.net/14/ Openjdk 14]&lt;br /&gt;
&lt;br /&gt;
There are two variants of [[IceLeaf]].  One for mainnet and one for testnet. &lt;br /&gt;
&lt;br /&gt;
===Release Builds===&lt;br /&gt;
&lt;br /&gt;
* [https://snowblossom.org/releases/index.html Releases]&lt;br /&gt;
&lt;br /&gt;
===Dev Builds===&lt;br /&gt;
&lt;br /&gt;
* [https://snowblossom.org/downloads.html Downloads]&lt;br /&gt;
&lt;br /&gt;
==Command Line and Mining==&lt;br /&gt;
&lt;br /&gt;
There are several ways to download builds.  The easiest for most users is to download a release build, which contains configuration files, scripts and the java binaries:&lt;br /&gt;
&lt;br /&gt;
* [https://snowblossom.org/releases/index.html Releases]&lt;br /&gt;
&lt;br /&gt;
If you need something not included in the release or need a recent development build, those are here:&lt;br /&gt;
&lt;br /&gt;
Note: these are development versions, they might not work entirely and might reflect work in progress.&lt;br /&gt;
&lt;br /&gt;
* [https://snowblossom.org/jars/Arktika_deploy.jar Arktika]&lt;br /&gt;
* [https://snowblossom.org/jars/SnowBlossomNode_deploy.jar SnowBlossomNode]&lt;br /&gt;
* [https://snowblossom.org/jars/SnowBlossomClient_deploy.jar SnowBlossomClient]&lt;br /&gt;
* [https://snowblossom.org/jars/PoolMiner_deploy.jar PoolMiner]&lt;br /&gt;
* [https://snowblossom.org/jars/SurfMiner_deploy.jar SurfMiner]&lt;br /&gt;
&lt;br /&gt;
However, if you can build from source with bazel, that is usually better.  The jars above might be out of date.&lt;br /&gt;
&lt;br /&gt;
==Android==&lt;br /&gt;
&lt;br /&gt;
* [https://play.google.com/apps/testing/com.enginious.snowblossom Snowblossom Android Beta]&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Download&amp;diff=328</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Download&amp;diff=328"/>
		<updated>2022-05-24T06:04:56Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: /* Dev Builds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==GUI Wallet==&lt;br /&gt;
&lt;br /&gt;
There is now a GUI wallet, known as [[IceLeaf]].  It can run a full node or act as a light client using other full nodes for blockchain data.  It supports creating wallets, sending and receiving.&lt;br /&gt;
&lt;br /&gt;
For windows, you'll need a modern 64-bit Java. It will work with anything greater than 8, however it was only in 10 or 11 that the OS UI scaling was respected so if you have a high resolution display you'll want newer.  64-bit is required to run a node, which is an option within the GUI client.&lt;br /&gt;
&lt;br /&gt;
For Windows and macOS, java can be downloaded here:&lt;br /&gt;
&lt;br /&gt;
[https://www.oracle.com/java/technologies/javase-jdk14-downloads.html JDK14 Download]&lt;br /&gt;
[https://jdk.java.net/14/ Openjdk 14]&lt;br /&gt;
&lt;br /&gt;
There are two variants of [[IceLeaf]].  One for mainnet and one for testnet. &lt;br /&gt;
&lt;br /&gt;
===Release Builds===&lt;br /&gt;
&lt;br /&gt;
* [https://snowblossom.org/releases/index.html Releases]&lt;br /&gt;
&lt;br /&gt;
===Dev Builds===&lt;br /&gt;
&lt;br /&gt;
* [https://snowblossom.org/downloads.html Downloads]&lt;br /&gt;
&lt;br /&gt;
==Command Line and Mining==&lt;br /&gt;
&lt;br /&gt;
There are several ways to download builds.  The easiest for most users is to download a release build, which contains configuration files, scripts and the java binaries:&lt;br /&gt;
&lt;br /&gt;
* [https://snowblossom.org/releases/index.html Releases]&lt;br /&gt;
&lt;br /&gt;
If you need something not included in the release or need a recent development build, those are here:&lt;br /&gt;
&lt;br /&gt;
Note: these are development versions, they might not work entirely and might reflect work in progress.&lt;br /&gt;
&lt;br /&gt;
* [https://snowblossom.org/jars/Arktika_deploy.jar Arktika]&lt;br /&gt;
* [https://snowblossom.org/jars/SnowBlossomNode_deploy.jar SnowBlossomNode]&lt;br /&gt;
* [https://snowblossom.org/jars/SnowBlossomClient_deploy.jar SnowBlossomClient]&lt;br /&gt;
* [https://snowblossom.org/jars/PoolMiner_deploy.jar PoolMiner]&lt;br /&gt;
* [https://snowblossom.org/jars/SurfMiner_deploy.jar SurfMiner]&lt;br /&gt;
&lt;br /&gt;
However, if you can build from source with bazel, that is usually better.  The jars above might be out of date.&lt;br /&gt;
&lt;br /&gt;
==Android==&lt;br /&gt;
&lt;br /&gt;
* [https://play.google.com/apps/testing/com.enginious.snowblossom Snowblossom Android Beta]&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Security/SR-1&amp;diff=327</id>
		<title>Security/SR-1</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Security/SR-1&amp;diff=327"/>
		<updated>2022-04-21T04:07:21Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Review 1 - CVE-2022-21449: Psychic Signatures in Java&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
In this CVE some versions of Java do not do proper validation of ECDSA signatures and the signatures can be trivially faked.&lt;br /&gt;
&lt;br /&gt;
This of course seems alarming since Snowblossom makes extensive use of ECDSA signatures, especially for seed based wallets.&lt;br /&gt;
&lt;br /&gt;
However, in review of the issue it was found that while the flaw does absolutely exist in some versions of Java, no version of Snowblossom&lt;br /&gt;
uses the Java provided security provider for ECDSA signatures.&lt;br /&gt;
&lt;br /&gt;
In the relevant section of Snowblossom code, we are always explicitly using the Bouncy Castle (BC) cryptographic provider.&lt;br /&gt;
&lt;br /&gt;
    Signature sig_engine = Signature.getInstance(algo, Globals.getCryptoProviderName());&lt;br /&gt;
&lt;br /&gt;
== Impact ==&lt;br /&gt;
&lt;br /&gt;
None.  No version of Snowblossom will use the Java ECDSA provider for signatures so we don't care.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://neilmadden.blog/2022/04/19/psychic-signatures-in-java/&lt;br /&gt;
&lt;br /&gt;
https://github.com/snowblossomcoin/snowblossom/blob/eaa43613032f709df0e573a3a911c946f1f892e6/lib/src/SignatureUtil.java#L95&lt;br /&gt;
&lt;br /&gt;
== Test Procedure ==&lt;br /&gt;
&lt;br /&gt;
On a system with the problematic java versions the test code was run to reproduce the issue.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Testing blank signature with bouncycastle:&lt;br /&gt;
Should report false meaning bad signature did not validate&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Testing blank signature java provider:&lt;br /&gt;
Should report false meaning bad signature did not validate&lt;br /&gt;
true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As expected, the bouncy castle does not have the problem but the java provider does.&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.security.*;&lt;br /&gt;
&lt;br /&gt;
import java.math.BigInteger;&lt;br /&gt;
import org.bouncycastle.asn1.*;&lt;br /&gt;
&lt;br /&gt;
public class Prob&lt;br /&gt;
{&lt;br /&gt;
  public static byte[] getBlankSig()&lt;br /&gt;
    throws Exception&lt;br /&gt;
  {&lt;br /&gt;
    BigInteger r = BigInteger.ZERO;&lt;br /&gt;
&lt;br /&gt;
    BigInteger s = BigInteger.ZERO;&lt;br /&gt;
&lt;br /&gt;
    ASN1EncodableVector v = new ASN1EncodableVector();&lt;br /&gt;
    v.add(new ASN1Integer(r)); v.add(new ASN1Integer(s));&lt;br /&gt;
&lt;br /&gt;
    return new DERSequence(v) .getEncoded();&lt;br /&gt;
&lt;br /&gt;
  public static void main(String args[]) throws Exception&lt;br /&gt;
  {&lt;br /&gt;
      Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());&lt;br /&gt;
&lt;br /&gt;
      KeyPair keys = KeyPairGenerator.getInstance(&amp;quot;EC&amp;quot;).generateKeyPair();&lt;br /&gt;
      Signature sig_engine = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;);&lt;br /&gt;
      sig_engine.initSign(keys.getPrivate());&lt;br /&gt;
      sig_engine.update(&amp;quot;proper data&amp;quot;.getBytes());&lt;br /&gt;
&lt;br /&gt;
      System.out.println(&amp;quot;Testing blank signature with bouncycastle:&amp;quot;);&lt;br /&gt;
      System.out.println(&amp;quot;Should report false meaning bad signature did not validate&amp;quot;);&lt;br /&gt;
      {&lt;br /&gt;
        Signature sig = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;,&amp;quot;BC&amp;quot;);&lt;br /&gt;
        sig.initVerify(keys.getPublic());&lt;br /&gt;
        sig.update(&amp;quot;Hello, World&amp;quot;.getBytes());&lt;br /&gt;
        System.out.println(sig.verify(getBlankSig()));&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println();&lt;br /&gt;
      System.out.println(&amp;quot;Testing blank signature java provider:&amp;quot;);&lt;br /&gt;
      System.out.println(&amp;quot;Should report false meaning bad signature did not validate&amp;quot;);&lt;br /&gt;
      {&lt;br /&gt;
        Signature sig = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;,&amp;quot;SunEC&amp;quot;);&lt;br /&gt;
        sig.initVerify(keys.getPublic());&lt;br /&gt;
        sig.update(&amp;quot;Hello, World&amp;quot;.getBytes());&lt;br /&gt;
        System.out.println(sig.verify(getBlankSig()));&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Security/SR-1&amp;diff=326</id>
		<title>Security/SR-1</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Security/SR-1&amp;diff=326"/>
		<updated>2022-04-21T04:06:28Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Review 1 - CVE-2022-21449: Psychic Signatures in Java&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
In this CVE some versions of Java do not do proper validation of ECDSA signatures and the signatures can be trivially faked.&lt;br /&gt;
&lt;br /&gt;
This of course seems alarming since Snowblossom makes extensive use of ECDSA signatures, especially for seed based wallets.&lt;br /&gt;
&lt;br /&gt;
However, in review of the issue it was found that while the flaw does absolutely exist in some versions of Java, no version of Snowblossom&lt;br /&gt;
uses the Java provided security provider for ECDSA signatures.&lt;br /&gt;
&lt;br /&gt;
In the relevant section of Snowblossom code, we are always explicitly using the Bouncy Castle (BC) cryptographic provider.&lt;br /&gt;
&lt;br /&gt;
    Signature sig_engine = Signature.getInstance(algo, Globals.getCryptoProviderName());&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://neilmadden.blog/2022/04/19/psychic-signatures-in-java/&lt;br /&gt;
&lt;br /&gt;
https://github.com/snowblossomcoin/snowblossom/blob/eaa43613032f709df0e573a3a911c946f1f892e6/lib/src/SignatureUtil.java#L95&lt;br /&gt;
&lt;br /&gt;
== Test Procedure ==&lt;br /&gt;
&lt;br /&gt;
On a system with the problematic java versions the test code was run to reproduce the issue.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Testing blank signature with bouncycastle:&lt;br /&gt;
Should report false meaning bad signature did not validate&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Testing blank signature java provider:&lt;br /&gt;
Should report false meaning bad signature did not validate&lt;br /&gt;
true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As expected, the bouncy castle does not have the problem but the java provider does.&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.security.*;&lt;br /&gt;
&lt;br /&gt;
import java.math.BigInteger;&lt;br /&gt;
import org.bouncycastle.asn1.*;&lt;br /&gt;
&lt;br /&gt;
public class Prob&lt;br /&gt;
{&lt;br /&gt;
  public static byte[] getBlankSig()&lt;br /&gt;
    throws Exception&lt;br /&gt;
  {&lt;br /&gt;
    BigInteger r = BigInteger.ZERO;&lt;br /&gt;
&lt;br /&gt;
    BigInteger s = BigInteger.ZERO;&lt;br /&gt;
&lt;br /&gt;
    ASN1EncodableVector v = new ASN1EncodableVector();&lt;br /&gt;
    v.add(new ASN1Integer(r)); v.add(new ASN1Integer(s));&lt;br /&gt;
&lt;br /&gt;
    return new DERSequence(v) .getEncoded();&lt;br /&gt;
&lt;br /&gt;
  public static void main(String args[]) throws Exception&lt;br /&gt;
  {&lt;br /&gt;
      Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());&lt;br /&gt;
&lt;br /&gt;
      KeyPair keys = KeyPairGenerator.getInstance(&amp;quot;EC&amp;quot;).generateKeyPair();&lt;br /&gt;
      Signature sig_engine = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;);&lt;br /&gt;
      sig_engine.initSign(keys.getPrivate());&lt;br /&gt;
      sig_engine.update(&amp;quot;proper data&amp;quot;.getBytes());&lt;br /&gt;
&lt;br /&gt;
      System.out.println(&amp;quot;Testing blank signature with bouncycastle:&amp;quot;);&lt;br /&gt;
      System.out.println(&amp;quot;Should report false meaning bad signature did not validate&amp;quot;);&lt;br /&gt;
      {&lt;br /&gt;
        Signature sig = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;,&amp;quot;BC&amp;quot;);&lt;br /&gt;
        sig.initVerify(keys.getPublic());&lt;br /&gt;
        sig.update(&amp;quot;Hello, World&amp;quot;.getBytes());&lt;br /&gt;
        System.out.println(sig.verify(getBlankSig()));&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println();&lt;br /&gt;
      System.out.println(&amp;quot;Testing blank signature java provider:&amp;quot;);&lt;br /&gt;
      System.out.println(&amp;quot;Should report false meaning bad signature did not validate&amp;quot;);&lt;br /&gt;
      {&lt;br /&gt;
        Signature sig = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;,&amp;quot;SunEC&amp;quot;);&lt;br /&gt;
        sig.initVerify(keys.getPublic());&lt;br /&gt;
        sig.update(&amp;quot;Hello, World&amp;quot;.getBytes());&lt;br /&gt;
        System.out.println(sig.verify(getBlankSig()));&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Security/SR-1&amp;diff=325</id>
		<title>Security/SR-1</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Security/SR-1&amp;diff=325"/>
		<updated>2022-04-21T04:05:19Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Review 1 - CVE-2022-21449: Psychic Signatures in Java&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
In this CVE some versions of Java do not do proper validation of ECDSA signatures and the signatures can be trivially faked.&lt;br /&gt;
&lt;br /&gt;
This of course seems alarming since Snowblossom makes extensive use of ECDSA signatures, especially for seed based wallets.&lt;br /&gt;
&lt;br /&gt;
However, in review of the issue it was found that while the flaw does absolutely exist in some versions of Java, no version of Snowblossom&lt;br /&gt;
uses the Java provided security provider for ECDSA signatures.&lt;br /&gt;
&lt;br /&gt;
In the relevant section of Snowblossom code, we are always explicitly using the Bouncy Castle (BC) cryptographic provider.&lt;br /&gt;
&lt;br /&gt;
    Signature sig_engine = Signature.getInstance(algo, Globals.getCryptoProviderName());&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://neilmadden.blog/2022/04/19/psychic-signatures-in-java/&lt;br /&gt;
&lt;br /&gt;
== Test Procedure ==&lt;br /&gt;
&lt;br /&gt;
On a system with the problematic java versions the test code was run to reproduce the issue.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Testing blank signature with bouncycastle:&lt;br /&gt;
Should report false meaning bad signature did not validate&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Testing blank signature java provider:&lt;br /&gt;
Should report false meaning bad signature did not validate&lt;br /&gt;
true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As expected, the bouncy castle does not have the problem but the java provider does.&lt;br /&gt;
&lt;br /&gt;
== Test Code ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.security.*;&lt;br /&gt;
&lt;br /&gt;
import java.math.BigInteger;&lt;br /&gt;
import org.bouncycastle.asn1.*;&lt;br /&gt;
&lt;br /&gt;
public class Prob&lt;br /&gt;
{&lt;br /&gt;
  public static byte[] getBlankSig()&lt;br /&gt;
    throws Exception&lt;br /&gt;
  {&lt;br /&gt;
    BigInteger r = BigInteger.ZERO;&lt;br /&gt;
&lt;br /&gt;
    BigInteger s = BigInteger.ZERO;&lt;br /&gt;
&lt;br /&gt;
    ASN1EncodableVector v = new ASN1EncodableVector();&lt;br /&gt;
    v.add(new ASN1Integer(r)); v.add(new ASN1Integer(s));&lt;br /&gt;
&lt;br /&gt;
    return new DERSequence(v) .getEncoded();&lt;br /&gt;
&lt;br /&gt;
  public static void main(String args[]) throws Exception&lt;br /&gt;
  {&lt;br /&gt;
      Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());&lt;br /&gt;
&lt;br /&gt;
      KeyPair keys = KeyPairGenerator.getInstance(&amp;quot;EC&amp;quot;).generateKeyPair();&lt;br /&gt;
      Signature sig_engine = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;);&lt;br /&gt;
      sig_engine.initSign(keys.getPrivate());&lt;br /&gt;
      sig_engine.update(&amp;quot;proper data&amp;quot;.getBytes());&lt;br /&gt;
&lt;br /&gt;
      System.out.println(&amp;quot;Testing blank signature with bouncycastle:&amp;quot;);&lt;br /&gt;
      System.out.println(&amp;quot;Should report false meaning bad signature did not validate&amp;quot;);&lt;br /&gt;
      {&lt;br /&gt;
        Signature sig = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;,&amp;quot;BC&amp;quot;);&lt;br /&gt;
        sig.initVerify(keys.getPublic());&lt;br /&gt;
        sig.update(&amp;quot;Hello, World&amp;quot;.getBytes());&lt;br /&gt;
        System.out.println(sig.verify(getBlankSig()));&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println();&lt;br /&gt;
      System.out.println(&amp;quot;Testing blank signature java provider:&amp;quot;);&lt;br /&gt;
      System.out.println(&amp;quot;Should report false meaning bad signature did not validate&amp;quot;);&lt;br /&gt;
      {&lt;br /&gt;
        Signature sig = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;,&amp;quot;SunEC&amp;quot;);&lt;br /&gt;
        sig.initVerify(keys.getPublic());&lt;br /&gt;
        sig.update(&amp;quot;Hello, World&amp;quot;.getBytes());&lt;br /&gt;
        System.out.println(sig.verify(getBlankSig()));&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Security/SR-1&amp;diff=324</id>
		<title>Security/SR-1</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Security/SR-1&amp;diff=324"/>
		<updated>2022-04-21T04:04:28Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Review 1 - CVE-2022-21449: Psychic Signatures in Java&lt;br /&gt;
&lt;br /&gt;
## Overview&lt;br /&gt;
&lt;br /&gt;
In this CVE some versions of Java do not do proper validation of ECDSA signatures and the signatures can be trivially faked.&lt;br /&gt;
&lt;br /&gt;
This of course seems alarming since Snowblossom makes extensive use of ECDSA signatures, especially for seed based wallets.&lt;br /&gt;
&lt;br /&gt;
However, in review of the issue it was found that while the flaw does absolutely exist in some versions of Java, no version of Snowblossom&lt;br /&gt;
uses the Java provided security provider for ECDSA signatures.&lt;br /&gt;
&lt;br /&gt;
In the relevant section of Snowblossom code, we are always explicitly using the Bouncy Castle (BC) cryptographic provider.&lt;br /&gt;
&lt;br /&gt;
    Signature sig_engine = Signature.getInstance(algo, Globals.getCryptoProviderName());&lt;br /&gt;
&lt;br /&gt;
## References&lt;br /&gt;
&lt;br /&gt;
https://neilmadden.blog/2022/04/19/psychic-signatures-in-java/&lt;br /&gt;
&lt;br /&gt;
## Test Procedure&lt;br /&gt;
&lt;br /&gt;
On a system with the problematic java versions the test code was run to reproduce the issue.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Testing blank signature with bouncycastle:&lt;br /&gt;
Should report false meaning bad signature did not validate&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Testing blank signature java provider:&lt;br /&gt;
Should report false meaning bad signature did not validate&lt;br /&gt;
true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As expected, the bouncy castle does not have the problem but the java provider does.&lt;br /&gt;
&lt;br /&gt;
## Test Code&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.security.*;&lt;br /&gt;
&lt;br /&gt;
import java.math.BigInteger;&lt;br /&gt;
import org.bouncycastle.asn1.*;&lt;br /&gt;
&lt;br /&gt;
public class Prob&lt;br /&gt;
{&lt;br /&gt;
  public static byte[] getBlankSig()&lt;br /&gt;
    throws Exception&lt;br /&gt;
  {&lt;br /&gt;
    BigInteger r = BigInteger.ZERO;&lt;br /&gt;
&lt;br /&gt;
    BigInteger s = BigInteger.ZERO;&lt;br /&gt;
&lt;br /&gt;
    ASN1EncodableVector v = new ASN1EncodableVector();&lt;br /&gt;
    v.add(new ASN1Integer(r)); v.add(new ASN1Integer(s));&lt;br /&gt;
&lt;br /&gt;
    return new DERSequence(v) .getEncoded();&lt;br /&gt;
&lt;br /&gt;
  public static void main(String args[]) throws Exception&lt;br /&gt;
  {&lt;br /&gt;
      Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());&lt;br /&gt;
&lt;br /&gt;
      KeyPair keys = KeyPairGenerator.getInstance(&amp;quot;EC&amp;quot;).generateKeyPair();&lt;br /&gt;
      Signature sig_engine = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;);&lt;br /&gt;
      sig_engine.initSign(keys.getPrivate());&lt;br /&gt;
      sig_engine.update(&amp;quot;proper data&amp;quot;.getBytes());&lt;br /&gt;
&lt;br /&gt;
      System.out.println(&amp;quot;Testing blank signature with bouncycastle:&amp;quot;);&lt;br /&gt;
      System.out.println(&amp;quot;Should report false meaning bad signature did not validate&amp;quot;);&lt;br /&gt;
      {&lt;br /&gt;
        Signature sig = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;,&amp;quot;BC&amp;quot;);&lt;br /&gt;
        sig.initVerify(keys.getPublic());&lt;br /&gt;
        sig.update(&amp;quot;Hello, World&amp;quot;.getBytes());&lt;br /&gt;
        System.out.println(sig.verify(getBlankSig()));&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println();&lt;br /&gt;
      System.out.println(&amp;quot;Testing blank signature java provider:&amp;quot;);&lt;br /&gt;
      System.out.println(&amp;quot;Should report false meaning bad signature did not validate&amp;quot;);&lt;br /&gt;
      {&lt;br /&gt;
        Signature sig = Signature.getInstance(&amp;quot;SHA256WithECDSA&amp;quot;,&amp;quot;SunEC&amp;quot;);&lt;br /&gt;
        sig.initVerify(keys.getPublic());&lt;br /&gt;
        sig.update(&amp;quot;Hello, World&amp;quot;.getBytes());&lt;br /&gt;
        System.out.println(sig.verify(getBlankSig()));&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Security/SR-1&amp;diff=323</id>
		<title>Security/SR-1</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Security/SR-1&amp;diff=323"/>
		<updated>2022-04-21T04:01:45Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: Created page with &amp;quot;Security Review 1 - CVE-2022-21449: Psychic Signatures in Java  ## Overview  In this CVE some versions of Java do not do proper validation of ECDSA signatures and the signatur...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Security Review 1 - CVE-2022-21449: Psychic Signatures in Java&lt;br /&gt;
&lt;br /&gt;
## Overview&lt;br /&gt;
&lt;br /&gt;
In this CVE some versions of Java do not do proper validation of ECDSA signatures and the signatures can be trivially faked.&lt;br /&gt;
&lt;br /&gt;
This of course seems alarming since Snowblossom makes extensive use of ECDSA signatures, especially for seed based wallets.&lt;br /&gt;
&lt;br /&gt;
However, in review of the issue it was found that while the flaw does absolutely exist in some versions of Java, no version of Snowblossom&lt;br /&gt;
uses the Java provided security provider for ECDSA signatures.&lt;br /&gt;
&lt;br /&gt;
In the relevant section of Snowblossom code, we are always explicitly using the Bouncy Castle (BC) cryptographic provider.&lt;br /&gt;
&lt;br /&gt;
    Signature sig_engine = Signature.getInstance(algo, Globals.getCryptoProviderName());&lt;br /&gt;
&lt;br /&gt;
## References&lt;br /&gt;
&lt;br /&gt;
https://neilmadden.blog/2022/04/19/psychic-signatures-in-java/&lt;br /&gt;
&lt;br /&gt;
## Test Proceedure&lt;br /&gt;
&lt;br /&gt;
On a system with the problematic java versions the test code was run to reproduce the issue.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Testing blank signature with bouncycastle:&lt;br /&gt;
Should report false meaning bad signature did not validate&lt;br /&gt;
false&lt;br /&gt;
&lt;br /&gt;
Testing blank signature java provider:&lt;br /&gt;
Should report false meaning bad signature did not validate&lt;br /&gt;
true&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Security_Advisory&amp;diff=322</id>
		<title>Security Advisory</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Security_Advisory&amp;diff=322"/>
		<updated>2022-04-21T03:55:59Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Advisories ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID&lt;br /&gt;
!Date&lt;br /&gt;
!Versions&lt;br /&gt;
!Severity&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Security/SA-1|SA-1]]&lt;br /&gt;
|2020.10.30&lt;br /&gt;
|All&lt;br /&gt;
|none&lt;br /&gt;
|ECDSA signing uses SHA1 hash for signatures&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reviews ==&lt;br /&gt;
&lt;br /&gt;
Security Reviews are for when the development team analysis a potential issue and reports on it.  If some action needed to be taken, it would be an advisory instead.  So reviews show that something was considered and then determined to be a non-issue for Snowblossom.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID&lt;br /&gt;
!Date&lt;br /&gt;
!Versions&lt;br /&gt;
!Severity&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Security/SR-1|SR-1]]&lt;br /&gt;
|2022.04.20&lt;br /&gt;
|All&lt;br /&gt;
|none&lt;br /&gt;
|Review of CVE-2022-21449: Psychic Signatures in Java&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=ConfigOption/tls_key_path&amp;diff=318</id>
		<title>ConfigOption/tls key path</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=ConfigOption/tls_key_path&amp;diff=318"/>
		<updated>2022-02-28T23:19:41Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==tls_key_path==&lt;br /&gt;
&lt;br /&gt;
Controls which key is used for signing the certificates used for TLS server side communication.&lt;br /&gt;
&lt;br /&gt;
When TLS service ports are enabled, this must be set.&lt;br /&gt;
&lt;br /&gt;
If the path is empty, it will be created on startup.  To get the node: address for the key, either look at the logs for a line like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    INFO: My TLS address: node:h68q5s0xxs3pc5xhcyfa076j2a6942y6edlxn429&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or see address.txt in the tls_key_path directory.&lt;br /&gt;
&lt;br /&gt;
General URI form is: schema://host[:port][/?key=node:...]&lt;br /&gt;
&lt;br /&gt;
If using grpc+tls, the optional key parameter specifies which TLS key the node is expected to use.&lt;br /&gt;
&lt;br /&gt;
For best security and privacy it is best to use grpc+tls and specify the key.&lt;br /&gt;
&lt;br /&gt;
===Default===&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
[[Category:ConfigOptions]]&lt;br /&gt;
[[Category:ConfigOptionsNode]]&lt;br /&gt;
[[Category:ConfigOptionsMrPlow]]&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=ConfigOption/tls_key_path&amp;diff=317</id>
		<title>ConfigOption/tls key path</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=ConfigOption/tls_key_path&amp;diff=317"/>
		<updated>2022-02-28T23:19:20Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: Created page with &amp;quot;==tls_key_path==  Controls which key is used for signing the certificates used for TLS server side communication.  When TLS service ports are enabled, this must be set.  If th...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==tls_key_path==&lt;br /&gt;
&lt;br /&gt;
Controls which key is used for signing the certificates used for TLS server side communication.&lt;br /&gt;
&lt;br /&gt;
When TLS service ports are enabled, this must be set.&lt;br /&gt;
&lt;br /&gt;
If the path is empty, it will be created on startup.  To get the node: address for the key, either look at the logs for a line like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    INFO: My TLS address: node:h68q5s0xxs3pc5xhcyfa076j2a6942y6edlxn429&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or see address.txt in the tls_key_path directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
General URI form is: schema://host[:port][/?key=node:...]&lt;br /&gt;
&lt;br /&gt;
If using grpc+tls, the optional key parameter specifies which TLS key the node is expected to use.&lt;br /&gt;
&lt;br /&gt;
For best security and privacy it is best to use grpc+tls and specify the key.&lt;br /&gt;
&lt;br /&gt;
===Default===&lt;br /&gt;
None&lt;br /&gt;
===Examples===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
node_uri=grpc://snow-tx1.snowblossom.org&lt;br /&gt;
&lt;br /&gt;
node_uri=grpc://snow-tx1.snowblossom.org:2338&lt;br /&gt;
&lt;br /&gt;
node_uri=grpc+tls://snow-tx1.snowblossom.org&lt;br /&gt;
&lt;br /&gt;
node_uri=grpc+tls://snow-tx1.snowblossom.org?key=node:fgmfupck7seaq8t2gl6plzs5vh7nyl6656wscgq3&lt;br /&gt;
&lt;br /&gt;
node_uri=grpc+tls://snow-tx1.snowblossom.org,grpc+tls://snow-de1.snowblossom.org&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:ConfigOptions]]&lt;br /&gt;
[[Category:ConfigOptionsNode]]&lt;br /&gt;
[[Category:ConfigOptionsMrPlow]]&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Trustnet&amp;diff=316</id>
		<title>Trustnet</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Trustnet&amp;diff=316"/>
		<updated>2022-02-25T22:39:05Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Trustnet==&lt;br /&gt;
&lt;br /&gt;
The concept of trustnet is that with sharding, we will eventually reach a network where no one node has all of the chain data.  However, in order to mine a block on a shard, it may need to import blocks from other shards.  Including incorrect blocks will result in the new mined block being invalid so a miner must completely trust the source of data about validity of other shards.&lt;br /&gt;
&lt;br /&gt;
The solution is the trustnet.  The most basic use is a mining pool operator will run their nodes with the same trustnet keys so that they trust each other for other shard validation and can safely import blocks&lt;br /&gt;
from those chains.&lt;br /&gt;
&lt;br /&gt;
For clients, a client may be configured to prefer to use nodes of a specified trustnet in order use trusted nodes that are giving correct information and not acting as address honeypots.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Trustnet&amp;diff=315</id>
		<title>Trustnet</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Trustnet&amp;diff=315"/>
		<updated>2022-02-25T21:00:06Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: Created page with &amp;quot;==Trustnet==  The concept of trustnet is that with sharding, we will eventually reach network where no one node has all of the chain data.  However, in order to mine a block o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Trustnet==&lt;br /&gt;
&lt;br /&gt;
The concept of trustnet is that with sharding, we will eventually reach network where no one node has all of the chain data.  However, in order to mine a block on a shard, it may need to import blocks from other shards.  Including incorrect blocks will result in the new mined block being invalid so a miner must completely trust the source of data about validity of other shard.&lt;br /&gt;
&lt;br /&gt;
The solution is the trustnet.  The most basic use is a mining pool operator will run their nodes with the same trustnet keys so that they trust each other for other shard validation and can safely import blocks&lt;br /&gt;
from those chains.&lt;br /&gt;
&lt;br /&gt;
For clients, a client may be configured to prefer to use nodes of a specified trustnet in order use trusted nodes that are giving correct information and not acting as address honeypots.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=ConfigOption/trustnet_key_path&amp;diff=314</id>
		<title>ConfigOption/trustnet key path</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=ConfigOption/trustnet_key_path&amp;diff=314"/>
		<updated>2022-02-25T20:53:56Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: Created page with &amp;quot;==trustnet_key_path==  If set, this marks the node as a member of the trustnet group indicated by the key in the path.  If the path is empty or does not exist, a new key w...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==trustnet_key_path==&lt;br /&gt;
&lt;br /&gt;
If set, this marks the node as a member of the [[trustnet]] group indicated by the key in the path.&lt;br /&gt;
&lt;br /&gt;
If the path is empty or does not exist, a new key will be created.&lt;br /&gt;
&lt;br /&gt;
===Default===&lt;br /&gt;
No default&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
trustnet_key_path=trustnet_key&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ConfigOptions]]&lt;br /&gt;
[[Category:ConfigOptionsNode]]&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Proposals&amp;diff=313</id>
		<title>Proposals</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Proposals&amp;diff=313"/>
		<updated>2022-02-14T19:40:49Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Voting =&lt;br /&gt;
&lt;br /&gt;
* Not voting / Abstaining, will not be counted.&lt;br /&gt;
* Pools vote on behalf of their miners.&lt;br /&gt;
* Miners may vote by appending their config files with: &amp;lt;code&amp;gt;vote_yes=   vote_no=&amp;lt;/code&amp;gt;&lt;br /&gt;
* You may vote for or against proposals such as: &amp;lt;code&amp;gt;vote_yes=1,2,3   vote_no=4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposals =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| ID&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Proposal&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Condition&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Verdict&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [[SIP1-Fix-Block-Reward-Halving-Time]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [[SIP2-Increase-Work-Weighting-For-Higher-Fields]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 7289&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [[SIP3-Add-lock-option-to-TxOuts-and-allow-extra-data]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 22157&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [[SIP4-Optional-Input-Value]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED ~134400&lt;br /&gt;
|- &lt;br /&gt;
| 5&lt;br /&gt;
| [[SIP5-Sharding]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 198613&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=SIP5-Sharding&amp;diff=312</id>
		<title>SIP5-Sharding</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=SIP5-Sharding&amp;diff=312"/>
		<updated>2022-02-07T05:51:44Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
This proposal is to bring in the changes in the [https://github.com/snowblossomcoin/snowblossom/tree/shardo shardo] branch.  This change includes the following:&lt;br /&gt;
* Adding a sharded L1 scaling solution&lt;br /&gt;
* Revamp of P2P block synchronization&lt;br /&gt;
* Updating version number to 2.0&lt;br /&gt;
&lt;br /&gt;
The documentation for these changes are in [https://docs.google.com/document/d/17cljhZnAiQTL9yzhZ_INxKx131LUzNs2paP2kCCgljo/edit#heading=h.uosl2b838wbg Book of Snowblossom - Braid]&lt;br /&gt;
&lt;br /&gt;
== Voting ==&lt;br /&gt;
&lt;br /&gt;
* Passes when 1000 blocks pass containing 25% voting and &amp;gt;50% agreement&lt;br /&gt;
* Pools will represent their miners.&lt;br /&gt;
* Set in your miner or pool configuration file either&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_yes=5&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_no=5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
These changes have been in testnet and various smaller scale networks for months.  It seems to be very stable.&lt;br /&gt;
&lt;br /&gt;
* Testnet - https://test-b.snowblossom.org/ https://test-b.snowblossom.org/static/shard-visual.html&lt;br /&gt;
* Shardtest - https://snow-testshard.1209k.com/ https://snow-testshard.1209k.com/static/shard-visual.html&lt;br /&gt;
&lt;br /&gt;
Both of those networks upgraded from a single shard to multiple shards based on load as expected.  &lt;br /&gt;
&lt;br /&gt;
== Things Not Complete ==&lt;br /&gt;
&lt;br /&gt;
After the update, then after enough load to trigger shard creation then clients may need to connect to multiple nodes to get a full view of the network.  This code is not yet complete.&lt;br /&gt;
&lt;br /&gt;
Also, there are some improvements that need to be made to the explorer to show reasonable summary of all the shard status.&lt;br /&gt;
&lt;br /&gt;
== Risks ==&lt;br /&gt;
&lt;br /&gt;
The version 2.0 block syncing uses some new operations that only exist in 2.0 so nodes can only do a full block download from 2.0 nodes.  On the plus side, with the new peer information the 2.0 nodes will automatically find each other.  So as long as there are a few 2.0 nodes, it will be fine.  And the on disk database is compatible so upgrading a node is simply running the new version.&lt;br /&gt;
&lt;br /&gt;
When updating the node and running it for the first time, there is an inplace block summary re-index.  This is a one time update and might take as much as an hour.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
If approved, the activation height will be set to be about 90 days from the acceptance vote to allow for updates.&lt;br /&gt;
&lt;br /&gt;
== Node Operator Required Actions ==&lt;br /&gt;
&lt;br /&gt;
By the block height that we define, all nodes will need to be updated to snowblossom 2.0 or later to validate blocks.  The block header format will switch to version 2 at that point and only version blocks will be valid.&lt;br /&gt;
&lt;br /&gt;
Even after shards are triggered, is based on block size average (so is not expected to by any time soon) without an configuration changes each node will just follow all shards so not changes are required.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=Proposals&amp;diff=311</id>
		<title>Proposals</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=Proposals&amp;diff=311"/>
		<updated>2022-02-07T05:38:29Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Voting =&lt;br /&gt;
&lt;br /&gt;
* Not voting / Abstaining, will not be counted.&lt;br /&gt;
* Pools vote on behalf of their miners.&lt;br /&gt;
* Miners may vote by appending their config files with: &amp;lt;code&amp;gt;vote_yes=   vote_no=&amp;lt;/code&amp;gt;&lt;br /&gt;
* You may vote for or against proposals such as: &amp;lt;code&amp;gt;vote_yes=1,2,3   vote_no=4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Proposals =&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| ID&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Proposal&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Condition&lt;br /&gt;
!width=&amp;quot;25%&amp;quot;| Verdict&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| [[SIP1-Fix-Block-Reward-Halving-Time]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [[SIP2-Increase-Work-Weighting-For-Higher-Fields]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 7289&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [[SIP3-Add-lock-option-to-TxOuts-and-allow-extra-data]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED 22157&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [[SIP4-Optional-Input-Value]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| PASSED ~134400&lt;br /&gt;
|- &lt;br /&gt;
| 5&lt;br /&gt;
| [[SIP5-Sharding]]&lt;br /&gt;
| 1000 blocks, &amp;amp;gt;25% voting and &amp;amp;gt;50% agreement&lt;br /&gt;
| pending&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.snowblossom.org/index.php?title=SIP5-Sharding&amp;diff=310</id>
		<title>SIP5-Sharding</title>
		<link rel="alternate" type="text/html" href="https://wiki.snowblossom.org/index.php?title=SIP5-Sharding&amp;diff=310"/>
		<updated>2022-02-07T05:37:58Z</updated>

		<summary type="html">&lt;p&gt;Fireduck: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
This proposal is to bring in the changes in the [https://github.com/snowblossomcoin/snowblossom/tree/shardo shardo] branch.  This change includes the following:&lt;br /&gt;
* Adding a sharded L1 scaling solution&lt;br /&gt;
* Revamp of P2P block synchronization&lt;br /&gt;
* Updating version number to 2.0&lt;br /&gt;
&lt;br /&gt;
The documentation for these changes are in [https://docs.google.com/document/d/17cljhZnAiQTL9yzhZ_INxKx131LUzNs2paP2kCCgljo/edit#heading=h.uosl2b838wbg Book of Snowblossom - Braid]&lt;br /&gt;
&lt;br /&gt;
== Voting ==&lt;br /&gt;
&lt;br /&gt;
* Passes when 1000 blocks pass containing 25% voting and &amp;gt;50% agreement&lt;br /&gt;
* Pools will represent their miners.&lt;br /&gt;
* Set in your miner or pool configuration file either&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_yes=5&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;vote_no=5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
These changes have been in testnet and various smaller scale networks for months.  It seems to be very stable.&lt;br /&gt;
&lt;br /&gt;
* Testnet - https://test-b.snowblossom.org/ https://test-b.snowblossom.org/static/shard-visual.html&lt;br /&gt;
* Shardtest - https://snow-testshard.1209k.com/ https://snow-testshard.1209k.com/static/shard-visual.html&lt;br /&gt;
&lt;br /&gt;
Both of those networks upgraded from a single shard to multiple shards based on load as expected.  &lt;br /&gt;
&lt;br /&gt;
== Things Not Complete ==&lt;br /&gt;
&lt;br /&gt;
After the update, then after enough load to trigger shard creation then clients may need to connect to multiple nodes to get a full view of the network.  This code is not yet complete.&lt;br /&gt;
&lt;br /&gt;
Also, there are some improvements that need to be made to the explorer to show reasonable summary of all the shard status.&lt;br /&gt;
&lt;br /&gt;
== Risks ==&lt;br /&gt;
&lt;br /&gt;
The version 2.0 block syncing uses some new operations that only exist in 2.0 so nodes can only do a full block download from 2.0 nodes.  On the plus side, with the new peer information the 2.0 nodes will automatically find each other.  So as long as there are a few 2.0 nodes, it will be fine.  And the on disk database is compatible so upgrading a node is simply running the new version.&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
&lt;br /&gt;
If approved, the activation height will be set to be about 90 days from the acceptance vote to allow for updates.&lt;br /&gt;
&lt;br /&gt;
== Node Operator Required Actions ==&lt;br /&gt;
&lt;br /&gt;
By the block height that we define, all nodes will need to be updated to snowblossom 2.0 or later to validate blocks.  The block header format will switch to version 2 at that point and only version blocks will be valid.&lt;br /&gt;
&lt;br /&gt;
Even after shards are triggered, is based on block size average (so is not expected to by any time soon) without an configuration changes each node will just follow all shards so not changes are required.&lt;/div&gt;</summary>
		<author><name>Fireduck</name></author>
		
	</entry>
</feed>