<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: abdelkrim boutkhil</title>
    <description>The latest articles on DEV Community by abdelkrim boutkhil (@boulix3).</description>
    <link>https://dev.to/boulix3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F906406%2Fbe4a109c-c61b-45d8-8390-fea89ac0444d.jpg</url>
      <title>DEV Community: abdelkrim boutkhil</title>
      <link>https://dev.to/boulix3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/boulix3"/>
    <language>en</language>
    <item>
      <title>avalancheseqlogger</title>
      <dc:creator>abdelkrim boutkhil</dc:creator>
      <pubDate>Thu, 06 Oct 2022 09:05:07 +0000</pubDate>
      <link>https://dev.to/boulix3/avalancheseqlogger-j5d</link>
      <guid>https://dev.to/boulix3/avalancheseqlogger-j5d</guid>
      <description>&lt;h1&gt;
  
  
  avalancheseqlogger
&lt;/h1&gt;

&lt;p&gt;When you work on custom subnets using avalanche-network-runner, you probably have logs all over the place.&lt;br&gt;
You can have all your logs in one place using centralized logging solutions.&lt;/p&gt;

&lt;p&gt;This is a tutorial of how to use &lt;a href="https://datalust.co/" rel="noopener noreferrer"&gt;Seq&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this screenshot, you can see the logs from 4 nodes and 2 processes (avalancheGo and SubDotNetVm). You can filter the logs, expand lines to see the structured logs, and there is also a "tail" like mode.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Centralized logging using Seq&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fboulix3%2Fdevblog%2Fmain%2Fposts%2Fassets%2Fseq-running.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fboulix3%2Fdevblog%2Fmain%2Fposts%2Fassets%2Fseq-running.png" alt="seq-running"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I made very minimal modifications to avalanchego (4 lines of code in log/factory.go).&lt;/p&gt;
&lt;h1&gt;
  
  
  How to run
&lt;/h1&gt;

&lt;p&gt;1) You need to run seq locally.&lt;/p&gt;

&lt;p&gt;It's very easy to run seq in your local dev environment using docker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; seqtmp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;ACCEPT_EULA&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Y &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; /tmp/seq:/data &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 18080:80 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 5341:5341 &lt;span class="se"&gt;\&lt;/span&gt;
  datalust/seq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or if you use podman&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;podman run &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; seqtmp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;ACCEPT_EULA&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Y &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; /tmp/seq:/data:Z &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 18080:80 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 5341:5341 &lt;span class="se"&gt;\&lt;/span&gt;
  datalust/seq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) Clone and build this modified version of &lt;a href="https://github.com/subdotnet/avalanchego" rel="noopener noreferrer"&gt;avalanchego&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this exemple, we will clone it in &lt;code&gt;/tmp&lt;/code&gt; but you can choose any folder you like.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /tmp
git clone https://github.com/subdotnet/avalanchego
&lt;span class="nb"&gt;cd &lt;/span&gt;avalanchego
./scripts/build.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The compiled binary path is &lt;code&gt;/tmp/avalanchego/build/avalanchego&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;3) Install and run avalanche-network-runner&lt;/p&gt;

&lt;p&gt;Install using these &lt;a href="https://github.com/ava-labs/avalanche-network-runner#installation" rel="noopener noreferrer"&gt;instructions&lt;/a&gt;&lt;br&gt;
You will need two terminals for this : &lt;br&gt;
Start avalanche-network-runner in one terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;avalanche-network-runner server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the nodes in another terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;avalanche-network-runner control start &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--log-level&lt;/span&gt; info &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--number-of-nodes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--avalanchego-path&lt;/span&gt; /tmp/avalanchego/build/avalanchego
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4) Watch the logs &lt;/p&gt;

&lt;p&gt;Open this url &lt;a href="http://localhost:18080/" rel="noopener noreferrer"&gt;http://localhost:18080/&lt;/a&gt; in your browser&lt;/p&gt;

</description>
      <category>subdotnet</category>
      <category>avalanche</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>plopchain</title>
      <dc:creator>abdelkrim boutkhil</dc:creator>
      <pubDate>Thu, 29 Sep 2022 15:25:36 +0000</pubDate>
      <link>https://dev.to/boulix3/plopchain-47fm</link>
      <guid>https://dev.to/boulix3/plopchain-47fm</guid>
      <description>&lt;h1&gt;
  
  
  Metamask compatible json-rpc server
&lt;/h1&gt;

&lt;p&gt;This project is a proof of concept - It implements the minimum required ethereum rpc apis to be able to accept simple metamask transactions (transfert only).&lt;/p&gt;

&lt;p&gt;This will be included in sub.net library.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites :
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dotnet.microsoft.com/en-us/download/dotnet/7.0" rel="noopener noreferrer"&gt;dotnet 7 sdk&lt;/a&gt; to build the project&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Metamask extension depending on your browser :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn" rel="noopener noreferrer"&gt;chrome web store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/fr/firefox/addon/ether-metamask/" rel="noopener noreferrer"&gt;firefox addons&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Clone the subdotnet/metamask-mini-api repository&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/subdotnet/metamask-mini-api.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Run the demo :
&lt;/h2&gt;

&lt;p&gt;1) The simple blockchain has 2 prefunded wallets. You can import these private keys in metamask : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;616b28bfaa49973faf243ec3296a01675c742533f06c325c78f3d63ceef67963

&lt;ul&gt;
&lt;li&gt;public key : 0x145272D2e9828aE2A25913c0643ff0cb486bBAD1&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;ff067934635e368095f47bfc72942087e07b097d0c541b8f4602dcd255de50fd

&lt;ul&gt;
&lt;li&gt;public key : 0x169E72fa2CC6Ec61402dc3C5D3c16ACc4d83BAD2&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;The public keys end with "&lt;em&gt;BADx&lt;/em&gt;".&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Install metamask and import prefunded dev addresses :&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fboulix3%2Fdevblog%2Fmain%2Fposts%2Fassets%2Fmetamask-walletconfig.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fboulix3%2Fdevblog%2Fmain%2Fposts%2Fassets%2Fmetamask-walletconfig.gif" alt="configure metamask wallet"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2) Run the project&lt;br&gt;
Inside the cloned repository, simply execute &lt;code&gt;dotnet run&lt;/code&gt; and you should have this output in the console : &lt;code&gt;json-rpc api listening on http://localhost:5035&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;3) Configure &lt;em&gt;localPLOP&lt;/em&gt; network in metamask&lt;br&gt;
Open metamasks settings and go to the network tab.&lt;br&gt;
Add new network with the folowing values :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name : localPLOP&lt;/li&gt;
&lt;li&gt;RPC Url : &lt;a href="http://localhost:5035/" rel="noopener noreferrer"&gt;http://localhost:5035/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Chain id : 12345&lt;/li&gt;
&lt;li&gt;Currency symbol : PLOP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You should have 42 PLOP in your &lt;em&gt;BAD1&lt;/em&gt; wallet and 1337 PLOP in your &lt;em&gt;BAD2&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Configure custom network in metamask and transfer funds :&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fboulix3%2Fdevblog%2Fmain%2Fposts%2Fassets%2Fmetamask-networkconfig.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fboulix3%2Fdevblog%2Fmain%2Fposts%2Fassets%2Fmetamask-networkconfig.gif" alt="configure metamask wallet"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>metamask</category>
      <category>ethereum</category>
      <category>blockchain</category>
      <category>subdotnet</category>
    </item>
    <item>
      <title>subdotnet</title>
      <dc:creator>abdelkrim boutkhil</dc:creator>
      <pubDate>Thu, 08 Sep 2022 13:28:16 +0000</pubDate>
      <link>https://dev.to/boulix3/subdotnet-3h45</link>
      <guid>https://dev.to/boulix3/subdotnet-3h45</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/subdotnet"&gt;Sub.Net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Custom avalanche subnet VMs written in C#&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it all started
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/boulix3/subdotnet"&gt;This project&lt;/a&gt; was originaly my submission for the Avalanche Summit Hackathon in Barcelona.&lt;br&gt;
It was a simple proof of concept showing a dotnet app implementing the &lt;a href="https://github.com/ava-labs/avalanchego/blob/master/proto/vm/vm.proto"&gt;avalanche vm&lt;/a&gt; interface and running as an avalanche subnet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it's going
&lt;/h2&gt;

&lt;p&gt;The goal is to make it as easy as possible for any .net developper to create a custom blockchain.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/subdotnet"&gt;github organisation&lt;/a&gt; will contain at least two projects : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/subdotnet/sub.net"&gt;sub.net&lt;/a&gt; Nuget package &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/subdotnet/subdotnet-cli"&gt;sdn&lt;/a&gt; Command line interface published as a &lt;a href="https://www.nuget.org/packages/sdn/"&gt;dotnet-tool&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>subdotnet</category>
      <category>avalanche</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Introduction</title>
      <dc:creator>abdelkrim boutkhil</dc:creator>
      <pubDate>Fri, 12 Aug 2022 10:08:38 +0000</pubDate>
      <link>https://dev.to/boulix3/introduction-5429</link>
      <guid>https://dev.to/boulix3/introduction-5429</guid>
      <description>&lt;p&gt;Hello, I'm starting this blog to keep track of my progress.&lt;/p&gt;

&lt;p&gt;Starting september, I'll try to post a few times per week over the following few months.&lt;/p&gt;

&lt;p&gt;A few themes I'll be bloging about include : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom &lt;a href="https://support.avax.network/en/articles/4064861-what-is-a-subnet"&gt;avalanche subnets&lt;/a&gt; using &lt;a href="https://github.com/dotnet/runtime"&gt;.NET&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;IOT related tutorials - I just purchased two of these &lt;a href="https://github.com/Xinyuan-LilyGO/T-ZigBee/"&gt;boards&lt;/a&gt; and I am starting with zero knowledge.&lt;/li&gt;
&lt;li&gt;Random stuff&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope you have fun following me :)&lt;/p&gt;

</description>
      <category>intro</category>
    </item>
  </channel>
</rss>
