<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Projects | Chevdor&#39;s Blog</title>
    <link>https://www.chevdor.com/project/</link>
      <atom:link href="https://www.chevdor.com/project/index.xml" rel="self" type="application/rss+xml" />
    <description>Projects</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>en-us</language><copyright>©chevdor 2024</copyright><lastBuildDate>Thu, 17 Aug 2023 15:52:12 +0000</lastBuildDate>
    <image>
      <url>https://www.chevdor.com/images/icon_hub6c0f998ac93608e856ef7cc2b015881_510213_512x512_fill_lanczos_center_3.png</url>
      <title>Projects</title>
      <link>https://www.chevdor.com/project/</link>
    </image>
    
    <item>
      <title>PRDoc</title>
      <link>https://www.chevdor.com/project/2023/prdoc/</link>
      <pubDate>Thu, 17 Aug 2023 15:52:12 +0000</pubDate>
      <guid>https://www.chevdor.com/project/2023/prdoc/</guid>
      <description>
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;prdoc&lt;/code&gt; is a tool designed to help generating, checking and loading &lt;code&gt;.prdoc&lt;/code&gt; files.
&lt;code&gt;.prdoc&lt;/code&gt; files are YAML files adhering to defined JSON schema and helping with code change documentation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;It allows structuring the documentation per project, checking contributions for adherence to the structure, validating the content, and generating better quality release notes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;It is used by the &lt;a href=&#34;https://github.com/paritytech/polkadot-sdk/tree/master/prdoc&#34;&gt;Polkadot-sdk&lt;/a&gt; repository.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_features&#34;&gt;1. Features&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Generate Documentation&lt;/strong&gt;: Automatically generate documentation files based on your project’s codebase.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check Documentation&lt;/strong&gt;: Validate existing documentation files against a predefined JSON schema to ensure consistency and correctness.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Load Documentation&lt;/strong&gt;: Easily load and parse &lt;code&gt;.prdoc&lt;/code&gt; files for use in your projects.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Install with cargo&lt;/div&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code&gt;cargo install prdoc&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;More on the project can be found on the &lt;a href=&#34;https://github.com/chevdor/prdoc&#34;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>subrpc</title>
      <link>https://www.chevdor.com/project/2022/11/subrpc/</link>
      <pubDate>Wed, 30 Nov 2022 15:52:12 +0000</pubDate>
      <guid>https://www.chevdor.com/project/2022/11/subrpc/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Ever experienced issues with a RPC endpoint and needed to find an alternate one ?
Did you favorite RPC endpoints provider just went down ? What now ?&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;subrpc&lt;/code&gt; is a tool designed to help users manage their RPC endpoints on the Polkadot network.
Managing your list of JSON RPC endpoints and picking the best endpoint for YOU can be challenging.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;subrpc&lt;/code&gt; can tap into mutiple repositories of known endpoints and helps you query them, filter them and pick the best one
for you. Those repositories can be maintained by you, your company, the community, the RPC endpoint providers, or a mix
of all of that. &lt;code&gt;subrpc&lt;/code&gt; also helps with sharing private RPC endpoints.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Depending on your beliefs and preferences, you may also esclude some endpoints or providers from your list.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Visit the &lt;a href=&#34;https://github.com/chevdor/subrpc/&#34;&gt;subrpc GitHub repository&lt;/a&gt; for more information and to get started with &lt;code&gt;subrpc&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>cargo-crate</title>
      <link>https://www.chevdor.com/project/2022/05/cargo-crate/</link>
      <pubDate>Mon, 30 May 2022 15:52:12 +0000</pubDate>
      <guid>https://www.chevdor.com/project/2022/05/cargo-crate/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;In a nutshell &lt;code&gt;cargo-crate&lt;/code&gt; allows:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;search for crates passing a pattern&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;fetching information about one or several crates, including the owners&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;opening crate(s) in crates.io&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;opening crates&amp;#39; documentation directly&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;opening crates&amp;#39; repository directly&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;opening crates&amp;#39; homepage directly&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Visit the &lt;a href=&#34;https://github.com/chevdor/cargo-crate&#34;&gt;&lt;code&gt;cargo-crate&lt;/code&gt; GitHub repository&lt;/a&gt; for more information and to get started with &lt;code&gt;cargo-crate&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>tera-cli</title>
      <link>https://www.chevdor.com/project/2021/05/tera-cli/</link>
      <pubDate>Sat, 01 May 2021 15:52:12 +0000</pubDate>
      <guid>https://www.chevdor.com/project/2021/05/tera-cli/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/chevdor/tera-cli&#34;&gt;&lt;code&gt;tera-cli&lt;/code&gt;&lt;/a&gt; is a very fast command line utility written in Rust to process data via &lt;a href=&#34;https://github.com/Keats/tera&#34;&gt;&lt;code&gt;tera&lt;/code&gt;&lt;/a&gt; templates.
It is especially useful to generate text, markdown or HTML to render raw data from json or yaml. It also supports
loading data from files, stdin or the user’s ENV.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;tera-cli&lt;/code&gt; is used internally by &lt;code&gt;srtool&lt;/code&gt; and offers a great option to render &lt;code&gt;prdoc&lt;/code&gt; data.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;More on the project can be found on the &lt;a href=&#34;https://github.com/chevdor/tera-cli&#34;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Minikube Proxy</title>
      <link>https://www.chevdor.com/project/2021/minikube-proxy/</link>
      <pubDate>Tue, 09 Feb 2021 15:52:12 +0000</pubDate>
      <guid>https://www.chevdor.com/project/2021/minikube-proxy/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;As featured in &lt;a href=&#34;https://www.chevdor.com/post/2021/02/docker_to_k8s/&#34;&gt;this article&lt;/a&gt;, the Minikube proxy allows reaching a Kubernetes minikube Api Server remotely.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can find the project at: &lt;a href=&#34;https://gitlab.com/chevdor/docker-nginx-minuke-proxy&#34; class=&#34;bare&#34;&gt;https://gitlab.com/chevdor/docker-nginx-minuke-proxy&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Subwasm</title>
      <link>https://www.chevdor.com/project/2021/04/subwasm/</link>
      <pubDate>Tue, 09 Feb 2021 15:52:12 +0000</pubDate>
      <guid>https://www.chevdor.com/project/2021/04/subwasm/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;subwasm&lt;/code&gt; is an essential utility for Substrate developers and users. It allows inspecting any Substrate WASM runttime.
A WASM Blob is by nature not very readable. Prior the development of &lt;code&gt;subwasm&lt;/code&gt;, a running node was required to inspect a
runtime.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;subwasm&lt;/code&gt; voids this requirements. It is a Rust utility that allows inspecting a Substrate WASM runtime without
having to run a node. It can be used to extract metadata, call some of the functions, and inspect the storage of a Substrate runtime and
would not even require an internet connection (assuming you already have a runtime locally).&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;subwasm&lt;/code&gt; is used within &lt;a href=&#34;https://www.chevdor.com/project/2020/2020-srtool/&#34;&gt;srtool&lt;/a&gt; to extract metadata from a runtime that was
just built.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;subwasm&lt;/code&gt; allows knowing exaxctly the content of a runtime without the need to run a node. It is a great tool for users
and for automation.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You may install &lt;code&gt;subwasm&lt;/code&gt; using homebrew or cargo or build it yourself:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Homebrew&lt;/div&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code&gt;brew tap chevdor/subwasm https://github.com/chevdor/subwasm
brew install subwasm&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Cargo&lt;/div&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code&gt;cargo install --locked --git https://github.com/chevdor/subwasm&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You may then use it to inspect a runtime. &lt;code&gt;subwasm&lt;/code&gt; can also fetch a runtime from a chain. Wondering what is the current
runtime version ?&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code&gt;subwasm version --chain dot&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;will fetch the metadata of the Polkadot runtime, then show you the runtime version:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code&gt;specifications : polkadot v1003004
implementation : parity-polkadot v0
transaction    : v26
authoring      : v0&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can find the project at: &lt;a href=&#34;https://github.com/chevdor/subwasm&#34; class=&#34;bare&#34;&gt;https://github.com/chevdor/subwasm&lt;/a&gt; and see how to list pallets, query the details of a
specific pallet, retrieve the entire metadata in various formats and much more.&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>srtool</title>
      <link>https://www.chevdor.com/project/2020/2020-srtool/</link>
      <pubDate>Thu, 05 Mar 2020 15:52:12 +0000</pubDate>
      <guid>https://www.chevdor.com/project/2020/2020-srtool/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;srtool&lt;/code&gt; is a collection of dockerized tools helping with &lt;a href=&#34;https://substrate.dev&#34;&gt;Substrate&lt;/a&gt; &amp;amp; &lt;a href=&#34;https://polkadot.network&#34;&gt;Polkadot&lt;/a&gt; Runtime development.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;It especially helps with building and verifying WASM Runtime Blobs. You may read more about it &lt;a href=&#34;?q=srtool&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The Docker image is &lt;code&gt;chevdor/srtool&lt;/code&gt;. You can find it at &lt;a href=&#34;https://hub.docker.com/r/chevdor/srtool&#34; class=&#34;bare&#34;&gt;https://hub.docker.com/r/chevdor/srtool&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_install&#34;&gt;1. Install&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;sect2&#34;&gt;
&lt;h3 id=&#34;_pull_image&#34;&gt;1.1. Pull image&lt;/h3&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    docker pull chevdor/srtool:&amp;lt;version&amp;gt; # &lt;b class=&#34;conum&#34;&gt;(1)&lt;/b&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;colist arabic&#34;&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;where &lt;code&gt;&amp;lt;version&amp;gt;&lt;/code&gt; is the rustc version you want to use.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;…​or just skip that step, the right image will be fetched at first run.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect2&#34;&gt;
&lt;h3 id=&#34;_using_an_alias&#34;&gt;1.2. Using an alias&lt;/h3&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Creating an alias helps hiding the docker complexity behind one simple command. We will see more powerful options but this one is simple enough.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    export RUSTC_VERSION=nightly-2020-03-12; export PACKAGE=kusama-runtime; alias srtool=&amp;#39;docker run --rm -it -e PACKAGE=$PACKAGE -v $PWD:/build -v /tmp/cargo:/cargo-home chevdor/srtool:$RUSTC_VERSION&amp;#39;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;admonitionblock note&#34;&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&#34;icon&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Note&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;content&#34;&gt;
Note that defining the alias as done above will hardcode the runtime. Using &lt;code&gt;kusama-runtime&lt;/code&gt; as show above means you will &lt;strong&gt;always&lt;/strong&gt; check the kusama runtime. If you need more, check the next chapter.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&#34;admonitionblock note&#34;&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&#34;icon&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Note&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;content&#34;&gt;
If you want to check what your alias is, use &lt;code&gt;type srtool&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The command to invoke a build will then be &lt;code&gt;srtool build&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect2&#34;&gt;
&lt;h3 id=&#34;_power_users&#34;&gt;1.3. Power users&lt;/h3&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;If you want flexibility, using a &lt;strong&gt;function&lt;/strong&gt; is slightly more complex but more flexible.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;If you already defined an alias (you can check with &lt;code&gt;type srtool&lt;/code&gt;), you should first unset it with &lt;code&gt;unlias srtool&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;admonitionblock note&#34;&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&#34;icon&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Note&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;content&#34;&gt;
You cannot use both an alias and a function but you could make a function called fsrtool for instance for the function…​
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&#34;sect3&#34;&gt;
&lt;h4 id=&#34;_hardcoded_compiler_version&#34;&gt;1.3.1. Hardcoded compiler version&lt;/h4&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;This option should be enough most of the time.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    function srtool() { docker run --rm -it -e PACKAGE=$1 -v $PWD:/build -v /tmp/cargo:/cargo-home chevdor/srtool:nightly-2020-03-12 $2; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The commands to use srtool are then:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    srtool kusama-runtime build&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;admonitionblock note&#34;&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&#34;icon&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Note&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;content&#34;&gt;
The &amp;lt;kusama-runtime&amp;gt; keyword above specifies we will check the kusama runtime. If your runtime is called xyz-runtime, swap accordingly.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect3&#34;&gt;
&lt;h4 id=&#34;_parametric_compiler_version&#34;&gt;1.3.2. Parametric compiler version&lt;/h4&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Using this version is more powerful if you know what you are doing but also requires more typing.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    function srtool() { docker run --rm -it -e PACKAGE=$1 -v $PWD:/build -v /tmp/cargo:/cargo-home chevdor/srtool:$2 $3; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The command to invoke a build will then be &lt;code&gt;srtool &amp;lt;package&amp;gt; &amp;lt;rust_version&amp;gt; build&lt;/code&gt;. For instance:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    srtool my-super-runtime nightly-2020-03-12 build
    srtool polkadot-runtime nightly-2019-12-05 build&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;WRNING: The second example is only there to illustrate how it works. If you try it today, it will likely &lt;strong&gt;not&lt;/strong&gt; work as I did not build a container for this version yet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You likely want to make this persistent with:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    echo &amp;#34;export RUSTC_VERSION=nightly-2020-03-12; export PACKAGE=polkadot-runtime; alias srtool=&amp;#39;docker run --rm -it -e PACKAGE=$PACKAGE -v $PWD:/build -v /tmp/cargo:/cargo-home chevdor/srtool:$RUSTC_VERSION&amp;#39;&amp;#34; &amp;gt;&amp;gt; ~/.bash_profile &amp;amp;&amp;amp; source ~/.bash_profile&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;If you wish to see more (it takes a little longer), you may set the &lt;code&gt;VERBOSE&lt;/code&gt; ENV variable:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    export RUSTC_VERSION=nightly-2020-03-12; export PACKAGE=polkadot-runtime; alias srtool=&amp;#39;docker run --rm -it -e PACKAGE=$PACKAGE -e VERBOSE=1 -v $PWD:/build -v /tmp/cargo:/cargo-home chevdor/srtool:$RUSTC_VERSION&amp;#39;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;admonitionblock note&#34;&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&#34;icon&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Note&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;content&#34;&gt;
The part &lt;code&gt;-v /tmp/cargo:/cargo-home&lt;/code&gt; exposes the docker container’s cargo cache on your local machine. This helps making subsequent builds faster.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_use&#34;&gt;2. Use&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Now that you defined the srtool alias, you can use it as shown below:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;title&#34;&gt;See the help&lt;/div&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;srtool help&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Build the runtime&lt;/div&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;srtool build&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Typical run&lt;/div&gt;
&lt;p&gt;Invoking &lt;code&gt;srtool build&lt;/code&gt; with:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;srtool build&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Will output something that looks like this:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    🧰 Substrate Runtime Toolbox 🧰
    🏗  Building polkadot-runtime as release
    ⏳ That can take a little while, be patient... Subsequent builds will be faster.
        Finished release [optimized] target(s) in 37.43s

    real	0m37.931s
    user	0m1.560s
    sys	0m3.220s
    ✨ Your Substrate WASM Runtime is ready! ✨
    Summary:
    Used rustc nightly-2020-03-12 (4560ea788 2019-11-04)
    Wasm     : ./srtool/release/wbuild/polkadot-runtime/polkadot_runtime.compact.wasm
    Content  : 0x0061736d0100000001a4022b60037f7f...3435663020323031392d31322d303429
    Size     : 1.1M
    Proposal : 0x5931690e71e9d3d9f04a43d8c15e45e0968e563858dd87ad6485b2368a286a8f
    SHA256   : d5930520676994fc55a29c547f0159ea860cb46edd710a5be35e62565af1ad8b&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;div class=&#34;title&#34;&gt;JSON output&lt;/div&gt;
&lt;p&gt;If you prefer a json output, srtool has you covered:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;$ srtool build --json&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Will give you such an output:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;{
  &amp;#34;gen&amp;#34;: &amp;#34;srtool&amp;#34;,
  &amp;#34;rustc&amp;#34;: &amp;#34;rustc 1.41.0-nightly (ae1b871cc 2019-12-06)&amp;#34;,
  &amp;#34;wasm&amp;#34;: &amp;#34;./target/srtool/release/wbuild/kusama-runtime/kusama_runtime.compact.wasm&amp;#34;,
  &amp;#34;size&amp;#34;: &amp;#34;1205052&amp;#34;,
  &amp;#34;pkg&amp;#34;: &amp;#34;kusama-runtime&amp;#34;,
  &amp;#34;prop&amp;#34;: &amp;#34;0x5931690e71e9d3d9f04a43d8c15e45e0968e563858dd87ad6485b2368a286a8f&amp;#34;,
  &amp;#34;sha256&amp;#34;: &amp;#34;d93126c814f8366b651e425e34390212a98f8e77a8b73f9e1d2b07fc229a25f1&amp;#34;,
  &amp;#34;tmsp&amp;#34;: &amp;#34;2020-01-14T10:15:28Z&amp;#34;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_proposal_field&#34;&gt;3. Proposal field&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;What is important in the output of srtool is the &lt;code&gt;Proposal&lt;/code&gt; field:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    🧰 Substrate Runtime Toolbox 🧰
    ... Bla bla ...
    Proposal : 0x5931690e71e9d3d9f04a43d8c15e45e0968e563858dd87ad6485b2368a286a8f
    ... more blabla ...&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The &lt;code&gt;Proposal&lt;/code&gt; field value should should match the value of the proposal you can see in the Polkadot UI.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Advanced usage&lt;/div&gt;
&lt;p&gt;if you feel fancy, you may also:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;srtool bash&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;and look around the /srtool folder&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_build_the_docker_image&#34;&gt;4. Build the Docker image&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;While you don’t have to build the image yourself, you still may!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;First you may want to double check what rustc versions are available as you will HAVE to build an image for a given version:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;rustup check&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;So say you want to build a builder for rustc nightly-2020-03-12:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;    RUSTC_VERSION=nightly-2020-03-12 &amp;amp;&amp;amp; docker build --build-arg RUSTC_VERSION=$RUSTC_VERSION -t chevdor/srtool:$RUSTC_VERSION .&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>confmgr</title>
      <link>https://www.chevdor.com/project/2020/2020-confmgr/</link>
      <pubDate>Thu, 05 Mar 2020 15:52:12 +0600</pubDate>
      <guid>https://www.chevdor.com/project/2020/2020-confmgr/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Why &lt;strong&gt;another&lt;/strong&gt; one?&lt;/div&gt;
&lt;p&gt;&lt;code&gt;confmgr&lt;/code&gt; brings interesting features that are not available in libs. While focusing on ease of use, it brings features that no longer need to be part of your app such as:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Features at a glance&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;type conversion (variables from ENV are always strings, &lt;code&gt;confmgr&lt;/code&gt; converts them for you)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;mandatory values: If you miss a value, &lt;code&gt;confmgr&lt;/code&gt; will tell you before your app explodes…​&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;default values: &lt;code&gt;confmrg&lt;/code&gt; handles default values for you&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;regular expressions: &lt;code&gt;confmgr&lt;/code&gt; allows you defining a regexp that will allow checking the validity of the loaded config&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;masked variables: handy for your secrets, read below&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Helper functions&lt;/div&gt;
&lt;p&gt;After getting your config object with &lt;code&gt;GetConfig()&lt;/code&gt;, you can simple use it with &lt;code&gt;config[&amp;#39;MYAPP_MYMODULE_VAR1&amp;#39;]&lt;/code&gt; or use some of the helper methods attached to your config.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;confmgr&lt;/code&gt; brings a set of handy methods such as &lt;code&gt;Print()&lt;/code&gt; that will display the content of your config while ensuring that your secrets do NOT show up in any log or output.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Printing your config may use colors or not. Here is an example with color coming from running &lt;code&gt;config.Print()&lt;/code&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code&gt;===&amp;gt; TS_SAMPLE_MODULE_01 ENV:
✅ PARAM1: some param1
    value: 12
✅ PARAM2: some param2
    value: 44
✅ SECRET: some secret
    value: *****                                &amp;lt;---- Notice how this value has been masked
✅ REGEXP: some regexp
    regexp: ^\d{2}_\d{2}
    value: 68_77
✅ MANDAT_WITH_DEF: some optional param
    value: 42
❌ MANDAT_NO_DEF: some optional param           &amp;lt;----- It looks like we forgot to pass a value
    value: undefined&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;admonitionblock note&#34;&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&#34;icon&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Note&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;content&#34;&gt;
If you are using a custom logger, you may also pass it to the &lt;code&gt;Print()&lt;/code&gt; method so the output gets nicely integrated to your logs while NOT revealing any of your secrets.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can read more about it at &lt;a href=&#34;https://gitlab.com/chevdor/confmgr&#34; class=&#34;bare&#34;&gt;https://gitlab.com/chevdor/confmgr&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>substrate-runtime-hasher</title>
      <link>https://www.chevdor.com/project/2019/2019-12-runtime-hasher/</link>
      <pubDate>Thu, 05 Mar 2020 15:52:12 +0600</pubDate>
      <guid>https://www.chevdor.com/project/2019/2019-12-runtime-hasher/</guid>
      <description></description>
    </item>
    
    <item>
      <title>Registrar #1</title>
      <link>https://www.chevdor.com/project/2019/2019-12-registrar1/</link>
      <pubDate>Sat, 21 Dec 2019 15:52:12 +0600</pubDate>
      <guid>https://www.chevdor.com/project/2019/2019-12-registrar1/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Before the introduction of &lt;a href=&#34;https://www.chevdor.com/project/2020/2020-srtool/&#34;&gt;srtool&lt;/a&gt; in 2020, there was no way for
anyone to verify that a new WASM Runtime proposed on-chain was really built using a given version of the code.
Back then, governance did rely on trust based on the submitter. This is however assuming that you can identify and trust
who is behind a given account.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Any user can set any identity on any account so relying on the sole identity was clearly not enough.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;code&gt;Registrar #1&lt;/code&gt; was introduced to verify the identity of users requesting it. It set the standard for how identities can be
verified and many if not all the subsequent registrars kept on following a very similar process, if not exactly the same.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Over the time, the &lt;code&gt;Registrar #1&lt;/code&gt; started operating on other (para)chains, bringing the list to:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Westend&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kusama&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Polkadot&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Moonbeam&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Moonriver&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can find the registrar page at &lt;a href=&#34;https://registrar.d11d.net/&#34; class=&#34;bare&#34;&gt;https://registrar.d11d.net/&lt;/a&gt; and you may read more about it &lt;a href=&#34;?q=registrar&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Polkabot</title>
      <link>https://www.chevdor.com/project/2019/2019-10-polkabot/</link>
      <pubDate>Tue, 08 Oct 2019 14:51:12 +0600</pubDate>
      <guid>https://www.chevdor.com/project/2019/2019-10-polkabot/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://polkadot.network&#34;&gt;Polkadot&lt;/a&gt; is a platform that allows diverse blockchains to transfer messages, including value, in a trust-free fashion; sharing their unique features while pooling their security. In brief, Polkadot is a scalable, heterogeneous, multi-chain technology.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Monitoring the Polkadot network can mean either staring at charts the whole day until something happens…&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;imageblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;img src=&#34;https://www.chevdor.com/img/post/polkabot/dev-waiting.jpg&#34; alt=&#34;dev waiting&#34; width=&#34;100%&#34;/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;…or asking PolkaBot to take care of the watching. It doesn’t sleep!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;&lt;a href=&#34;https://twitter.com/hashtag/Polkabot?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;#Polkabot&lt;/a&gt; has been launched today. Its job is to monitor the &lt;a href=&#34;https://twitter.com/polkadotnetwork?ref_src=twsrc%5Etfw&#34;&gt;@polkadotnetwork&lt;/a&gt; and alert when interesting events occur.&lt;br&gt;&lt;br&gt;You can see it in action in the following &lt;a href=&#34;https://twitter.com/matrixdotorg?ref_src=twsrc%5Etfw&#34;&gt;@matrixdotorg&lt;/a&gt;&lt;br&gt;room using &lt;a href=&#34;https://twitter.com/RiotChat?ref_src=twsrc%5Etfw&#34;&gt;@RiotChat&lt;/a&gt;&lt;br&gt;: &lt;a href=&#34;https://t.co/hAvsYCOjXw&#34;&gt;https://t.co/hAvsYCOjXw&lt;/a&gt;&lt;a href=&#34;https://twitter.com/hashtag/Blockchain?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;#Blockchain&lt;/a&gt; &lt;a href=&#34;https://twitter.com/hashtag/polkadot?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;#polkadot&lt;/a&gt; &lt;a href=&#34;https://twitter.com/Web3foundation?ref_src=twsrc%5Etfw&#34;&gt;@web3foundation&lt;/a&gt; &lt;a href=&#34;https://t.co/zpsLATNjtk&#34;&gt;pic.twitter.com/zpsLATNjtk&lt;/a&gt;&lt;/p&gt;&amp;mdash; Chevdor (@chevdor) &lt;a href=&#34;https://twitter.com/chevdor/status/1034904126172352512?ref_src=twsrc%5Etfw&#34;&gt;August 29, 2018&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;


&lt;/div&gt;
&lt;hr/&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_polkadot_whats_it_good_for&#34;&gt;Polkadot - what’s it good for?&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The Polkadot network is dynamic in that it can be upgraded via on-chain governance, while operators of the network can be added or removed according to their behavior. Thus participants of the network need to monitor how the network is performing and adjust accordingly. Polkabot helps with this by keeping participants in the network informed, providing updates on new governance proposals and network stalls.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The Polkadot network is based on Proof Of Stake (PoS), which requires the network’s validators (or miners) to verify transactions and be online 24 hours a day with no downtime.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;imageblock text-center&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;img src=&#34;https://www.chevdor.com/img/post/polkabot/parachain.png&#34; alt=&#34;parachain&#34; width=&#34;80%&#34;/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;If a validator runs properly, the network rewards that account with DOTs, the native token of the Polkadot platform. If a validator does not run properly (or not at all), it will get slashed, losing some or all of the DOTs at stake. A validator may even be kicked out of the validators pool.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Another innovative aspect of Polkadot is its on-chain governance system for upgrading the Polkadot software. Unlike many of the currently existing blockchains, the code defining the rules of the Polkadot network (or runtime) is not stored into the program you download and install on your computer. Instead, the runtime is stored in the blockchain itself.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Modifying this code is possible only after enough users agree to the change. Upgrades to the runtime does not require users to install new software to their clients, but instead is similar to existing operating systems in that upgrades occur automatically.&lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_matrix_org&#34;&gt;Matrix.org&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Matrix.org is an open network for secure, decentralized communication. It allows users (or bots) to communicate with each other. Real-facetime discussion around Polkadot and Substrate occur on Riot, an app built on Matrix.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;imageblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;img src=&#34;https://www.chevdor.com/img/post/polkabot/matrix.png&#34; alt=&#34;matrix&#34; width=&#34;100%&#34;/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Clients like Riot make Matrix.org available to many users whether from their computer, laptop or smart phone.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The Matrix.org API allows programmatically interacting with the network. That makes it a tool of choice to alert users and lets them take actions on the go with what is probably the only tool they carry around everywhere: their smartphone.&lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_introducing_polkabot&#34;&gt;Introducing Polkabot&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Polkabot is an extensible chatbot who knows how to speak both on the Matrix.org and Polkadot networks.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;imageblock text-center&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;img src=&#34;https://www.chevdor.com/img/post/polkabot/logo.png&#34; alt=&#34;logo&#34; width=&#34;50%&#34;/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Join the Polkabot room to receive real-time updates on how Polkadot is performing:
&lt;a href=&#34;https://matrix.to/#/#polkadot-network-status:matrix.org&#34; class=&#34;bare&#34;&gt;https://matrix.to/#/#polkadot-network-status:matrix.org&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can also find the code for Polkabot here.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Polkabot is being optimised to issue as few critical alerts as possible so that the important information stands out.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Polkabot currently packages a few plugins:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Blocthday: A demo plugin that wishes Polkadot a happy blocthday every nth block.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;BlockStats: A plugin that monitors the network and posts statistics if some metrics are atypical.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;StallWatcher: Polkadot PoC-2 is still in its early days and the network is currently supported by a small number of validators (roughly 20). Being alerted early is key to keeping the network running. StallWatcher posts an alert if the last block was seen greater than X seconds ago.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reporter: A must for any good Polkadot citizen who is interested in the on-chain governance capabilities that Polkadot offers. The Reporter plugin constantly watches the Polkadot network and informs its citizen of new proposals and referenda, as soon as they are proposed for a vote.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Validators: This plugin watches changes in the Validator list, informs of validators coming in and out, and warns validators as soon have they may have been slashed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;More plugins are still being implemented and will be seamlessly added, including direct communication with Polkabot.&lt;/p&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_about_the_author&#34;&gt;About the author&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Will is also writing articles for Base58.de where Blockchain news are decrypted and explained in German. Find other Polkadot related articles translated to German at &lt;a href=&#34;https://base58.de/tag/polkadot/&#34; class=&#34;bare&#34;&gt;https://base58.de/tag/polkadot/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_references_links&#34;&gt;References &amp;amp; links&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Polkadot Network: &lt;a href=&#34;https://polkadot.network/&#34; class=&#34;bare&#34;&gt;https://polkadot.network/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Polkadot repository on Github: &lt;a href=&#34;https://github.com/paritytech/polkadot&#34; class=&#34;bare&#34;&gt;https://github.com/paritytech/polkadot&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Polkadot Wiki: &lt;a href=&#34;https://github.com/w3f/Web3-wiki/wiki/Polkadot&#34; class=&#34;bare&#34;&gt;https://github.com/w3f/Web3-wiki/wiki/Polkadot&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Polkabot repo: &lt;a href=&#34;https://gitlab.com/Polkabot/&#34; class=&#34;bare&#34;&gt;https://gitlab.com/Polkabot/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Polkabot news: &lt;a href=&#34;https://twitter.com/hashtag/Polkabot&#34; class=&#34;bare&#34;&gt;https://twitter.com/hashtag/Polkabot&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Meet the community on Riot: &lt;a href=&#34;https://riot.im/app/#/room/#polkadot-watercooler:matrix.org&#34; class=&#34;bare&#34;&gt;https://riot.im/app/#/room/#polkadot-watercooler:matrix.org&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Docker Image for Polkadot</title>
      <link>https://www.chevdor.com/project/2018/2018-docker-polkadot/</link>
      <pubDate>Tue, 24 Jul 2018 14:51:12 +0600</pubDate>
      <guid>https://www.chevdor.com/project/2018/2018-docker-polkadot/</guid>
      <description></description>
    </item>
    
    <item>
      <title>ethup</title>
      <link>https://www.chevdor.com/project/2018/2018-ethup/</link>
      <pubDate>Wed, 04 Apr 2018 14:51:12 +0600</pubDate>
      <guid>https://www.chevdor.com/project/2018/2018-ethup/</guid>
      <description>&lt;hr/&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;In order to interact with the Ethereum Blockchain and the best levels of security, one need to first have a running node that is fully synchronised. With the increasing traffic on Ethereum, this is becoming more and more difficult for regular users to stay in sync. This article introduces ethup, a simple tool that aims at doing just that.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;imageblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;img src=&#34;https://www.chevdor.com/img/post/ethup/console.png&#34; alt=&#34;console&#34;/&gt;
&lt;/div&gt;
&lt;div class=&#34;title&#34;&gt;Figure 1. Console output while synchronising the Ethereum Blockchain using parity&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;ethup can be found on github at: &lt;a href=&#34;https://github.com/chevdor/ethup&#34; class=&#34;bare&#34;&gt;https://github.com/chevdor/ethup&lt;/a&gt; and has been published on npm.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;imageblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;img src=&#34;https://www.chevdor.com/img/post/ethup/refresh.png&#34; alt=&#34;refresh&#34; width=&#34;50%&#34;/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_server_vs_casual_user&#34;&gt;Server vs Casual User&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Initially, Ethereum nodes such as geth or parity have been design to run 24/7 and never… ever… stop. For such a piece of software to never break is not an easy task and passionate developers work hard everyday to ensure the stability of your favourite Ethereum client.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Before going any further, let’s give a short definition for what I call casual user. The casual user is using Ethereum from time to time but not all the time. The casual user is using a standard computer and may turn it on and off from time to time. As much as nodes running 24/7 on servers, the casual user is a key element to a successful Blockchain as it its main user.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Until about last year, synchronising the Ethereum blockchain as a casual user was rather easy. You just had to start your favourite client, let it spin a few minutes or an hour at most to catch up with the latest blocks from a week or two.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;This has changed. Synchronising weeks of the Ethereum blockchain takes a long time. On a good laptop (with SSD drive) with a good internet connect and a killer internet connection, you should get a speed of 3~5 blocks a second. During that time, new blocks are created every ~15s on the fundation network and and you also need to catch up with those.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Developers feel this issue ever harder as they often synchronise several chains such as the “testnet” chains (ie: kovan, rinkeby, ropsten). Those are very similar to the official Ethereum Blockchain but offer different properties such as different consensus algorithms, faster block generation and most important Ether has no value on those chains.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The issue is known and the developers of Ethereum clients are working hard to improve the situation. Their work includes:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;the ability to reduce the amount of data stored locally&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;speed up the synchronisation using frequent snapshots that client can securely share among them&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;compress the data going over the network&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;to support ‘light’ clients that can work without downloading the full blockchain&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;splitting clients and UI&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Most of those improvements are barely noticed by users but often the result of very clever optimisations.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_light_clients&#34;&gt;Light clients&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Some improvements however are real tradeoffs. Using a light client for instance, means that you no longer have the entire blockchain locally and your node will need to fetch some of the data, when needed, from trusted sources.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_ethup&#34;&gt;ethup&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;I wrote ethup in order to help synchronising nodes using parity or geth with the various chains they support. ethup lets you start your client and reads its console output. When ethup thinks the chain has been entirely synchronised, it will stop the node.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Since I started this article, I also opened issues for both clients. You can find them at:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/paritytech/parity/issues/8244&#34; class=&#34;bare&#34;&gt;https://github.com/paritytech/parity/issues/8244&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ethereum/go-ethereum/issues/16400&#34; class=&#34;bare&#34;&gt;https://github.com/ethereum/go-ethereum/issues/16400&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The ability to stop the node after it bas been synchronised means that you can then start synchronising another chain without changing the configuration or the ports being used.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;I am personally using an alias I call ethupall to synchronise all my chains:
alias ethupall=’time ethup -c “parity --chain kovan”; time ethup -c “parity --chain ropsten”; ethup -c “parity”; time ethup -c “geth --rinkeby”’&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Since the issues mentioned above have been opened, some interesting discussions started. While geth does not seem to have a feature allowing to stop the node once the chain has been synced, the proposal for this change has been positively welcomed and seems to be being implemented.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;As far as parity is concerned, a similar feature seems to exist already but I could not get it to work. If you follow the discussion, you will however find some interesting tricks from @5chdn showing how you can start several parity nodes in parallel as long as you shift their ports to prevent conflicts. This may be a good option if you only use parity nodes.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_installation&#34;&gt;Installation&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Installing ethup is easy (you need NodeJS/npm) and you can find the full documentation at: &lt;a href=&#34;https://github.com/chevdor/ethup&#34; class=&#34;bare&#34;&gt;https://github.com/chevdor/ethup&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;$ npm install -g ethup&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can then immediately use it:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;ethup -c &amp;#34;parity --chain kovan&amp;#34; &amp;amp;&amp;amp; ethup -c &amp;#34;geth --rinkeby&amp;#34;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;When the command above exits, both your kovan and rinkeby chains will be in sync.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can now start every day in sync!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;imageblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;img src=&#34;https://www.chevdor.com/img/post/ethup/sunset.png&#34; alt=&#34;sunset&#34;/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>replay-safe-split-v2</title>
      <link>https://www.chevdor.com/project/2016/replay-safe-split-v2/</link>
      <pubDate>Wed, 04 Apr 2018 14:51:12 +0600</pubDate>
      <guid>https://www.chevdor.com/project/2016/replay-safe-split-v2/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;In a recent &lt;a href=&#34;https://blog.ethereum.org/2016/07/26/onward_from_the_hard_fork/&#34; class=&#34;external&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;post&lt;/a&gt; , Vitalik Buterin mentioned the need to ‘split’ Ether funds in order to prevent replay attacks and pointed to a &lt;a href=&#34;http://etherscan.io/address/0xaa1a6e3e6ef20068f7f8d8c835d2d22fd5116444#code&#34; class=&#34;external&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;splitter contract&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;While this splitter contract has been verified and works fine, it leaves room for user errors as some &lt;a href=&#34;https://etherscan.io/tx/0x1c96608bda6ce4be0d0f30b3a5b3a9d9c94930291a168a0dbddfe9be24ac70d1&#34; class=&#34;external&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;unfortunately discovered&lt;/a&gt; by loosing some of their funds. I feel very sorry for the users who ran into this issue and I decided to improve the existing solution. If you did not split yet, read on as the new contract may help you stay safe.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;At first, the issues may not be obvious unless you double check both chains. Your funds may go to the expected address
on one fork and go to the dreaded 0x00000000000… address on the other fork. A fix is mandatory.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The &lt;a href=&#34;https://etherscan.io/address/0xaBbb6bEbFA05aA13e908EaA492Bd7a8343760477&#34;&gt;&lt;code&gt;ReplaySafeSplit-v2&lt;/code&gt; smart contract&lt;/a&gt; has
been processing over 710,651 transactions from 2016 to 2021 and over 42 billion worth of USD.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Read more at &lt;a href=&#34;https://www.chevdor.com/post/2016/09/04/replay-safe-split-v2/&#34;&gt;this post&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Solidity Snippets</title>
      <link>https://www.chevdor.com/project/2017/2017-soliditysnippets/</link>
      <pubDate>Tue, 18 Apr 2017 14:51:12 +0600</pubDate>
      <guid>https://www.chevdor.com/project/2017/2017-soliditysnippets/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Use Control Package to install.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;This package requires the great package from davidhq: &lt;a href=&#34;https://github.com/davidhq/SublimeEthereum&#34; class=&#34;bare&#34;&gt;https://github.com/davidhq/SublimeEthereum&lt;/a&gt; to recognize solidity code.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;To get started, create a .sol file. SublimeText will then recognize your file as an Ethereum Solidity file and activate the syntax coloriring as well as the snippets.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;To see the list of available snippets, open the Panel (Shift+Command+P) and type &amp;#39;solidity&amp;#39;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;imageblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;img src=&#34;https://github.com/chevdor/EthereumSoliditySnippets/raw/master/doc/s01.png&#34; alt=&#34;s01&#34;/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;admonitionblock note&#34;&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&#34;icon&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Note&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;content&#34;&gt;
All snippets are triggered by their Solidity name so they should come up automagically as you type.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;See the project’S repo at &lt;a href=&#34;https://github.com/chevdor/EthereumSoliditySnippets&#34; class=&#34;bare&#34;&gt;https://github.com/chevdor/EthereumSoliditySnippets&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Generator EthApp</title>
      <link>https://www.chevdor.com/project/2017/2017-ethdapp/</link>
      <pubDate>Fri, 24 Mar 2017 14:51:12 +0600</pubDate>
      <guid>https://www.chevdor.com/project/2017/2017-ethdapp/</guid>
      <description>&lt;div class=&#34;imageblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;a class=&#34;image&#34; href=&#34;https://asciinema.org/a/89762&#34;&gt;&lt;img src=&#34;https://asciinema.org/a/89762.png&#34; alt=&#34;89762&#34;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_getting_started&#34;&gt;Getting Started&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Read on a give a try.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;sect2&#34;&gt;
&lt;h3 id=&#34;_what_is_yeoman&#34;&gt;What is Yeoman?&lt;/h3&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Trick question. It’s not a thing. It’s this guy:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;span class=&#34;image&#34;&gt;&lt;img src=&#34;http://i.imgur.com/JHaAlBJ.png&#34; alt=&#34;JHaAlBJ&#34;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Basically, he wears a top hat, lives in your computer, and waits for you to tell him what kind of application you wish to create.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Not every new computer comes with a Yeoman pre-installed. He lives in the [npm](&lt;a href=&#34;https://npmjs.org&#34; class=&#34;bare&#34;&gt;https://npmjs.org&lt;/a&gt;) package repository. You only have to ask for him once, then he packs up and moves into your hard drive. &lt;strong&gt;Make sure you clean up, he likes new and shiny things.&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;npm install -g yo&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect2&#34;&gt;
&lt;h3 id=&#34;_yeoman_generators&#34;&gt;Yeoman Generators&lt;/h3&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Yeoman travels light. He didn’t pack any generators when he moved in. You can think of a generator like a plug-in. You get to choose what type of application you wish to create, such as a Backbone application or even a Chrome extension.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;To install generator-ethdapp from npm, run:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;npm install -g generator-ethdapp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Finally, initiate the generator:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;yo ethdapp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect2&#34;&gt;
&lt;h3 id=&#34;_getting_to_know_yeoman&#34;&gt;Getting To Know Yeoman&lt;/h3&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Yeoman has a heart of gold. He’s a person with feelings and opinions, but he’s very easy to work with. If you think he’s too opinionated, he can be easily convinced.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;If you’d like to get to know Yeoman better and meet some of his friends, [Grunt](&lt;a href=&#34;http://gruntjs.com&#34; class=&#34;bare&#34;&gt;http://gruntjs.com&lt;/a&gt;) and [Bower](&lt;a href=&#34;http://bower.io&#34; class=&#34;bare&#34;&gt;http://bower.io&lt;/a&gt;), check out the complete [Getting Started Guide](&lt;a href=&#34;https://github.com/yeoman/yeoman/wiki/Getting-Started&#34; class=&#34;bare&#34;&gt;https://github.com/yeoman/yeoman/wiki/Getting-Started&lt;/a&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_generating_your_dapp&#34;&gt;Generating your Dapp&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;For a generic Dapp:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;yo ethdapp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;For a Dapp taylored to Parity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;yo ethdapp:parity&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Then answer the questions. Once you are done, run the deploy script:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;./deploy.sh&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Then (re)start Parity:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;listingblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre class=&#34;highlight&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;parity ui&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You will see your app listed there:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;span class=&#34;image&#34;&gt;&lt;img src=&#34;https://github.com/chevdor/generator-ethdapp/raw/master/images/parity.png&#34; alt=&#34;parity&#34;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Click on that link and you will see your DAPP:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;span class=&#34;image&#34;&gt;&lt;img src=&#34;https://github.com/chevdor/generator-ethdapp/raw/master/images/generated.png&#34; alt=&#34;generated&#34;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_license&#34;&gt;License&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;MIT&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/chevdor/generator-ethdapp&#34; class=&#34;bare&#34;&gt;https://github.com/chevdor/generator-ethdapp&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Ethereum Chocolatey</title>
      <link>https://www.chevdor.com/project/2015/2015-ethereum-chocolatey/</link>
      <pubDate>Fri, 27 Mar 2015 02:34:12 +0100</pubDate>
      <guid>https://www.chevdor.com/project/2015/2015-ethereum-chocolatey/</guid>
      <description>&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can visit the project page on &lt;a href=&#34;https://github.com/chevdor/ethereum-chocolatey&#34;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The Github project for AlethZero is located at &lt;a href=&#34;https://github.com/ethereum/cpp-ethereum&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can find the list of available packages on &lt;a href=&#34;https://chocolatey.org/packages?q=ethereum&amp;amp;prerelease=true&amp;amp;sortOrder=relevance&#34;&gt;chocolatey.org&lt;/a&gt; or read more about &lt;a href=&#34;https://github.com/chocolatey/choco/wiki&#34;&gt;chocolatey&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;admonitionblock warning&#34;&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&#34;icon&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Warning&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;content&#34;&gt;
The &lt;strong&gt;latest&lt;/strong&gt; version changes very often. The package downloads the latest. It means that unlike the chocolatey package may suggest, you are not installing &lt;strong&gt;THE&lt;/strong&gt; version x.y.z but the current candidate for this version. The official versions will not be flagged with -pre
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_uninstallation&#34;&gt;(Un)Installation&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;First ensure you have installed chocolatey: &lt;a href=&#34;https://chocolatey.org/&#34; class=&#34;bare&#34;&gt;https://chocolatey.org/&lt;/a&gt;. You will find a one-liner on the site to install it.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;admonitionblock note&#34;&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&#34;icon&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Note&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;content&#34;&gt;
At the moment, AlethZero is still a beta, so is the chocolatey package, so dont´t forget the -pre flag!
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;To find the latest package:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;clist -pre alethzero-stable&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;To install AlethZero:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;cinst -pre alethzero-stable&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;To install the latest version if you already have a version installed:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;cinst -pre -force alethzero-stable&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;To uninstall AlethZero:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;cuninst alethzero-stable&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_what_is_the_package_doing_on_my_machine&#34;&gt;What is the package doing on my machine?&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;sect2&#34;&gt;
&lt;h3 id=&#34;_install&#34;&gt;Install&lt;/h3&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Download the latest build from the official repo&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Store the file into your temp folder&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unzip it in your %ProgramFiles%\AlethZero-stable&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete the temp file&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect2&#34;&gt;
&lt;h3 id=&#34;_uninstall&#34;&gt;Uninstall&lt;/h3&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Wipe the install folder %ProgramFiles%\AlethZero&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete the registry keys related to AlethZero&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&#34;admonitionblock note&#34;&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class=&#34;icon&#34;&gt;
&lt;div class=&#34;title&#34;&gt;Note&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&#34;content&#34;&gt;
AlethZero is a subkey of Ethereum in the registry. The uninstall process does &lt;strong&gt;not&lt;/strong&gt; remove the ethereum key.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_can_i_trust_it&#34;&gt;Can I trust it?&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;No! Never trust. Check it yourself!&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can find the scripts here:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install: &lt;a href=&#34;https://github.com/chevdor/ethereum-chocolatey/blob/master/tools/chocolateyInstall.ps1&#34;&gt;chocolateyInstall.ps1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Uninstall: &lt;a href=&#34;https://github.com/chevdor/ethereum-chocolatey/blob/master/tools/chocolateyUninstall.ps1&#34;&gt;chocolateyUninstall.ps1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You can also see the script on the chocolatey.org website.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;Finally, you may download the package and open it locally using &lt;a href=&#34;https://chocolatey.org/packages/nugetpackageexplorer&#34;&gt;NuGET Package Explorer&lt;/a&gt; and look at the scripts before executing anything.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_known_issues&#34;&gt;Known issues&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;ulist&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;If you install the package from powershell, the installer will throw you in the install folder at the end of the install. If you run from a regular shell, it will not do that and leave you where you are.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The uninstall does not remove the ethereum registry entry. This is wanted as more software may come under this key in the future and that would be a bad idea to be so aggressive.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure to open your command prompt as Admin unless UAC is disabled. Otherwise you won´t be able to create a new folder in &amp;#34;Program Files&amp;#34; and the install will fail.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;sect1&#34;&gt;
&lt;h2 id=&#34;_how_to_contribute_or_build_the_package_yourself&#34;&gt;How to contribute or build the package yourself?&lt;/h2&gt;
&lt;div class=&#34;sectionbody&#34;&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;You are very welcome to clone this repository and submit pull requests.
You can also easily build the package yourself using the &amp;#34;chocolatey pack&amp;#34; command:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;cpack&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;The local install then goes with:&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&#34;literalblock&#34;&gt;
&lt;div class=&#34;content&#34;&gt;
&lt;pre&gt;cinst -pre alethzero-stable -source %cd%&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;paragraph&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/chevdor/ethereum-chocolatey&#34; class=&#34;bare&#34;&gt;https://github.com/chevdor/ethereum-chocolatey&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
  </channel>
</rss>
