<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Hajuss%C3%BCsteemid_prax_2_2025_kevad</id>
	<title>Hajussüsteemid prax 2 2025 kevad - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Hajuss%C3%BCsteemid_prax_2_2025_kevad"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;action=history"/>
	<updated>2026-10-28T11:52:31Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22212&amp;oldid=prev</id>
		<title>Martinv: /* Praksi tulemusena peab sul olema */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22212&amp;oldid=prev"/>
		<updated>2025-05-07T10:42:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Praksi tulemusena peab sul olema&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 7. mai 2025, kell 12:42&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l63&quot;&gt;63. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;63. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Praksi tulemusena peab sul olema ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Praksi tulemusena peab sul olema ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Ilma konsensuseta variandi jaoks katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei õnnestu.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Ilma konsensuseta variandi jaoks katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei õnnestu. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(25%)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Implementeeritud mitu sõlme, mis suudavad omavahel eeltoodud tüüpi ülesannet lahendada&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Implementeeritud mitu sõlme, mis suudavad omavahel eeltoodud tüüpi ülesannet lahendada &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(25%)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Reaalselt katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei ole triviaalne, aga siiski õnnestub (soovitavalt eelmise punkti tüüpi näited): mida sõlmed saatsid, mida kokku lepiti, mismoodi kokkulepe toimus&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Reaalselt katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei ole triviaalne, aga siiski õnnestub (soovitavalt eelmise punkti tüüpi näited): mida sõlmed saatsid, mida kokku lepiti, mismoodi kokkulepe toimus &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(50%)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;strong&amp;gt;Teha väike ettekanne, kus:&amp;lt;/strong&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;strong&amp;gt;Teha väike ettekanne, kus:&amp;lt;/strong&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Tood näiteid, kus konsensust (ilma uue algoritmita) esialgu ei saavutatud&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Tood näiteid, kus konsensust (ilma uue algoritmita) esialgu ei saavutatud&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Martinv</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22211&amp;oldid=prev</id>
		<title>Martinv: /* Täienduseks ideid: terve distributed ledger */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22211&amp;oldid=prev"/>
		<updated>2025-05-07T10:36:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Täienduseks ideid: terve distributed ledger&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 7. mai 2025, kell 12:36&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l76&quot;&gt;76. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;76. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Täienduseks ideid: terve distributed ledger =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Täienduseks ideid: terve distributed ledger =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;b&amp;gt;NB!&amp;lt;/b&amp;gt; Täiendavad funktsionaalsused annavad lisapunkte&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;b&amp;gt;NB!&amp;lt;/b&amp;gt; Täiendavad funktsionaalsused annavad lisapunkte &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(aga mitte siis kui õppejõud selle praksis on ette ära teinud ja Githubis jaganud)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Siin allolev jutt ei ole praktikumiülesanne, vaid varasemate aastate ülesande kirjeldusest võetud ideed, kuidas tervet distributed ledgerit ehitada. Siit võid saada ideid käesoleva aasta praksi jaoks.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Siin allolev jutt ei ole praktikumiülesanne, vaid varasemate aastate ülesande kirjeldusest võetud ideed, kuidas tervet distributed ledgerit ehitada. Siit võid saada ideid käesoleva aasta praksi jaoks.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Martinv</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22140&amp;oldid=prev</id>
		<title>Tammet: /* Täienduseks ideid: terve distributed ledger */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22140&amp;oldid=prev"/>
		<updated>2025-04-21T14:02:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Täienduseks ideid: terve distributed ledger&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 21. aprill 2025, kell 16:02&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l75&quot;&gt;75. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;75. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Täienduseks ideid: terve distributed ledger =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Täienduseks ideid: terve distributed ledger =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;b&amp;gt;NB!&amp;lt;/b&amp;gt; Täiendavad funktsionaalsused annavad lisapunkte.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Siin allolev jutt ei ole praktikumiülesanne, vaid varasemate aastate ülesande kirjeldusest võetud ideed, kuidas tervet distributed ledgerit ehitada. Siit võid saada ideid käesoleva aasta praksi jaoks.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Siin allolev jutt ei ole praktikumiülesanne, vaid varasemate aastate ülesande kirjeldusest võetud ideed, kuidas tervet distributed ledgerit ehitada. Siit võid saada ideid käesoleva aasta praksi jaoks.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22139&amp;oldid=prev</id>
		<title>Tammet: /* Praksi tulemusena peab sul olema: */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22139&amp;oldid=prev"/>
		<updated>2025-04-21T13:56:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Praksi tulemusena peab sul olema:&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 21. aprill 2025, kell 15:56&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l61&quot;&gt;61. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;61. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://yusufs.medium.com/creating-distributed-kv-database-by-implementing-raft-consensus-using-golang-d0884eef2e28 Creating Distributed KV Database by Implementing Raft Consensus Using Golang]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://yusufs.medium.com/creating-distributed-kv-database-by-implementing-raft-consensus-using-golang-d0884eef2e28 Creating Distributed KV Database by Implementing Raft Consensus Using Golang]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Praksi tulemusena peab sul olema&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;: &lt;/del&gt;=&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=&lt;/ins&gt;= Praksi tulemusena peab sul olema &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=&lt;/ins&gt;=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Ilma konsensuseta variandi jaoks katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei õnnestu.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Ilma konsensuseta variandi jaoks katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei õnnestu.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22138&amp;oldid=prev</id>
		<title>Tammet: /* Ülesanne: hajutatud konsensus distributed ledgeris */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22138&amp;oldid=prev"/>
		<updated>2025-04-21T13:56:14Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Ülesanne: hajutatud konsensus distributed ledgeris&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 21. aprill 2025, kell 15:56&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l21&quot;&gt;21. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;21. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Konkreetsemalt siis on sul kaks ülesannet, alustada tuleb esimesega ja seejärel teha teine:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Konkreetsemalt siis on sul kaks ülesannet, alustada tuleb esimesega ja seejärel teha teine:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/del&gt;Esiteks, tekita olukordi, kus sinu süsteemis sõlmed saavad mingi tegevuse tulemusena erinevad ledgerid, ja soovitavalt suuta neid olukordi reprodutseerida.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Esiteks ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Esiteks, tekita olukordi, kus sinu süsteemis sõlmed saavad mingi tegevuse tulemusena erinevad ledgerid, ja soovitavalt suuta neid olukordi reprodutseerida.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Näide kolme sõlmega (S1, S2, S3):&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Näide kolme sõlmega (S1, S2, S3):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l33&quot;&gt;33. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;35. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Selleks, et taolist olukorda tekitada, on üldiselt hea mõte teha hulk sõlmi ja siis lasta mitmel sõlmel üheaegselt genereerida erinevaid transaktsioone ja neid laiali saata: tõenäoliselt jõuavad nad eri sõlmedeni eri järjekordades ja võibolla mõneni üldse ei jõua. Pane tähele, et kui &amp;quot;üheaegselt&amp;quot; asemel teed &amp;quot;järjest&amp;quot;, siis võivad transaktsioonid kenasti kõigini samas järjekorras jõuda ja probleemi ei pruugi tekkida. Meie aga tahame just, et probleem tekiks!&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Selleks, et taolist olukorda tekitada, on üldiselt hea mõte teha hulk sõlmi ja siis lasta mitmel sõlmel üheaegselt genereerida erinevaid transaktsioone ja neid laiali saata: tõenäoliselt jõuavad nad eri sõlmedeni eri järjekordades ja võibolla mõneni üldse ei jõua. Pane tähele, et kui &amp;quot;üheaegselt&amp;quot; asemel teed &amp;quot;järjest&amp;quot;, siis võivad transaktsioonid kenasti kõigini samas järjekorras jõuda ja probleemi ei pruugi tekkida. Meie aga tahame just, et probleem tekiks!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/del&gt;Teiseks, realiseeri süsteem, mis tagaks, et kõigil sõlmedel oleks sama ledger ehk transaktsiooni-fail.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Teiseks ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Teiseks, realiseeri süsteem, mis tagaks, et kõigil sõlmedel oleks sama ledger ehk transaktsiooni-fail.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Selleks peavad sõlmed suhtlema omavahel ja leppima kokku õige ühise transaktsiooni-faili.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Selleks peavad sõlmed suhtlema omavahel ja leppima kokku õige ühise transaktsiooni-faili.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22137&amp;oldid=prev</id>
		<title>Tammet: /* Ülesanne: hajutatud konsensus distributed ledgeris */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22137&amp;oldid=prev"/>
		<updated>2025-04-21T13:53:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Ülesanne: hajutatud konsensus distributed ledgeris&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 21. aprill 2025, kell 15:53&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l57&quot;&gt;57. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;57. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://yusufs.medium.com/creating-distributed-kv-database-by-implementing-raft-consensus-using-golang-d0884eef2e28 Creating Distributed KV Database by Implementing Raft Consensus Using Golang]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://yusufs.medium.com/creating-distributed-kv-database-by-implementing-raft-consensus-using-golang-d0884eef2e28 Creating Distributed KV Database by Implementing Raft Consensus Using Golang]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;strong&amp;gt;&lt;/del&gt;Praksi tulemusena peab sul olema:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/strong&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;= &lt;/ins&gt;Praksi tulemusena peab sul olema: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Ilma konsensuseta variandi jaoks katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei õnnestu.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Ilma konsensuseta variandi jaoks katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei õnnestu.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Implementeeritud mitu sõlme, mis suudavad omavahel eeltoodud tüüpi ülesannet lahendada&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Implementeeritud mitu sõlme, mis suudavad omavahel eeltoodud tüüpi ülesannet lahendada&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22111&amp;oldid=prev</id>
		<title>Martinv: /* Ülesanne: hajutatud konsensus distributed ledgeris */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22111&amp;oldid=prev"/>
		<updated>2025-04-02T11:17:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Ülesanne: hajutatud konsensus distributed ledgeris&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 2. aprill 2025, kell 13:17&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l57&quot;&gt;57. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;57. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://yusufs.medium.com/creating-distributed-kv-database-by-implementing-raft-consensus-using-golang-d0884eef2e28 Creating Distributed KV Database by Implementing Raft Consensus Using Golang]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://yusufs.medium.com/creating-distributed-kv-database-by-implementing-raft-consensus-using-golang-d0884eef2e28 Creating Distributed KV Database by Implementing Raft Consensus Using Golang]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Praksi tulemusena peab sul olema:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;strong&amp;gt;&lt;/ins&gt;Praksi tulemusena peab sul olema:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/strong&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Ilma konsensuseta variandi jaoks katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei õnnestu.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Ilma konsensuseta variandi jaoks katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei õnnestu.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Implementeeritud mitu sõlme, mis suudavad omavahel eeltoodud tüüpi ülesannet lahendada&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Implementeeritud mitu sõlme, mis suudavad omavahel eeltoodud tüüpi ülesannet lahendada&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Reaalselt katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei ole triviaalne, aga siiski õnnestub (soovitavalt eelmise punkti tüüpi näited): mida sõlmed saatsid, mida kokku lepiti, mismoodi kokkulepe toimus&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Reaalselt katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei ole triviaalne, aga siiski õnnestub (soovitavalt eelmise punkti tüüpi näited): mida sõlmed saatsid, mida kokku lepiti, mismoodi kokkulepe toimus&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Teha väike ettekanne, kus  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;strong&amp;gt;&lt;/ins&gt;Teha väike ettekanne, kus&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&amp;lt;/strong&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Tood näiteid, kus konsensust (ilma uue algoritmita) esialgu ei saavutatud&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Tood näiteid, kus konsensust (ilma uue algoritmita) esialgu ei saavutatud&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Selgitad valitud/ehitatud konsensue tagamise algoritmi põhimõtteid&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Selgitad valitud/ehitatud konsensue tagamise algoritmi põhimõtteid&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Martinv</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22110&amp;oldid=prev</id>
		<title>Martinv: /* Esimene variant: hajutatud konsensus distributed ledgeris */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22110&amp;oldid=prev"/>
		<updated>2025-04-02T11:10:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Esimene variant: hajutatud konsensus distributed ledgeris&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 2. aprill 2025, kell 13:10&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l9&quot;&gt;9. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;9. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Teine variant on sinu enda valitud teema, mis on õppejõuga eelnevalt kooskõlastatud: et kas sisuliselt sobib ja kas on mõistliku keerukusega. See on mõttekas valik, kui sul on juba mõte mõne rakendusliku süsteemi ise-ehitamiseks ja sisu klapib meie kursusega. Siin allpool selle variandi kohta rohkem nõudeid või soovitusi ei ole.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Teine variant on sinu enda valitud teema, mis on õppejõuga eelnevalt kooskõlastatud: et kas sisuliselt sobib ja kas on mõistliku keerukusega. See on mõttekas valik, kui sul on juba mõte mõne rakendusliku süsteemi ise-ehitamiseks ja sisu klapib meie kursusega. Siin allpool selle variandi kohta rohkem nõudeid või soovitusi ei ole.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Esimene variant&lt;/del&gt;: hajutatud konsensus distributed ledgeris =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Ülesanne&lt;/ins&gt;: hajutatud konsensus distributed ledgeris =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Stsenaarium on sarnane harilikule plokiahela rakendusele: mitu sõltumatut osapoolt saadavad teistele kirjeid (näiteks, ülekandeid), ning iga osapool salvestab kõiki ülekanded ledgeri faili,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Stsenaarium on sarnane harilikule plokiahela rakendusele: mitu sõltumatut osapoolt saadavad teistele kirjeid (näiteks, ülekandeid), ning iga osapool salvestab kõiki ülekanded ledgeri faili,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Martinv</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22109&amp;oldid=prev</id>
		<title>Martinv: /* Täienduseks ideid: terve distributed ledger */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=22109&amp;oldid=prev"/>
		<updated>2025-04-02T10:12:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Täienduseks ideid: terve distributed ledger&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 2. aprill 2025, kell 12:12&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l71&quot;&gt;71. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;71. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Täienduseks ideid: terve distributed ledger =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Täienduseks ideid: terve distributed ledger =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Siin allolev jutt ei ole praktikumiülesanne, vaid &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2023 aasta &lt;/del&gt;ülesande kirjeldusest võetud ideed, kuidas tervet distributed ledgerit ehitada. Siit võid saada ideid &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2024 &lt;/del&gt;aasta praksi jaoks.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Siin allolev jutt ei ole praktikumiülesanne, vaid &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;varasemate aastate &lt;/ins&gt;ülesande kirjeldusest võetud ideed, kuidas tervet distributed ledgerit ehitada. Siit võid saada ideid &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;käesoleva &lt;/ins&gt;aasta praksi jaoks.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Siinne eesmärk on saada käima lihtsustatud versioon bitcoini-tüüpi&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Siinne eesmärk on saada käima lihtsustatud versioon bitcoini-tüüpi&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Martinv</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=21874&amp;oldid=prev</id>
		<title>Tammet: Uus lehekülg: &#039;Fail:minememe.jpg  = Ülesanne =  Teise praktikumi jaoks võid valida ühe kahest ülesandest:  * Esimene variant: hajutatud konsensus distributed ledgeris   * Teine variant...&#039;</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Hajuss%C3%BCsteemid_prax_2_2025_kevad&amp;diff=21874&amp;oldid=prev"/>
		<updated>2025-02-03T06:26:23Z</updated>

		<summary type="html">&lt;p&gt;Uus lehekülg: &amp;#039;&lt;a href=&quot;/wiki/Fail:Minememe.jpg&quot; title=&quot;Fail:Minememe.jpg&quot;&gt;Fail:minememe.jpg&lt;/a&gt;  = Ülesanne =  Teise praktikumi jaoks võid valida ühe kahest ülesandest:  * Esimene variant: hajutatud konsensus distributed ledgeris   * Teine variant...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Fail:minememe.jpg]]&lt;br /&gt;
&lt;br /&gt;
= Ülesanne =&lt;br /&gt;
&lt;br /&gt;
Teise praktikumi jaoks võid valida ühe kahest ülesandest:&lt;br /&gt;
&lt;br /&gt;
* Esimene variant: hajutatud konsensus distributed ledgeris &lt;br /&gt;
&lt;br /&gt;
* Teine variant on sinu enda valitud teema, mis on õppejõuga eelnevalt kooskõlastatud: et kas sisuliselt sobib ja kas on mõistliku keerukusega. See on mõttekas valik, kui sul on juba mõte mõne rakendusliku süsteemi ise-ehitamiseks ja sisu klapib meie kursusega. Siin allpool selle variandi kohta rohkem nõudeid või soovitusi ei ole.&lt;br /&gt;
&lt;br /&gt;
= Esimene variant: hajutatud konsensus distributed ledgeris =&lt;br /&gt;
&lt;br /&gt;
Stsenaarium on sarnane harilikule plokiahela rakendusele: mitu sõltumatut osapoolt saadavad teistele kirjeid (näiteks, ülekandeid), ning iga osapool salvestab kõiki ülekanded ledgeri faili,&lt;br /&gt;
kustiganes nad ka ei tuleks. Samas peavad kõigi osapoolte ledgeri failid olema identsed, seda ka juhul, kui mõni osapool vahel ei saa saadetud ülekannet kätte või keegi saadab &lt;br /&gt;
täielikku jama, mida ignoreeritakse.&lt;br /&gt;
&lt;br /&gt;
Praksi eesmärk on katsetada konsensuse rikkumisega ja realiseerida ledgeri identsuse hoidmine: kas krüptoraha tüüpi proof-of-work kaevandamise või proof-of-stake konsensusega, &lt;br /&gt;
või kasutades [https://en.wikipedia.org/wiki/Distributed_database hajutatud andmebaaside] ideid, soovitavalt king, [https://en.wikipedia.org/wiki/Raft_(algorithm) raft] või mõnda analoogilist tüüpi &lt;br /&gt;
[https://en.wikipedia.org/wiki/Consensus_(computer_science) konsensuse-algoritmi].&lt;br /&gt;
&lt;br /&gt;
Konkreetsemalt siis on sul kaks ülesannet, alustada tuleb esimesega ja seejärel teha teine:&lt;br /&gt;
&lt;br /&gt;
* Esiteks, tekita olukordi, kus sinu süsteemis sõlmed saavad mingi tegevuse tulemusena erinevad ledgerid, ja soovitavalt suuta neid olukordi reprodutseerida.&lt;br /&gt;
&lt;br /&gt;
Näide kolme sõlmega (S1, S2, S3):&lt;br /&gt;
&lt;br /&gt;
* Sõlm S1 saadab transaktsiooni T1 sõlmele S2, aga mitte sõlmele S3.&lt;br /&gt;
* Sõlm S2 saadab transaktsiooni T2 sõlmele S3, aga mitte sõlmele S1.&lt;br /&gt;
* Sõlm S3 saadab transaktsiooni T3 sõlmele S1, aga mitte sõlmele S2&lt;br /&gt;
&lt;br /&gt;
Nüüd on sõlmedel järgmised transaktsiooni-failid: S1 (T1,T3), S2 (T1,T2), S3 (T2,T3).&lt;br /&gt;
&lt;br /&gt;
Selleks, et taolist olukorda tekitada, on üldiselt hea mõte teha hulk sõlmi ja siis lasta mitmel sõlmel üheaegselt genereerida erinevaid transaktsioone ja neid laiali saata: tõenäoliselt jõuavad nad eri sõlmedeni eri järjekordades ja võibolla mõneni üldse ei jõua. Pane tähele, et kui &amp;quot;üheaegselt&amp;quot; asemel teed &amp;quot;järjest&amp;quot;, siis võivad transaktsioonid kenasti kõigini samas järjekorras jõuda ja probleemi ei pruugi tekkida. Meie aga tahame just, et probleem tekiks!&lt;br /&gt;
&lt;br /&gt;
* Teiseks, realiseeri süsteem, mis tagaks, et kõigil sõlmedel oleks sama ledger ehk transaktsiooni-fail.&lt;br /&gt;
&lt;br /&gt;
Selleks peavad sõlmed suhtlema omavahel ja leppima kokku õige ühise transaktsiooni-faili. &lt;br /&gt;
&lt;br /&gt;
NB! Kui see perfektselt ei õnnestu, on tulemus ikkagi ok: lihtsalt tuleb ettekandes selgitada, millal töötab ja millal mitte.&lt;br /&gt;
&lt;br /&gt;
Üks variant lahenduseks on realiseerida bitcoini tüüpi pikema haru (või pikema ledgeri) eelistamine.&lt;br /&gt;
&lt;br /&gt;
Teine variant lahenduseks on teha regulaarseid nö koordineerimis-koosolekuid, kus:&lt;br /&gt;
* Kõik osapooled käivad järjest läbi kõik viimase koordineerimis-koosoleku järgi saabunud failiread järjekorras R1,R2,R3,..., kus R1 oleks esimene rida peale viimast koordineerimist.&lt;br /&gt;
* Iga rea jaoks lepivad osapooled kokku selle rea nö &amp;quot;kuninga&amp;quot;, kes saadab kõigile õige sisu.&lt;br /&gt;
&lt;br /&gt;
Arusaadavalt tekib siin palju küsimusi, millele vastused tuleb sul leida (a) enda parema äranägemise järgi, (b) lugedes soovitusi ja artikleid, (c) katsetades. &lt;br /&gt;
Muuhulgas ei ole praksis ette kirjutatud, mis algoritmi kasutada. Soovitus: kasuta võimalikult lihtsat, mis samas põhiprobleemidega hakkama saab. Paxos on kõige levinum,&lt;br /&gt;
aga keeruline, Raft veidi lihtsam, aga on veel lihtsamaid ja nõrgemaid (praksi jaoks on nõrk variant ok): loe &lt;br /&gt;
[http://www.di.univaq.it/~proietti/slide_algdist2010/5-Consensus.ppt konsensuse materjalidest] juurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Huvitavat ja tõenäoliselt kasulikku näitelugemist (aga otsi ise juurde):&lt;br /&gt;
* [https://people.disim.univaq.it/guido.proietti/slide_algdist2022/Bitcoin%202022%20part2.pdf detailne presentatsioon] bitcoinist, eeskätt konsensuse-fookusega; lisaks ka [http://timroughgarden.org/f16/l/l9.pdf sama autori lühitekst], vt [http://timroughgarden.org/notes.html siit] &amp;quot;Incentives in Computer Science&amp;quot; alt.&lt;br /&gt;
* [http://liu.diva-portal.org/smash/get/diva2:1368903/FULLTEXT01 Permissioned Blockchains and Distributed Databases: A Performance Study]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Raft_(algorithm) Raft wikipedias] ja [https://www.geeksforgeeks.org/raft-consensus-algorithm/ näiteks siin] &lt;br /&gt;
* [https://yusufs.medium.com/creating-distributed-kv-database-by-implementing-raft-consensus-using-golang-d0884eef2e28 Creating Distributed KV Database by Implementing Raft Consensus Using Golang]&lt;br /&gt;
&lt;br /&gt;
Praksi tulemusena peab sul olema:&lt;br /&gt;
* Ilma konsensuseta variandi jaoks katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei õnnestu. &lt;br /&gt;
* Implementeeritud mitu sõlme, mis suudavad omavahel eeltoodud tüüpi ülesannet lahendada&lt;br /&gt;
* Reaalselt katsetatud erisuguste olukordadega, kus konsensuse saavutamine ei ole triviaalne, aga siiski õnnestub (soovitavalt eelmise punkti tüüpi näited): mida sõlmed saatsid, mida kokku lepiti, mismoodi kokkulepe toimus&lt;br /&gt;
* Teha väike ettekanne, kus &lt;br /&gt;
** Tood näiteid, kus konsensust (ilma uue algoritmita) esialgu ei saavutatud&lt;br /&gt;
** Selgitad valitud/ehitatud konsensue tagamise algoritmi põhimõtteid&lt;br /&gt;
** Tood näiteid, kus konsensuse ehitamine töötas&lt;br /&gt;
** Tood näiteid, kus konsensuse ehitamine läks rikki (kui seda kunagi ei juhtu, siis muidugi näiteid ei saa tuua)&lt;br /&gt;
** Annad kiire ülevaate koodist&lt;br /&gt;
** Räägid veidi tööprotsessist: kuidas alustasite, mis olid probleemid, kuidas probleeme lahendasite&lt;br /&gt;
&lt;br /&gt;
= Täienduseks ideid: terve distributed ledger =&lt;br /&gt;
&lt;br /&gt;
Siin allolev jutt ei ole praktikumiülesanne, vaid 2023 aasta ülesande kirjeldusest võetud ideed, kuidas tervet distributed ledgerit ehitada. Siit võid saada ideid 2024 aasta praksi jaoks.&lt;br /&gt;
&lt;br /&gt;
Siinne eesmärk on saada käima lihtsustatud versioon bitcoini-tüüpi&lt;br /&gt;
distributed ledgerist. Keerukaid nüansse - mis päris-bitcoini puhul vajalikud - realiseerida ei ole vaja.&lt;br /&gt;
&lt;br /&gt;
Mis meil oleks - kokkuvõtlikult - vaja esimesele praksile lisada:&lt;br /&gt;
&lt;br /&gt;
* Transaktsiooni sisestamine ja konkreetses formaadis edastamine: kes kannab kellele kui palju raha üle&lt;br /&gt;
* Digiallkirjastamine, avalikud ja salajased võtmed&lt;br /&gt;
* Transaktsioonide kokkukogumine blokiks ja bloki ülekontrollimine&lt;br /&gt;
* Bloki merkle juure ehitamine (salvestame lõpuks ainult tipmise hashi puust)&lt;br /&gt;
* Bloki kaevandamine: leia bloki hash, mis algaks N nulliga, katsetades eri nonce. Sea N nii, et kaevandamine võtaks ca 5 sek.&lt;br /&gt;
* Mitme paralleelbloki olemasolul pikema ahela või parema bloki valimine&lt;br /&gt;
* Loodud bloki automaatselt teistele edasisaatmine&lt;br /&gt;
&lt;br /&gt;
Eeldame, et sinu programm juba kuulab ja salvestab ja saadab edasi talle saadetud transaktsioone ja blokke. &lt;br /&gt;
&lt;br /&gt;
Konkreetseid detaile ei kirjuta me siin praksis kohustuslikuna ette, kuid järgmisena on toodud soovitusi ja nõuandeid.&lt;br /&gt;
&lt;br /&gt;
Päris hea arusaamist tekitava veebidemo [https://anders.com/blockchain/public-private-keys/blockchain.html leiad siit]: kindlasti vaata ka ülalt menüüst keys/signatures/transaction demosid.&lt;br /&gt;
&lt;br /&gt;
== Transaktsioon ==&lt;br /&gt;
&lt;br /&gt;
Võiks olla ilma allkirjata kujul &lt;br /&gt;
&lt;br /&gt;
   {&amp;quot;from&amp;quot;: &amp;quot;sdasd212121&amp;quot;, &amp;quot;to&amp;quot;: &amp;quot;dsda9sdasdas9&amp;quot;, &amp;quot;sum&amp;quot;: 0.01, &amp;quot;timestamp&amp;quot;: &amp;quot;2012-04-21T18:25:43-05:00&amp;quot;} &lt;br /&gt;
   &lt;br /&gt;
kus timestamp on iso kujul. Seejuures transaktsioon tuleb enne signeerimist stringiks teisenda mingil ühesel universaalsel kujul &lt;br /&gt;
(a la keyd konkreetses järjekorraks ja tühikud key-value paaride vahelt eemaldatud) ja allkirjaga kujul &lt;br /&gt;
&lt;br /&gt;
  {&amp;quot;signature&amp;quot;:&amp;quot;alasasasp11&amp;quot;, &amp;quot;transaction&amp;quot;: {&amp;quot;from&amp;quot;: &amp;quot;sdasd212121&amp;quot;, &amp;quot;to&amp;quot;: &amp;quot;dsda9sdasdas9&amp;quot;, &amp;quot;sum&amp;quot;: 0.01, &amp;quot;timestamp&amp;quot;: &amp;quot;2012-04-21T18:25:43-05:00&amp;quot;}} &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
Mis on see &amp;quot;from&amp;quot; ja &amp;quot;to&amp;quot; väärtus, ehk, kuidas kasutajaid/kontosid identifitseerida? Las need olla lihtsalt kasutajate avalikud võtmed, millest me järgmisena räägime.&lt;br /&gt;
&lt;br /&gt;
Sinu programm peaks olema võimeline tegema transaktsioone: näiteks nii, et käivitad ta käsurealt ja annad ette transaktsiooni jsoni, tema&lt;br /&gt;
allkirjastab ja saadab allkirjaga edasi.&lt;br /&gt;
&lt;br /&gt;
Või siis ta loeb iga N sekundi tagant faili, kuhu saad kirjutada transaktsioonide jsone.&lt;br /&gt;
&lt;br /&gt;
Või mõnel muul sulle mugaval moel.&lt;br /&gt;
&lt;br /&gt;
Allkirjastatud transaktsioon tuleks teistele progedele edasi saata.&lt;br /&gt;
&lt;br /&gt;
== Digiallkirjastamine, avalikud ja salajased võtmed ==&lt;br /&gt;
&lt;br /&gt;
Sul on oma &amp;quot;konto&amp;quot; tegemiseks vaja genereerida mingi public-key krüptosüsteemi jaoks avaliku ja salajase võtme paar. &lt;br /&gt;
Muidugi on oluline, et kõik võrgustiku osalised kasutaks sama public-key krüptosüsteemi.&lt;br /&gt;
&lt;br /&gt;
Kui oled genereerinud uue avaliku võtme A ja vastava privaatvõtme P, siis, teades A-d, ei suuda keegi teine reaalselt leida sinu P-d.&lt;br /&gt;
&lt;br /&gt;
Olgu sinu A avalik võti ja P sinu vastav privaatvõti. Siis krüpteeri(T,P) annab stringi K, nii et igaüks saab teha dekrüpteeri(K,A) mis annab tulemuse X&lt;br /&gt;
ja näha, et tulemus X võrdub algse stringiga T. Samas ei suuda keegi genereerida ise stringi K (teadmata P-d), et saaksime dekrüptimisel sama&lt;br /&gt;
tulemuse T.&lt;br /&gt;
&lt;br /&gt;
Peamiselt kasutatakse kas RSA tüüpi või elliptilise kõvera tüüpi public-key krüptosüsteeme. Näiteks vana eesti id-kaart kasutas RSA-d, peale sügisest turvaauku&lt;br /&gt;
hakati kasutama elliptilist kõverat. Bitcoin kasutab samuti elliptilist kõverat: ECDSA varianti standardse elliptise kurviga &amp;quot;secp256k1&amp;quot;. Meie praksis&lt;br /&gt;
kasuta lihtsalt sellist süsteemi, mille saad kergemini käima ja mida on sul kergem kasutada.&lt;br /&gt;
&lt;br /&gt;
Kust leida public key krüptograafia teeke?&lt;br /&gt;
* Pythoni jaoks on hea variant näiteks [https://github.com/warner/python-ecdsa python-ecdsa]&lt;br /&gt;
* Kõige mainstreamim universaalne teek (koos käsurea-utiliitidega) on [https://www.openssl.org/ openssl]&lt;br /&gt;
* Pythonis saad openssl-i kasutada näiteks [https://pyopenssl.org/en/stable/ pyopenssl] wrapperiga või käsurea-utiliitidega.&lt;br /&gt;
&lt;br /&gt;
Hea mõte on wikipediast lisaks lugeda [https://en.wikipedia.org/wiki/Public-key_cryptography public key cryptography] ja&lt;br /&gt;
[https://en.wikipedia.org/wiki/Digital_signature digital signature].&lt;br /&gt;
&lt;br /&gt;
NB! Põhimõtteliselt võid digiallkirja (ehk, privaatvõtmega krüpteeritud stringi) arvutada kas otse transaktsiooni stringi-kujust või siis selle stringi-kuju SHA hashist.&lt;br /&gt;
Miks SHA hashe kasutatakse? Sest pika stringi krüpteerimine on aeglane ja SHA hash on suhteliselt lühike ka pikkade algstringide korral.&lt;br /&gt;
&lt;br /&gt;
== Transaktsioonide kokkukogumine blokiks ja blokiandmete ülekontrollimine ==&lt;br /&gt;
&lt;br /&gt;
Ütleme, et sinuni on jõudnud N transaktsiooni. Sina tahad nad blokiks kokku panna. Kõigepealt vaata, millised transaktsioonid juba on mõnes sinule teada olevas blokis: &lt;br /&gt;
neid ära võta.&lt;br /&gt;
&lt;br /&gt;
Järgmisena peaksid kontrollima, kas kõik transaktsioonid on õieti allkirjastatud: selleks pead transaktsiooni allkirjad transaktsiooni avaliku võtmega &lt;br /&gt;
dekrüptima ja kontrollima, kas tuleb transaktsioonistring: vaata eelmist peatükki.&lt;br /&gt;
&lt;br /&gt;
Järgmisena peaksid kontrollima, kas transaktsiooni tegijal on piisavalt raha: selleks summeeri kõik talle saadetud ja tema poolt saadetud summad üle kõigi sulle&lt;br /&gt;
teada olevate blokkide. &lt;br /&gt;
&lt;br /&gt;
Järgmisena peaksid kontrollima, kas mõni transaktsioon on juba uues kokkupandavas blokis või mõnes vanas blokis olemas: kui jah, siis seda ei tohi kasutada.&lt;br /&gt;
&lt;br /&gt;
Kui mõni transaktsioon on valesti allkirjastatud või raha ei jätku või on topelt, viska see transaktsioon lihtsalt ära.&lt;br /&gt;
&lt;br /&gt;
Reaalse bitcoini kontrolli-algoritmi [https://en.bitcoin.it/wiki/Protocol_rules#.22block.22_messages leiad siit] ja&lt;br /&gt;
andmestrukuurid [https://en.bitcoin.it/wiki/Protocol_documentation siit]: seal on praktikumi jaoks liiga palju&lt;br /&gt;
detaile, nii et soovitaks mitte hakata kogu seda &amp;quot;ametlikku&amp;quot; süsteemi implementeerima.&lt;br /&gt;
&lt;br /&gt;
Lisa transaktsioonidele veel üks: endale nullist raha kandmine. Pane see näiteks viimaseks transaktsiooniks ja kanna endale 1 coin. Saatja identifikaatoriks&lt;br /&gt;
pane näiteks 0. Seda transaktsiooni pole mõtet allkirjastada, jäägu see &amp;quot;eritransaktsiooni&amp;quot; jaoks tühjaks (kontrollimise käigus peaks siis vastavalt vaatama,&lt;br /&gt;
et blokis võib olla üks selline 0-saatjaga ilma allkirjata transaktsioon ja see on ok).&lt;br /&gt;
&lt;br /&gt;
Nüüd pane kontrolli edukalt läbinud transaktsioonid blokiks kokku. Selles tee näiteks key/value struktuur ehk json näiteks nii:&lt;br /&gt;
&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;nr&amp;quot;: bloki_number_ehk_eelmise_bloki_nr+1,&lt;br /&gt;
    &amp;quot;previous_hash&amp;quot;: ahelas_eelmise_bloki_hash,&lt;br /&gt;
    &amp;quot;timestamp&amp;quot;:  &amp;quot;2012-04-21T18:25:43-05:00&amp;quot;,&lt;br /&gt;
    &amp;quot;nonce&amp;quot;: &amp;quot;asasas11&amp;quot;, &lt;br /&gt;
    &amp;quot;hash&amp;quot;: &amp;quot;000000sasas0a0s0111&amp;quot;,    &lt;br /&gt;
    &amp;quot;creator&amp;quot;: minu_avalik_võti,&lt;br /&gt;
    &amp;quot;merkle_root&amp;quot;: &amp;quot;asasasas1w111&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: number_of_transactions,&lt;br /&gt;
    &amp;quot;transactions&amp;quot;: [{...}, ..., {....}]&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
== Bloki Merkle juure (merkle root) arvutamine ==&lt;br /&gt;
&lt;br /&gt;
Mõte selles, et seome kõik bloks olevad transaktsioonid nende hashide kaudu puukujuliselt üheks merkle hashiks ja ei oleks vaja hoida&lt;br /&gt;
iga transaktsiooni hashi eraldi. Seda peab tegema kindlas järjekorras,&lt;br /&gt;
et teised kontrollida saaks. Kõigepealt pead arvutama iga transaktsiooni hashi (selleks konverdi transaktsioon stringiks) ja siis hakka neid hashe hierarhiliselt&lt;br /&gt;
paariviisi kokku konkateneerima ja selliselt paariviisi kokku liidetud hashidest uusi hashe arvutama.&lt;br /&gt;
&lt;br /&gt;
Vaata Merkle puu kohta&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Merkle_tree wikipedia]&lt;br /&gt;
* [https://en.bitcoin.it/wiki/Protocol_documentation#Merkle_Trees bitcoini ametlik lühiinfo]&lt;br /&gt;
* [https://bitcoin.stackexchange.com/questions/10479/what-is-the-merkle-root näide bitcoini stackexchangest]&lt;br /&gt;
&lt;br /&gt;
[https://bitcoin.stackexchange.com/questions/1110/how-do-i-implement-a-merkle-tree Siit] leitud seletus rehkendusele:&lt;br /&gt;
&lt;br /&gt;
In each iteration, you concatenate two subsequent hashes of the previous level, and double-sha256 them. &lt;br /&gt;
If there is an odd number of hashes, concatenate the last element with itself. &lt;br /&gt;
This gives you a new list of hashes. Repeat, and stop when one hash remains. This is the merkle root.&lt;br /&gt;
&lt;br /&gt;
Assume you have tx hashes Ha1,Ha2,Ha3,Ha4,Ha5,Ha6,Ha7&lt;br /&gt;
&lt;br /&gt;
*  First iteration: Hb1=Hash(Ha1|Ha2), Hb2=Hash(Ha3|Ha4), Hb3=Hash(Ha5|Ha6), Hb4=Hash(Ha7|Ha7)&lt;br /&gt;
*  Second iteration: Hc1=Hash(Hb1|Hb2), Hc2=Hash(Hb3|Hb4)&lt;br /&gt;
*  Third iteration: Hd1=Hash(Hc1|Hc2) =&amp;gt; Merkle root&lt;br /&gt;
&lt;br /&gt;
NB! Bitcoinis on kombeks arvutada topelt-hashe a la hash(hash(data)) aga meil ei ole mingit põhjust seda teha. Soovitan kasutada lihtsalt ühekordset hashi.&lt;br /&gt;
&lt;br /&gt;
== Bloki kaevandamine ==&lt;br /&gt;
&lt;br /&gt;
Nüüd on sul vaja leida bloki oma hash, kusjuures sobivad ainult sellised hashid, kus on ees N nulli. Katseta, et mitu nulli peaks ees olema, et &lt;br /&gt;
saaksid ühe sobiva hashi ca viie sekundi jooksul (päris bitcoinis on N-e niipalju, et keskmiselt tuleks üks blokk kümnes minutis kogu võrgu kohta).&lt;br /&gt;
See nullide nõue on kasutusel ainult selleks, et blokke tuleks harvemini, n.ö. pidur blokkide kiirele genereerimisele.&lt;br /&gt;
&lt;br /&gt;
Selleks võta kogu oma bloki sisu a la &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   {&lt;br /&gt;
    &amp;quot;nr&amp;quot;: bloki_number_ehk_eelmise_bloki_nr+1,&lt;br /&gt;
    &amp;quot;previous_hash&amp;quot;: ahelas_eelmise_bloki_hash,&lt;br /&gt;
    &amp;quot;timestamp&amp;quot;:  &amp;quot;2012-04-21T18:25:43-05:00&amp;quot;,&lt;br /&gt;
    &amp;quot;nonce&amp;quot;: &amp;quot;asasas11&amp;quot;, &lt;br /&gt;
    &amp;quot;hash&amp;quot;: &amp;quot;000000sasas0a0s0111&amp;quot;,    &lt;br /&gt;
    &amp;quot;creator&amp;quot;: minu_avalik_võti,&lt;br /&gt;
    &amp;quot;merkle_root&amp;quot;: &amp;quot;asasasas1w111&amp;quot;,&lt;br /&gt;
    &amp;quot;count&amp;quot;: number_of_transactions,&lt;br /&gt;
    &amp;quot;transactions&amp;quot;: [{...}, ..., {....}]&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
aga &amp;lt;b&amp;gt;ilma&amp;lt;/b&amp;gt; &amp;quot;nonce&amp;quot; ja &amp;quot;hash&amp;quot; väljadeta ja muuda ta stringiks.&lt;br /&gt;
&lt;br /&gt;
Nüüd tee läbi tsükkel:&lt;br /&gt;
&lt;br /&gt;
* leia lühike random string &amp;quot;nonce&amp;quot; N ja pane see eelnevalt leitud blokistringi S lõppu juurde, saad stringi X.&lt;br /&gt;
* arvuta saadud stringi X hash. &lt;br /&gt;
* kui saadud hash algab N nulliga, kõik ok ja lõpeta töö.&lt;br /&gt;
* vastasel korral mine tsükli esimesele reale tagasi.&lt;br /&gt;
&lt;br /&gt;
Kui sobiv hash leitud, lisa blokile leitud sisuga &amp;quot;nonce&amp;quot; väli ja &amp;quot;hash&amp;quot; väli.&lt;br /&gt;
&lt;br /&gt;
== Mitme paralleelbloki korral õige valimine ==&lt;br /&gt;
&lt;br /&gt;
Sul on üldjuhul suur hulk blokke ahelas. Kui mõni uuematest blokkidest sama &amp;quot;nr&amp;quot; väljaga on topelt, on sul hargnev blokiahel. Siis vali:&lt;br /&gt;
&lt;br /&gt;
* Kõige pikem ahel (kõige suurema numbriga blokk sobib)&lt;br /&gt;
* Sama pikkusega ahela puhul vali see, kus &lt;br /&gt;
** harus on rohkem transaktsioone&lt;br /&gt;
** kui see ka sama, vali näiteks see, kus viimane timestamp uuem&lt;br /&gt;
** kui see ka sama, tee näiteks lihtsalt hashide stringivõrdlus ja vali stringijärjekorras väiksema hashiga blokk&lt;br /&gt;
&lt;br /&gt;
== Loodud bloki automaatselt teistele edasisaatmine ==&lt;br /&gt;
&lt;br /&gt;
Kui sul blokk valmis, siis saada ta lihtsalt teistele programmidele edasi. Nemad saadavad seda omakorda edasi ja loodetavasti jõuab see blokk varsti kõigi hetkel võrgus töötavate ja korraliku ühendusega programmideni.&lt;/div&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
</feed>