<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Saksham Chaudhary]]></title><description><![CDATA[Dev.]]></description><link>https://sakshamchaudhary.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!J2Dh!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90415-d443-4e2d-818d-1cb436b6a0fb_735x735.jpeg</url><title>Saksham Chaudhary</title><link>https://sakshamchaudhary.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 14 Jun 2026 22:37:35 GMT</lastBuildDate><atom:link href="https://sakshamchaudhary.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Saksham Chaudhary]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[sakshamchaudhary@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[sakshamchaudhary@substack.com]]></itunes:email><itunes:name><![CDATA[Saksham Chaudhary]]></itunes:name></itunes:owner><itunes:author><![CDATA[Saksham Chaudhary]]></itunes:author><googleplay:owner><![CDATA[sakshamchaudhary@substack.com]]></googleplay:owner><googleplay:email><![CDATA[sakshamchaudhary@substack.com]]></googleplay:email><googleplay:author><![CDATA[Saksham Chaudhary]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How to land the $300K offer ?]]></title><description><![CDATA[Disclaimer: Even I don't know :(]]></description><link>https://sakshamchaudhary.substack.com/p/how-to-land-the-300k-offer</link><guid isPermaLink="false">https://sakshamchaudhary.substack.com/p/how-to-land-the-300k-offer</guid><dc:creator><![CDATA[Saksham Chaudhary]]></dc:creator><pubDate>Fri, 12 Jun 2026 20:15:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BsOH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BsOH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BsOH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BsOH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BsOH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BsOH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BsOH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg" width="736" height="552" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:552,&quot;width&quot;:736,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73213,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://sakshamchaudhary.substack.com/i/201793282?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BsOH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BsOH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BsOH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BsOH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed6fe5b1-cd15-46c0-b318-317866bdc50a_736x552.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The title of this article is the question I have been asking myself for a while now. I am working right now at a decent place but not happy with the kind of work I am doing on a daily basis. This made be wondering how can I jump to a higher package and at the same time do something relevant and meaningful in terms of contributing to something that actually makes an impact in the real world. </p><p> I tried a lot of things I was naturally interested in like LLM Inference, low level distributed programming in rust, but all of these things are niches and unfortunately the interview processes of these niches are not actually what you learn. So for examples for an llm inference optimisation role you won&#8217;t be asked to implement an optimised inference engine or any parts of it, these interview are usually to access you on how smart you are in general, meaning you strongly can you think about a problem and then come up with a solution and counter question your own solution and improve and iterate over it until you reach the most optimised solution. This sounds very similar to this kind of thinking is one thing we all hate in CS ( at least this is my assumption ) is DSA. Yes, Data structure and algorithms but not exactly your college placements average DSA questions, I am talking about the codeforces like problems which actually make to think about a problem rather than trying to learn 20 patterns and reusing them again and again in different problems. The reason a came to this conclusion was this article. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sakshamchaudhary.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://x.com/hiiinternet/status/2065117819948437765&quot;,&quot;full_text&quot;:&quot;https://t.co/Gpmb2JENiX&quot;,&quot;username&quot;:&quot;hiiinternet&quot;,&quot;name&quot;:&quot;seb&quot;,&quot;profile_image_url&quot;:&quot;https://pbs.substack.com/profile_images/2062265683694530560/EB4GzwdL_normal.jpg&quot;,&quot;date&quot;:&quot;2026-06-11T17:03:50.000Z&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:25,&quot;retweet_count&quot;:70,&quot;like_count&quot;:1047,&quot;impression_count&quot;:513214,&quot;expanded_url&quot;:null,&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>In this article Seb went through more than 1000 LinkedIn&#8217;s of people working at anthropic right now and the most common thing he found out was, majority of them came to anthropic from Google, meta, OpenAI, Deep mind, Jane street, Stripe etc. They were either working there or had some internship at anyone of these companies and these are the companies operating at an scale which is extremely big. </p><p>Now given all of this information ask yourself a question, how do people get into these companies ? and then ask again who are the people which stay at the top in these companies. The answer to both of these questions are the people who are actually interested in CS, who have an curiosity to really understand and build products. Another thing that was common among them was their codeforces rankings mostly 2900+. Here we have our answer, I am honestly not sure what is it about doing and solving these problems that train your brain to think faster and smarter than an average human and that is the exact skill your are paid $300K for. So a very clear roadmap for anyone is rather than trying to get into these AI labs directly one should try and get into the companies these labs are hiring from and then making a switch would just be easy for you. But getting into these companies which are known for their amazing infra and tech is a few hundred codeforces grinds away.</p><p>More than an article this is more of a roadmap I am writing for myself. I will start doing codeforces and start spending some amount of time everyday learning what is actually useful. Starting with clearing up the basics. These are my thoughts and what I think is worth doing in this brutal job market. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sakshamchaudhary.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How an Exchange does private key management ?]]></title><description><![CDATA[If you are reading this you most probably are aware about what are exchanges specially the two major different types of exchanges which are the Centralised(CEX) and Decentralised(DEX).]]></description><link>https://sakshamchaudhary.substack.com/p/how-an-exchange-does-private-key</link><guid isPermaLink="false">https://sakshamchaudhary.substack.com/p/how-an-exchange-does-private-key</guid><dc:creator><![CDATA[Saksham Chaudhary]]></dc:creator><pubDate>Thu, 21 May 2026 09:09:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f45de035-ebf3-4dad-896c-75df64bf05d5_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you are reading this you most probably are aware about what are exchanges specially the two major different types of exchanges which are the Centralised(CEX) and Decentralised(DEX). In a centralised exchange the platform is managing your private keys on your behalf, that sounds very counter intuitive to the very popular phase &#8220;Not your private key, not your crypto&#8221;. Given all of these there are not a lot of people aware about the risk involved in this and even if they are they do not want to take up the responsibility to manage and keep that private key safe so, they just trust platforms like these to manage everything on their behalf and then just assume that when they ask the platform to withdraw the money the platform won&#8217;t go bankrupt.</p><p>So, private key management can be done in a few ways, I will take you through the most popular three approaches platform like exchanges or a platform like Tiplink uses. The main problem that we are trying to solve is there should be no single point of failure i.e there should be no way that in the entire system there is a single authority that needs to be trusted to keep the private key safe. The transactions should be as trust less as possible and at the same time being robust.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sakshamchaudhary.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Multi-Signatures (Multi-Sigs)</h3><p>The name of this approach gives away a lot of information about what it would be about and how will it actually work. Let&#8217;s suppose there is a Exchange A which have a fat wallet with 50M USDT, now with this approach every time a user would want to withdraw whatever amount of asset they choose and the user gives in their wallet address to which they want to take the asset in, there will be multiple people involved which will sign a single transaction for transferring the X amount the user wants to withdraw and until all the people involved in the multi-sig has signed the transaction the user would not get there asset back. So, this reduces the very obvious loop hole of storing the private key of the fat wallet with so much money in a single place, there can be different types of multi-sigs like 3/5 or 10/20 i.e if at least 3 out of 5 (total no. of people in the multi-sig) signs the transaction the transaction will actually go through we would not need all the 5 people to sign the transaction. But this approach is also not the best one to use when dealing with so much volume like an exchange like Coinbase would do.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GTeG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GTeG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png 424w, https://substackcdn.com/image/fetch/$s_!GTeG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png 848w, https://substackcdn.com/image/fetch/$s_!GTeG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png 1272w, https://substackcdn.com/image/fetch/$s_!GTeG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GTeG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png" width="1174" height="916" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:916,&quot;width&quot;:1174,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:139410,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://sakshamchaudhary.substack.com/i/198666803?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GTeG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png 424w, https://substackcdn.com/image/fetch/$s_!GTeG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png 848w, https://substackcdn.com/image/fetch/$s_!GTeG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png 1272w, https://substackcdn.com/image/fetch/$s_!GTeG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e49ae2e-c7e8-466d-805d-9bda703101ce_1174x916.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Shamir Secret Sharing</h3><p>This approach is a similar one but a little non human involving. In this scenario, we have a private key and use an algorithm known as shamir secret, which divides the private key into multiple parts which does not resonate with each other. So, the algorithm does not work by straight up dividing the 32 bytes into 3 equal parts rather it uses some algorithms which make up the number of parts which are completely random to the human eye, but when combined together can you get back the same string that was divided back. Just like the multi-sigs there are also 3/5 or 10/20 etc. shamir secrets meaning you can also derive the result using only 3 of the 5 total parts.So, the way the platform would use this is, they will on the user signup crete this private key and after applying the algorithm store these parts in different servers across the world, and then whenever there needs to be a transaction we fetch all the parts and combine them to generate the private key again and proceed with the transaction. Now the main problem we were trying to solve remains the same, there is still a point where the private is accessible to any engineer in that company and they are get that out and drain all the money without getting identified, so in this case as well there is an assumption that the developer will not do something like this. </p><p>Here is a implementation of this algorithm. <a href="https://github.com/privy-io/shamir-secret-sharing">Shamir Secret</a></p><h3>MPC (Multi Party computation)</h3><p>This is the final and most efficient approach that will actually solve the problem we mentioned at the starting. In here there are again multiple servers involved, but unlike the Shamir Secret Sharing approach the private key is never reconstructed at any point of time. Instead, each server only has a share of the private key and all the servers together collaboratively sign the transaction without ever revealing or combining the actual private key into a single place.</p><p>So, let&#8217;s suppose there are 5 servers involved in this MPC setup. Whenever a withdrawal request comes in, each server independently performs a small cryptographic computation on its own share of the key and sends the result to the other participating servers. These computations are then combined mathematically to generate a valid signature for the transaction. The important thing here is that no single server ever knows the full private key and even during the signing process the actual key never exists in one complete form anywhere in the system.</p><p>This completely removes the single point of failure problem that we discussed earlier. Even if one server gets compromised, hacked or an engineer somehow gains access to it, they still cannot move funds because they only have a meaningless fragment of the key. To actually steal funds, an attacker would need to compromise multiple independent servers at the same time which becomes significantly harder in practice.</p><p>This is why most modern large scale crypto platforms and institutional custody providers are moving towards MPC based wallet infrastructure. It gives the security benefits of decentralisation while still allowing platforms to provide a smooth user experience without forcing users to manually manage seed phrases or private keys themselves.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sakshamchaudhary.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The React Hook Everyone Forgets]]></title><description><![CDATA[In case you have a job in this era of AI (which is a little hard), and your company is using react for the Frontend.]]></description><link>https://sakshamchaudhary.substack.com/p/the-react-hook-everyone-forgets</link><guid isPermaLink="false">https://sakshamchaudhary.substack.com/p/the-react-hook-everyone-forgets</guid><dc:creator><![CDATA[Saksham Chaudhary]]></dc:creator><pubDate>Thu, 12 Mar 2026 07:43:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!J2Dh!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8f90415-d443-4e2d-818d-1cb436b6a0fb_735x735.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In case you have a job in this era of AI (which is a little hard), and your company is using react for the Frontend. Although you must be vibe coding your way through it, but i guess this is the best time to learn actual things in case you haven&#8217;t till now. I will be writing these blogs going through small things like these in deep so that I am not afraid of writing code with my hands in an interview. </p><p>Today we are going to talk about useRef hook, the almost most commonly used hook but still not a lot of people are clear about it&#8217;s actual use case. Well one of the reason for that is we are almost vibe coding our way through everything so who cares. Okay, it&#8217;s time to get technical now. We are going to build a video player while to go through the actual real world use case of this hook. Imagine you are given this task in an interview of a 100k job and this is the last round, so if you pass you get the job. It&#8217;s a do or die situation for you, so we gotta pass this no matter what. Let&#8217;s go.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sakshamchaudhary.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>To start we would need to initialize a react app for this, I am going to start with the extreme basics, so let&#8217;s run this command and start.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;1ed299f3-5ce8-44ff-adfa-e47e7622b9a6&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">npm create vite@latest</code></pre></div><p>It would ask you a few choices, so just go through them and start a react + typescript app. Okay, so to start we need to add a video tag and render that.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;javascript&quot;,&quot;nodeId&quot;:&quot;e9b8c966-ede6-4b97-881a-91e137bcec5f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-javascript">import React, { useState } from 'react'
import './App.css'

function App() {
  // This will be in the future used to update the state of the video element from anywhere 
  // -without triggering a re-render
  const videoRef = React.useRef(null)

  return (
    &lt;div&gt;
      &lt;video ref={videoRef} width="400"
        src="https://www.w3schools.com/html/mov_bbb.mp4"
        style={{ display: "block", marginBottom: 12 }}
      /&gt;
    &lt;/div&gt;
  )
}

export default App</code></pre></div><p>Now, if you run this and go to the 5173 port on your browser, you will see a video playing. So a very basic next task in a video player is a play/pause button. Now if you are aware about the useState hook and someone asks you to build this play/pause button the first thought in your mind will be using this hook. But the problem with useState is that it re-renders the application whenever the value stored in it changes and the other problem is you cannot store any DOM element in it. useState only supports storing data and unfortunately a DOM element is not actually data. So, we need something else to store the DOM element of this video tag, so that whenever someone clicks on a button we are able to change the state of this video tag.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;javascript&quot;,&quot;nodeId&quot;:&quot;1a87f1c9-7911-4a9d-b7a5-ccd4af744c7f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-javascript">import React, { useState } from 'react'
import './App.css'

function App() {
  const [isPlaying,setIsplaying] = useState(false);
  
  const videoRef = React.useRef(null)
  
  const togglePlay = () =&gt; {
    if(isPlaying) {
      videoRef.current.pause()
    } else {
      videoRef.current.play()
    }
    setIsplaying(!isPlaying);
  }

  return (
    &lt;div&gt;
      &lt;video ref={videoRef} width="400"
        src="https://www.w3schools.com/html/mov_bbb.mp4"
        style={{ display: "block", marginBottom: 12 }}
      /&gt;

      &lt;button onClick={togglePlay}&gt;
        {isPlaying ? "PAUSE" : "PLAY"}
      &lt;/button&gt;
    &lt;/div&gt;
  )
}

export default App</code></pre></div><p>If you have a look at the code we added, it is just a button which is triggering a function and in that function we first check what is the current state of the video i.e if it is playing or it is stopped and then accordingly update the state to the opposite value, now this is where the <code>videoRef </code>is useful to us. Because one of them most useful thing about this useRef is that it does not trigger re-renders no matter how much the value of it is changed, and also just in case there is a re-render that state of the useRef stays the same across the re-renders.</p><p>Now, let&#8217;s implement another feature in our video player, a mute/unmute button. Now, for this we essentially do not require a useRef but things get tricky when the user have a volume slider as well in this button (which is a required feature). So, suppose the user mutes the video and at that moment the volume was 0.5, but when the user unmute the volume should be able to get back to the same amount. So, we need a way to remember what was the last volume at which the user muted so that we can set the volume to that same amount i.e we need a way to store a value and it should not change across re-renders until the value is explicitly changed. This is where again the useRef is used.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;javascript&quot;,&quot;nodeId&quot;:&quot;8f82f6cb-dc5f-452d-920e-e4735345db05&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-javascript">import React, { useState } from 'react'
import './App.css'

function App() {
  const [isPlaying,setIsplaying] = useState(false);
  const [isMuted,setIsmuted] = useState(false)
  const [volume, setVolume] = useState(1);

  const videoRef = React.useRef(null)
  const lasVolRef =  React.useRef(volume)

  const togglePlay = () =&gt; {
    if(isPlaying) {
      videoRef.current.pause()
    } else {
      videoRef.current.play()
    }
    setIsplaying(!isPlaying);
  }
  
  const toggleMute = () =&gt;{
    if(isMuted) {
      videoRef.current.muted = false;
      setVolume(lasVolRef.current)
    } else { 
      videoRef.current.muted = true;
      setVolume(0)
    }

    setIsmuted(!isMuted)
  }


  const handleVolumeChange = (e) =&gt; {
    videoRef.current.volume = e.target.value
    setVolume(e.target.value)
    lasVolRef.current = volume
  } 

  return (
    &lt;div&gt;
      &lt;video ref={videoRef} width="400"
        src="https://www.w3schools.com/html/mov_bbb.mp4"
        style={{ display: "block", marginBottom: 12 }}
      /&gt;
       
      &lt;input
        type="range" min={0} max={1} step={0.05}
        value={volume}
        onChange={handleVolumeChange}
      /&gt;

      &lt;button onClick={toggleMute}&gt;
        {isMuted ? "MUTED" : "LISTEN"}
      &lt;/button&gt;

      &lt;button onClick={togglePlay}&gt;
        {isPlaying ? "PAUSE" : "PLAY"}
      &lt;/button&gt;
    &lt;/div&gt;
  )
}

export default App</code></pre></div><p>Again, as you can see we used two useState to store the current state because we need to show that on the frontend so, these should update the values.</p><p>So, this is how useRef is useful in maintaining a state across re-renders. Some other usecases of this would be when you want highlight the search bar when someone opens a modal, for this usecase as well you would need to store the DOM element of this input tag as well (the search bar).</p><p>Here is a link to the completed component: <a href="https://gist.github.com/Saksham1387/1f13ad00a722c699f442109dece015b7">Github</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.com/@sakshamchaudhary/note/p-190665486&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://substack.com/@sakshamchaudhary/note/p-190665486"><span>Leave a comment</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://sakshamchaudhary.substack.com/p/the-react-hook-everyone-forgets?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://sakshamchaudhary.substack.com/p/the-react-hook-everyone-forgets?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sakshamchaudhary.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>