<?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: Mrityunjaya Prajapati</title>
    <description>The latest articles on DEV Community by Mrityunjaya Prajapati (@deadwin19).</description>
    <link>https://dev.to/deadwin19</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%2F487526%2Fae6c60c2-6ae6-439f-892e-74d1e81b6e16.jpg</url>
      <title>DEV Community: Mrityunjaya Prajapati</title>
      <link>https://dev.to/deadwin19</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deadwin19"/>
    <language>en</language>
    <item>
      <title>How Enterprise Wallet Infrastructure Actually Works: MPC, Custody Models, and Why MetaMask Was Never the Answer</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Sat, 28 Mar 2026 14:42:06 +0000</pubDate>
      <link>https://dev.to/deadwin19/how-enterprise-wallet-infrastructure-actually-works-mpc-custody-models-and-why-metamask-was-52a</link>
      <guid>https://dev.to/deadwin19/how-enterprise-wallet-infrastructure-actually-works-mpc-custody-models-and-why-metamask-was-52a</guid>
      <description>&lt;p&gt;A technical deep-dive into what it actually takes to build wallet infrastructure for banks, fintechs, and financial institutions — from key management to compliance to multi-chain architecture.&lt;/p&gt;

&lt;p&gt;Every week I talk to developers building on-chain financial products. And almost without fail, the conversation hits the same wall: key management.&lt;/p&gt;

&lt;p&gt;Not smart contracts. Not tokenomics. Not gas optimisation. &lt;strong&gt;Key management.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because the moment you try to build a wallet product that works for a bank, a fintech, or any financial institution serving real users — you discover that the entire existing ecosystem was designed for a completely different problem. MetaMask was built for a developer who wants to interact with DeFi protocols. It was never built for a fintech serving 10 million users in Maharashtra who should never see the word "blockchain."&lt;/p&gt;

&lt;p&gt;This article is a technical breakdown of what enterprise wallet infrastructure actually requires: the custody models, the MPC architecture, the compliance layer, and the multi-chain problem. By the end, you should be able to make an informed decision about which approach fits what you're building — and understand why most existing WaaS tools fall short.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br&gt;
Basic familiarity with blockchain concepts (private keys, transaction signing, smart contracts). This article goes deep on architecture — if you want the non-technical business case, the link to the newsletter edition is in the footer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why the Old Wallet Model Was Always Wrong for Enterprise
&lt;/h2&gt;

&lt;p&gt;The crypto wallet model from 2017–2023 had one fundamental design assumption: the user is also the operator. The person using the wallet is the same person who understands seed phrases, manages private keys, and accepts full responsibility for key security.&lt;/p&gt;

&lt;p&gt;That assumption breaks immediately in any enterprise context.&lt;/p&gt;

&lt;p&gt;A bank cannot tell its customers "here is a 24-word seed phrase, please store it safely." A fintech cannot build a product where one customer support call results in someone accidentally approving a transaction with no recourse. A corporate treasury cannot have a single employee hold the private key to $50M in on-chain assets.&lt;/p&gt;

&lt;p&gt;The enterprise wallet problem has fundamentally different requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wallet creation at scale — millions of wallets, sub-second, no user interaction with keys&lt;/li&gt;
&lt;li&gt;Compliance baked in — KYC, sanctions screening, spending limits, audit trails&lt;/li&gt;
&lt;li&gt;Operational roles — treasury, compliance, support all have different access levels&lt;/li&gt;
&lt;li&gt;Disaster recovery — if a key shard is lost, funds must be recoverable&lt;/li&gt;
&lt;li&gt;Multi-chain — one user, multiple chains, one unified interface&lt;/li&gt;
&lt;li&gt;Regulatory audit — every transaction signed must be attributable and logged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these were considerations in MetaMask's design. And that's fine — it wasn't built for this. But it means the enterprise wallet is a completely different engineering problem from the consumer wallet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Custody Models — Trade-offs You Need to Understand
&lt;/h2&gt;

&lt;p&gt;Before picking an architecture, you need to choose a custody model. This decision flows downstream into every other design choice you make.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F666imct3s8l08vkei2os.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F666imct3s8l08vkei2os.png" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custodial: Simple to build, dangerous at scale&lt;/strong&gt;&lt;br&gt;
In a custodial model, your company holds the private keys. The user has a database record — an account ID — and you sign transactions on their behalf. This is how early crypto exchanges worked. It's also how traditional fintech apps work (you don't hold your money in a Paytm vault; Paytm does).&lt;/p&gt;

&lt;p&gt;Why it's tempting: Easy to build. Fast wallet creation. Full control over compliance enforcement. No key management complexity for users.&lt;/p&gt;

&lt;p&gt;Why it breaks at enterprise scale: Your HSM or key vault becomes the single most critical system you own. A breach means every user's funds are at risk simultaneously. Regulators in most jurisdictions are also increasingly hostile to custodial crypto models — you're essentially running a bank without a banking license.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-custody: Correct philosophy, wrong UX&lt;/strong&gt;&lt;br&gt;
Self-custody (MetaMask, hardware wallets, seed phrases) is philosophically correct — the user controls their own keys, nobody can freeze their funds, and there's no counterparty risk. But it fails for mass-market financial products for one simple reason: users lose their keys.&lt;/p&gt;

&lt;p&gt;The support ticket "I lost my seed phrase" has no resolution in a pure self-custody model. That's fine for a crypto-native developer. It's a catastrophic product flaw for a fintech serving 10 million retail users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MPC: The enterprise standard&lt;/strong&gt;&lt;br&gt;
Multi-Party Computation (MPC) wallets split the private key into cryptographic shards — pieces of the key that are mathematically useless on their own but can produce a valid signature when a threshold number of shards cooperate. A common configuration is 2-of-3: any two of three key shards can produce a valid signature without the third shard ever being exposed.&lt;/p&gt;

&lt;p&gt;This is now the dominant model for enterprise wallet infrastructure and for good reason — it eliminates single points of failure while giving the operator enough control to enforce compliance.&lt;/p&gt;
&lt;h2&gt;
  
  
  How MPC Signing Actually Works
&lt;/h2&gt;

&lt;p&gt;Understanding the mechanics of MPC is important because it determines your architecture decisions downstream. Here's the signing flow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbuzg3agcwv2u0e2iqqk5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbuzg3agcwv2u0e2iqqk5.png" alt=" " width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key insight: &lt;strong&gt;the private key is never reconstructed in full at any point&lt;/strong&gt;. MPC protocols (like GG20, DKLS, or CGGMP) use cryptographic techniques where each shard holder performs a computation on their shard, and the results are combined to produce a valid signature — without any party ever seeing a complete private key.&lt;/p&gt;

&lt;p&gt;This is fundamentally different from a Shamir's Secret Sharing approach where shards are combined to reconstruct a key before signing. MPC signs without reconstruction, which means there is no moment of vulnerability.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Simplified MPC wallet creation — what the API looks like&lt;/span&gt;
&lt;span class="c1"&gt;// The complexity of shard generation happens in the MPC library&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mpcClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createWallet&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user_9f2a3b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;signers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;shards&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;holder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;company-hsm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HSM_ENDPOINT&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;holder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cloud-kms&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;KMS_ENDPOINT&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;holder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user-device&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;deviceKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userPublicKey&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;chains&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ethereum&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;polygon&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;solana&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;compliance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;jurisdiction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;IN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;kycLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;full&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;spendingLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;daily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;INR&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// wallet.address is now live on all specified chains&lt;/span&gt;
&lt;span class="c1"&gt;// No seed phrase. No user key management. Sub-second creation.&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addresses&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// { ethereum: '0x...', polygon: '0x...', solana: 'So...' }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Compliance Layer — Why It Must Be in the Wallet, Not Above It
&lt;/h2&gt;

&lt;p&gt;This is the architectural mistake I see most often. Teams build a wallet infrastructure layer and then bolt compliance on top — as a middleware that checks rules before passing transactions to the wallet service.&lt;/p&gt;

&lt;p&gt;That's backwards. &lt;strong&gt;Compliance must be enforced at the wallet level&lt;/strong&gt;, not above it. Here's why:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The bypass problem&lt;/strong&gt;&lt;br&gt;
If compliance is enforced in an API layer above the wallet, any internal team member or compromised service with direct wallet access can bypass it. When a regulator asks you to demonstrate your compliance controls, "we check before calling the wallet API" is not an acceptable architecture.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Enterprise wallet infrastructure needs compliance baked into the signing process itself. A transaction that violates a spending limit should fail at the wallet layer — not be rejected by middleware, not return a 403 from an API, but genuinely fail to produce a valid signature.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Compliance rules enforced at wallet signing time — not in API middleware&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ComplianceAwareWallet&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;walletId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;// 1. Sanctions screening — check before signing&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sanctionsResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sanctions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;OFAC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;UN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EU&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sanctionsResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hit&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SanctionsViolationError&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// 2. Spending limit check against daily/monthly rolling window&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;spent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ledger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDailySpend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;walletId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;spent&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;daily&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SpendingLimitError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Daily limit: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;limits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;daily&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 3. Role check — does this signer have authority for this txn size?&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rbac&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getRole&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initiator&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maxSingleTxn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AuthorizationError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Requires dual approval&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// 4. Only now proceed to MPC signing&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// 5. Immutable audit log — written atomically with the signature&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auditLog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;record&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;txnHash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;walletId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;initiator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initiator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
      &lt;span class="na"&gt;complianceChecks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sanctions&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;spending-limit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rbac&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;jurisdiction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;jurisdiction&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Enterprise Wallet Stack — Full Architecture
&lt;/h2&gt;

&lt;p&gt;Putting all the pieces together, a production enterprise wallet infrastructure looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4eamwyvy43jsc6uapwe0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4eamwyvy43jsc6uapwe0.png" alt=" " width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Multi-Chain Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;One of the most underappreciated engineering challenges in enterprise wallet infrastructure is multi-chain support. It sounds simple — just support multiple blockchains. In practice, it's a deep architectural problem.&lt;/p&gt;

&lt;p&gt;Different chains have different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Account models (EVM uses accounts, Solana uses programs, UTXO chains use inputs/outputs)&lt;/li&gt;
&lt;li&gt;Transaction formats (different serialisation, gas models, fee structures)&lt;/li&gt;
&lt;li&gt;Nonce management approaches (EVM nonces are sequential and must be managed carefully at high throughput)&lt;/li&gt;
&lt;li&gt;Signature schemes (ECDSA secp256k1 on Ethereum, Ed25519 on Solana — your MPC library must support both)&lt;/li&gt;
&lt;li&gt;Finality assumptions (probabilistic on PoW, deterministic on PoS — matters for enterprise settlement)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The correct architecture is a chain adapter pattern — a common interface that your wallet service calls, with chain-specific adapters implementing the interface for each supported network.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Chain adapter interface — implemented per chain&lt;/span&gt;
&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ChainAdapter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;buildTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TxnParams&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;UnsignedTxn&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;estimateFee&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;txn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;UnsignedTxn&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;FeeEstimate&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;broadcast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signedTxn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SignedTxn&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TxnHash&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;getBalance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Balance&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;waitForFinality&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TxnHash&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Receipt&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Ethereum adapter — handles EVM nonce management, gas estimation&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EthereumAdapter&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;ChainAdapter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;buildTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nonce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nonceManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAndIncrement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gasPrice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getGasPrice&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gasPrice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;chainId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Solana adapter — completely different model, Ed25519 signatures&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SolanaAdapter&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;ChainAdapter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;buildTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockhash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getLatestBlockhash&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="c1"&gt;// No nonces — Solana uses recent blockhash for replay protection&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Transaction&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;recentBlockhash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;blockhash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blockhash&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Custody Model Comparison — Making the Right Choice
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefoo0esqlq6ipr8uesci.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fefoo0esqlq6ipr8uesci.png" alt=" " width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What MetaMask Was Actually Designed For
&lt;/h2&gt;

&lt;p&gt;None of this is a criticism of MetaMask. It was designed for a specific and legitimate use case: giving a developer or crypto-native user a browser-based interface to sign transactions and interact with DeFi protocols.&lt;/p&gt;

&lt;p&gt;For that use case, it is excellent. The problem is that the industry — particularly in the 2020–2023 period — treated it as a template for all wallet products. "Users need a wallet, MetaMask is a wallet, therefore build like MetaMask."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The wallet is not the product. Finance is the product. The wallet is how finance happens on-chain — and for most financial products, it needs to be completely invisible to the end user.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The fintech user in Maharashtra should tap "send" and the money moves. They should not know what a private key is. They should not manage a seed phrase. They should have the same expectation of reliability, support, and recourse that they have with UPI.&lt;/p&gt;

&lt;p&gt;Building that experience requires enterprise wallet infrastructure — not a consumer crypto wallet bolted onto a fintech app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools and Libraries Worth Evaluating
&lt;/h2&gt;

&lt;p&gt;If you're building enterprise wallet infrastructure today, here are the main options in each category:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;MPC libraries&lt;/strong&gt;&lt;br&gt;
GG20 (Zengo's implementation), DKLS (Coinbase's threshold ECDSA), Fireblocks MPC-CMP, and ZenGo-X (open source). For production, evaluate whether you want to run your own MPC nodes or use a managed service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WaaS providers to evaluate&lt;/strong&gt;&lt;br&gt;
Tresori, Privy, Dynamic, Turnkey, Capsule, and Web3Auth all offer different trade-offs between control and convenience. Fireblocks and TreSori are more enterprise-grade with higher ACV. Evaluate based on your compliance requirements and whether you need on-premise key shards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compliance tooling&lt;/strong&gt;&lt;br&gt;
Chainalysis and Elliptic for transaction monitoring and sanctions screening. Persona and Sardine for KYC at wallet creation. TRM Labs for blockchain risk scoring. Most WaaS providers have integrations with at least one of these.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Scaling Challenges to Design For
&lt;/h2&gt;

&lt;p&gt;Before I close, here are the scaling problems that will hit you in production that most architecture articles don't mention:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nonce management at high throughput&lt;/strong&gt;. On EVM chains, nonces must be sequential and non-repeating. If you're creating thousands of transactions per second from a hot wallet, nonce management becomes a critical bottleneck. You need a distributed nonce manager with optimistic locking — not a simple database increment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MPC latency under load&lt;/strong&gt;. MPC signing involves multiple network round-trips between shard holders. Under high load, this latency compounds. Design your signing service to handle this asynchronously with a transaction queue — don't make users wait synchronously for MPC completion on non-urgent transactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key rotation without downtime&lt;/strong&gt;. MPC keys need periodic rotation for security. Your architecture must support key rotation without interrupting wallet functionality — this requires careful state management across all shard holders simultaneously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chain re-org handling&lt;/strong&gt;. When a blockchain re-organises (common on PoW chains, possible but rare on PoS), transactions you thought were confirmed can be reversed. Your finality layer must handle this gracefully — especially critical for payment settlement where you've already credited a user's account.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The operational reality&lt;/strong&gt;&lt;br&gt;
Enterprise wallet infrastructure is not a weekend project. A production-grade system with MPC, compliance, multi-chain support, and the scaling characteristics described above takes a well-resourced team 6–12 months to build properly. Evaluate WaaS providers seriously before deciding to build — the build vs buy decision here is not as obvious as it might seem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The shift from consumer crypto wallets to enterprise wallet infrastructure is not an incremental improvement — it's a ground-up rethink of what a wallet is and who it serves. The engineering challenges are real, the compliance requirements are non-negotiable, and the UX bar is set by UPI, not by MetaMask.&lt;/p&gt;

&lt;p&gt;If you found this useful, the next article in this series goes deep on the compliance architecture — specifically how to design jurisdiction-aware transaction rules that scale across markets without becoming a compliance nightmare to maintain.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
      <category>architecture</category>
      <category>security</category>
    </item>
    <item>
      <title>KS Wallet as the Backbone of Cross-Chain Bridges and Interoperability</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Sun, 24 Aug 2025 15:41:53 +0000</pubDate>
      <link>https://dev.to/kalpstudio/ks-wallet-as-the-backbone-of-cross-chain-bridges-and-interoperability-5ahk</link>
      <guid>https://dev.to/kalpstudio/ks-wallet-as-the-backbone-of-cross-chain-bridges-and-interoperability-5ahk</guid>
      <description>&lt;p&gt;In the rapidly expanding Web3 ecosystem, interoperability is no longer a “nice-to-have” but a &lt;strong&gt;critical infrastructure requirement&lt;/strong&gt;. Users want to seamlessly move assets, tokens, and data across multiple blockchains without friction. At the center of this challenge lies the &lt;strong&gt;wallet infrastructure&lt;/strong&gt; — and this is where &lt;strong&gt;KS Wallet&lt;/strong&gt; emerges as the backbone for &lt;strong&gt;cross-chain bridges and interoperability&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Wallet Infrastructure Matters for Interoperability
&lt;/h2&gt;

&lt;p&gt;Most cross-chain solutions today face challenges like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complex UX&lt;/strong&gt; – Multiple wallets for different chains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Risks&lt;/strong&gt; – Bridges are common targets for exploits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High Gas Costs&lt;/strong&gt; – Users bear complex, chain-specific fees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limited Monitoring&lt;/strong&gt; – Lack of unified transaction analytics.&lt;/p&gt;

&lt;p&gt;KS Wallet provides a multi-chain, modular wallet infrastructure that solves these challenges with self-custody, custodial, and MPC (Multi-Party Computation) models.&lt;/p&gt;

&lt;h2&gt;
  
  
  KS Wallet Architecture for Cross-Chain Bridges
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Core Components:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzq1jypdxcostuzq7qud4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzq1jypdxcostuzq7qud4.png" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Wallet Creation Layer:&lt;/em&gt;&lt;/strong&gt; Generate wallets across multiple chains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Transaction Relay Layer:&lt;/em&gt;&lt;/strong&gt; Abstracts gas &amp;amp; routes cross-chain transactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Bridge Connectors:&lt;/em&gt;&lt;/strong&gt; Securely interact with bridge protocols.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Monitoring &amp;amp; Analytics Layer:&lt;/em&gt;&lt;/strong&gt; Unified visibility across chains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Security Layer:&lt;/em&gt;&lt;/strong&gt; MPC + Policy controls for enterprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flow: Cross-Chain Transaction via KS Wallet
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;User signs transaction in KS Wallet (self-custody / custodial / MPC).&lt;/li&gt;
&lt;li&gt;Transaction relay service handles gas abstraction (gasless option).&lt;/li&gt;
&lt;li&gt;Bridge connector locks/mints assets on Chain A → issues wrapped asset on Chain B.&lt;/li&gt;
&lt;li&gt;Monitoring engine logs and verifies transaction on both chains.&lt;/li&gt;
&lt;li&gt;Analytics layer provides insights (fees, confirmation, settlement status).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Security Advantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MPC-based Wallets – Eliminate single point of failure.&lt;/li&gt;
&lt;li&gt;Policy-Based Controls – Enterprise-grade approval workflows.&lt;/li&gt;
&lt;li&gt;On-Chain Transparency – Every bridge transaction traceable.&lt;/li&gt;
&lt;li&gt;AI-driven Anomaly Detection – Early alerts on suspicious activity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use Cases of KS Wallet in Cross-Chain Interoperability
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bridging Stablecoins (USDC, USDT) across chains&lt;/li&gt;
&lt;li&gt;DeFi Liquidity Transfers – Seamless movement of LP tokens between ecosystems&lt;/li&gt;
&lt;li&gt;NFT Portability – Move game/NFT assets across L1s &amp;amp; L2s&lt;/li&gt;
&lt;li&gt;Supply Chain Tokens – Multi-chain tracking of tokenized goods&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example: Multi-Chain Bridge with KS Wallet
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Imagine a USDC Bridge:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User deposits USDC on Ethereum.&lt;/li&gt;
&lt;li&gt;KS Wallet triggers bridge protocol via connectors.&lt;/li&gt;
&lt;li&gt;Wrapped USDC minted on Polygon.&lt;/li&gt;
&lt;li&gt;Entire flow recorded in KS Wallet analytics dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cross-chain bridges&lt;/strong&gt; are essential, but without a robust wallet infrastructure, interoperability remains fragile. KS Wallet provides the secure, scalable, and developer-friendly backbone to enable seamless multi-chain transfers with gasless transactions, analytics, and enterprise-grade security.&lt;/p&gt;

&lt;p&gt;By abstracting complexity and ensuring transparency, KS Wallet is not just a wallet — it’s the &lt;strong&gt;foundation of Web3 interoperability&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>ai</category>
    </item>
    <item>
      <title>How To Install Docker on Ubuntu 20.04</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Mon, 20 Jun 2022 15:44:24 +0000</pubDate>
      <link>https://dev.to/deadwin19/how-to-install-docker-on-ubuntu-2004-3a3c</link>
      <guid>https://dev.to/deadwin19/how-to-install-docker-on-ubuntu-2004-3a3c</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt;&lt;/strong&gt; is an application that simplifies the process of managing application processes in containers. Containers run your applications in resource-isolated processes. Containers are similar to virtual machines, but they are more portable, resource-friendly, and dependent on the host operating system.&lt;/p&gt;

&lt;p&gt;In this tutorial, we will install Docker on &lt;strong&gt;Ubuntu 20.04&lt;/strong&gt; and use basic commands to get you started.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Ubuntu 20.04 Installed on 64-bit operating system&lt;/li&gt;
&lt;li&gt;A user account with sudo privileges&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installing Docker from Official Repository
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Updating the Software Repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Downloading Dependencies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get install apt-transport-https ca-certificates curl software-properties-common&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Adding Docker’s GPG Key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Installing the Docker Repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs)  stable"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Installing the Latest Docker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get install docker-ce&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Verifying Docker Installation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cYrGJeKG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ks2x0n6a0d8nblc4cxwm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cYrGJeKG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ks2x0n6a0d8nblc4cxwm.png" alt="Docker Version" width="492" height="60"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Enable Docker Service&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To start the Docker service run the following commands:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl start docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Enable Docker to run at startup with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl enable docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To check the status of the service, use the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl status docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QRmr02I---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0g5hc5l1hfwf81c0ibgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QRmr02I---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0g5hc5l1hfwf81c0ibgg.png" alt="Docker Running Status" width="642" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If this tutorial helps you, please hit the Clap button or comment if you have any suggestion or feedback.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>linux</category>
      <category>ubuntu</category>
      <category>docker</category>
    </item>
    <item>
      <title>How To Install Hyperledger Fabric v2.4 on Ubuntu 20.04</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Sun, 19 Jun 2022 18:11:51 +0000</pubDate>
      <link>https://dev.to/deadwin19/how-to-install-hyperledger-fabric-v24-on-ubuntu-2004-236f</link>
      <guid>https://dev.to/deadwin19/how-to-install-hyperledger-fabric-v24-on-ubuntu-2004-236f</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hyperledger Fabric&lt;/strong&gt; is one of the leading enterprise grade blockchain platforms. In this article we will cover Prerequisites and Hyperledger Fabric v2.4 installation on Linux Ubuntu 20.04 LTS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Install curl, git
&lt;/h2&gt;

&lt;p&gt;Install the latest version of &lt;a href="https://git-scm.com/downloads" rel="noopener noreferrer"&gt;git &lt;/a&gt;and &lt;a href="https://curl.se/download.html" rel="noopener noreferrer"&gt;curl &lt;/a&gt;if it is not already installed.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt update&lt;br&gt;
sudo apt-get install git&lt;br&gt;
sudo apt-get install curl&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Install Docker
&lt;/h2&gt;

&lt;p&gt;Install the latest version of Docker if it is not already installed.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt-get -y install docker-compose&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once installed, confirm that the latest versions of both Docker and Docker Compose executables were installed.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker --version&lt;br&gt;
Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker-compose --version&lt;br&gt;
docker-compose version 1.25.0, build&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Make sure the Docker daemon is running.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl start docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Optional: If you want the Docker daemon to start when the system starts, use the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo systemctl enable docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add your user to the Docker group.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo usermod -a -G docker &amp;lt;username&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Install Golang
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;curl -O https://dl.google.com/go/go1.18.3.linux-amd64.tar.gz&lt;br&gt;
tar xvf go1.18.3.linux-amd64.tar.gz&lt;br&gt;
export GOPATH=$HOME/go&lt;br&gt;
export PATH=$PATH:$GOPATH/bin&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, you have to open and edit you **bashrc **file. In most cases, the bashrc is a hidden file that lives in your home directory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;nano  ~/.bashrc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add following two lines, at the end of the file:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export GOPATH=$HOME/go&lt;br&gt;
export PATH=$PATH:$GOPATH/bin&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create new directory where you will install Hyperledger Fabric&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mkdir fabric-network&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Install Hyperledger Fabric
&lt;/h2&gt;

&lt;p&gt;To download a specific release, pass a version identifier for Fabric and Fabric CA Docker images. The command below demonstrates how to download the latest production releases - Fabric v2.4.4 and Fabric CA v1.5.3&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -sSL https://bit.ly/2ysbOFE | bash -s -- &amp;lt;fabric_version&amp;gt; &amp;lt;fabric-ca_version&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.4.4 1.5.3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Download the latest release of Fabric samples, docker images, and binaries.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -sSL https://bit.ly/2ysbOFE | bash -s&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Congrats, you have installed Hyperledger Fabric with all dependencies. &lt;/p&gt;

&lt;p&gt;To test the our installation, we will run test network that comes with fabric-samples&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd fabric-samples/test-network&lt;br&gt;
./network.sh up createChannel -ca -c mychannel -s couchdb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The above command will create a channel(mychannel) with certificate Authorities and bring up couch-db as state database.&lt;/p&gt;

&lt;p&gt;Using following Docker command we can check all running containers&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker ps -a&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You should be able to see the containers up and running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnosb16y7vvhrknwuc23e.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnosb16y7vvhrknwuc23e.png" alt="Hyperledger Fabric Test Network Containers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations, you have installed and setup Hyperledger Fabric. &lt;/p&gt;

&lt;p&gt;If this tutorial helps you, please hit the Clap button or comment if you have any suggestion or feedback.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>web3</category>
      <category>hyperledger</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>How to set or get default timezone in PHP</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Tue, 14 Jun 2022 18:46:05 +0000</pubDate>
      <link>https://dev.to/deadwin19/how-to-set-or-get-default-timezone-in-php-331b</link>
      <guid>https://dev.to/deadwin19/how-to-set-or-get-default-timezone-in-php-331b</guid>
      <description>&lt;p&gt;In this tutorial, we will explain how to set or get a default timezone in PHP. This will help you to change the default timezone for all date and time in PHP&lt;/p&gt;

&lt;p&gt;Using php built-in function &lt;strong&gt;date_default_timezone_set()&lt;/strong&gt; and &lt;strong&gt;date_default_timezone_get()&lt;/strong&gt; we can set and get default timezone respectively.&lt;/p&gt;

&lt;p&gt;You can check detail article at: &lt;a href="https://tagstack.org/article/how-to-set-or-get-default-timezone-in-php"&gt;https://tagstack.org/article/how-to-set-or-get-default-timezone-in-php&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>programming</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Are you working on any Side Project?</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Tue, 14 Jun 2022 17:59:33 +0000</pubDate>
      <link>https://dev.to/deadwin19/are-you-working-on-any-side-project-4kj3</link>
      <guid>https://dev.to/deadwin19/are-you-working-on-any-side-project-4kj3</guid>
      <description>&lt;p&gt;I think Side Project is not just to start your Startup, it might be for your new learning.&lt;/p&gt;

&lt;p&gt;If you want to learn any new technology, my suggestion is that develop a mini project or MVP product. This product you can host in your Github or launch as a Startup.&lt;/p&gt;

&lt;p&gt;If you guys have any other thoughts, please share!!&lt;/p&gt;

</description>
      <category>sideprojects</category>
      <category>webdev</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How to Install Golang on WSL/WSL2</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Mon, 13 Jun 2022 18:30:16 +0000</pubDate>
      <link>https://dev.to/deadwin19/how-to-install-golang-on-wslwsl2-2880</link>
      <guid>https://dev.to/deadwin19/how-to-install-golang-on-wslwsl2-2880</guid>
      <description>&lt;p&gt;One of the best feature that Windows 10 or 11 Pro support is &lt;a href="https://www.omgubuntu.co.uk/how-to-install-wsl2-on-windows-10"&gt;WSL&lt;/a&gt; or &lt;a href="https://docs.microsoft.com/en-us/windows/wsl/install"&gt;WSL2&lt;/a&gt;, using this you can run any Linux OS like a windows application.&lt;/p&gt;

&lt;p&gt;If you want to install GoLang on WSL/WSL2 and setup your development environment, please follow these steps&lt;/p&gt;

&lt;h2&gt;
  
  
  Check Latest Go Version
&lt;/h2&gt;

&lt;p&gt;You can check latest Go Version for any OS like: Linux, macOS or Windows at &lt;a href="https://go.dev/dl/"&gt;https://go.dev/dl/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Go
&lt;/h2&gt;

&lt;p&gt;At the time of writing this blog, the most recent LTS version of Go is 1.18.3.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wget https://dl.google.com/go/go1.18.3.linux-amd64.tar.gz &lt;br&gt;
sudo tar -xvf go1.18.3.linux-amd64.tar.gz&lt;br&gt;
sudo mv go /usr/local&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Edit .bashrc file
&lt;/h2&gt;

&lt;p&gt;You have to edit .bashrc file before making further changes, you can follow below steps to open .bashrc file&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd ~&lt;br&gt;
explorer.exe .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Open &lt;strong&gt;.bashrc&lt;/strong&gt; file and add following lines at the bottom and save the file.&lt;br&gt;
&lt;code&gt;export GOROOT=/usr/local/go&lt;br&gt;
export GOPATH=$HOME/go&lt;br&gt;
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Refresh your terminal using **bash **command&lt;/p&gt;

&lt;h2&gt;
  
  
  Check Go Version
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;go version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Make sure it returns the same version that you installed.&lt;/p&gt;

</description>
      <category>go</category>
      <category>linux</category>
      <category>ubuntu</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Install Redis on Linux Server (Ubuntu 20.04)</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Sat, 11 Jun 2022 12:56:42 +0000</pubDate>
      <link>https://dev.to/deadwin19/how-to-install-redis-on-linux-server-ubuntu-2004-ojd</link>
      <guid>https://dev.to/deadwin19/how-to-install-redis-on-linux-server-ubuntu-2004-ojd</guid>
      <description>&lt;h2&gt;
  
  
  What is Redis Cache
&lt;/h2&gt;

&lt;p&gt;Redis is an open-source in-memory key-value data store. It can be used as a database, cache and queue.  Redis supports various data structures such as Strings, Hashes, Lists, Sets, and more. Redis can provide high availability using Redis Node Cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Redis on Ubuntu 20.04
&lt;/h2&gt;

&lt;p&gt;You can install Redis on Linux Server using following commands&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$sudo apt update&lt;br&gt;
$sudo apt install redis-server&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once the installation is done, then Redis service will start automatically. You can check the status of the Redis service using following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$sudo systemctl status redis-server&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You will get following output&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;code&gt;redis-server.service - Advanced key-value store&lt;br&gt;
     Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)&lt;br&gt;
     Active: active (running) since Sat 2022-06-11 12:15:20 UTC; 20s ago&lt;br&gt;
...&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Redis Server Locally
&lt;/h2&gt;

&lt;p&gt;To verify that everything is set up properly, you can try to ping the Redis server from your server using the &lt;strong&gt;redis-cli&lt;/strong&gt; command:&lt;br&gt;
&lt;code&gt;redis-cli -h &amp;lt;REDIS_IP_ADDRESS&amp;gt; ping&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you are testing locally from server then, this *&lt;em&gt;REDIS_IP_ADDRESS *&lt;/em&gt; would be 127.0.0.1&lt;/p&gt;

&lt;p&gt;Above command should return a response of &lt;strong&gt;PONG&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Redis Server Remotely
&lt;/h2&gt;

&lt;p&gt;To verify that everything is set up properly, you can try to ping the Redis server from your Remote Machine using the redis-cli command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;redis-cli -h &amp;lt;REDIS_IP_ADDRESS&amp;gt; ping&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;REDIS_IP_ADDRESS would be your Server Public IP Address where Redis is installed.&lt;/p&gt;

&lt;p&gt;Above command should return a response of PONG&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;IMPORTANT *&lt;/em&gt;– Redis run on port: 6379 so you have to open this Port to communicate from Remote machine.&lt;/p&gt;

</description>
      <category>redis</category>
      <category>ubuntu</category>
      <category>linux</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Deploy Nest JS App using PM2 on Linux (Ubuntu) Server</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Sat, 11 Jun 2022 11:14:35 +0000</pubDate>
      <link>https://dev.to/deadwin19/deploy-nest-js-app-using-pm2-on-linux-ubuntu-server-88f</link>
      <guid>https://dev.to/deadwin19/deploy-nest-js-app-using-pm2-on-linux-ubuntu-server-88f</guid>
      <description>&lt;p&gt;In this article, I will cover steps that will help you to deploy Nest JS application on Linux Server. I am using &lt;strong&gt;Ubuntu 20.04 LTS **during writing this article and I am assuming you have already installed **Node.js&lt;/strong&gt; on your server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1 (Install Nest JS CLI)
&lt;/h2&gt;

&lt;p&gt;Generally, we use &lt;strong&gt;npm i&lt;/strong&gt; command to run all the dependencies but that will not install Nest JS so we have to manually install Nest JS CLI&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ sudo npm i -g @nestjs/cli&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2 (Install PM2)
&lt;/h2&gt;

&lt;p&gt;If you didn’t install PM2 earlier then you have to use following command to install PM2. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ sudo npm install pm2@latest -g&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you want to get more details about PM2 commands, then please visit url: &lt;a href="https://pm2.keymetrics.io/docs/usage/quick-start/"&gt;PM2 Commands&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 (Clone Code Repository)
&lt;/h2&gt;

&lt;p&gt;You can clone your repo using following command and install necessary dependencies. If you want more details on Cloning, please refer article: &lt;a href="https://dev.to/deadwin19/how-to-clone-a-specific-git-branch-1npj"&gt;Clone Specific Git Branch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ git clone http://coderepo.com/projectname.git&lt;br&gt;
$ cd projectname&lt;br&gt;
$ npm install&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4 (Build Project)
&lt;/h2&gt;

&lt;p&gt;For Nest JS app, you have to first generate a build then only you can run the project on server.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ npm run build&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5 (Run Project)
&lt;/h2&gt;

&lt;p&gt;If build is generated successfully then will create /dist folder under root directory. Now you can run your project using following PM2 command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ pm2 start dist/main.js --name &amp;lt;application_name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;application_name&lt;/em&gt;&lt;/strong&gt; you can use to give unique app name so that you can easily identify your apps in pm2 list.&lt;/p&gt;

&lt;p&gt;There are some PM2 commands to make your application auto restart after system reboot also&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ pm2 startup systemd&lt;br&gt;
$ pm2 save&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I hope this article will help you deploy your Nest JS application on Linux Server. If you liked the solution, please hit the Clap button or comment if you have any suggestion or feedback.&lt;/p&gt;

</description>
      <category>nestjs</category>
      <category>devops</category>
      <category>pm2</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Hyperledger Fabric - High Level Overview</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Sat, 11 Jun 2022 06:50:16 +0000</pubDate>
      <link>https://dev.to/deadwin19/hyperledger-fabric-high-level-overview-22c6</link>
      <guid>https://dev.to/deadwin19/hyperledger-fabric-high-level-overview-22c6</guid>
      <description>&lt;h2&gt;
  
  
  What is Hyperledger Fabric
&lt;/h2&gt;

&lt;p&gt;Hyperledger Fabric is an open source, permissioned blockchain framework, started in 2015 by The Linux Foundation. It has modular or component-based architecture that can accommodate wide range of use cases, such as track-and-trace of supply chains, trade finance, loyalty and rewards, as well as clearing and settlement of financial assets.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Blockchain
&lt;/h2&gt;

&lt;p&gt;As per definition Blockchain is an immutable distributed ledger that records the transaction in Decentralized environment. Blockchain technology consist of three main components: distributed ledger, consensus algorithm and smart contracts&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There are 3 types of Blockchain:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Public Blockchain &lt;/li&gt;
&lt;li&gt;Private Blockchain&lt;/li&gt;
&lt;li&gt;Consortium Blockchain&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Benefits of Hyperledger Fabric
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Open Source:&lt;/strong&gt; Hyperledger Fabric platform is an open source blockchain framework hosted by The Linux Foundation. It has an active and growing community of developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permissioned network:&lt;/strong&gt; It establishes decentralized trust in a network of known participants rather than an open network of anonymous participants. It means all participating member’s identities are known and authenticated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pluggable architecture:&lt;/strong&gt; It has pluggable architecture that helps industry adoption and develop various use cases. You can easily customize any component of fabric &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer Friendly:&lt;/strong&gt; Developer can write smart contract on any language like: GoLang, Node.js, TypeScript so Developers don’t have learn new language to write smart contract &lt;/p&gt;

&lt;h2&gt;
  
  
  Hyperledger Fabric Components
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Assets:&lt;/strong&gt;  An asset is anything that has value. An asset has state and ownership. Assets are represented in Hyperledger Fabric as a collection of key-value pairs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Peers:&lt;/strong&gt; Peers are a fundamental element of the network because they host ledgers and smart contracts. A peer executes chaincode, accesses ledger data, endorses transactions, and interfaces with applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Committing peers:&lt;/strong&gt; It commits transactions and maintains the ledger &amp;amp; state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Endorsing peers:&lt;/strong&gt; It receives transactions for endorsement, and it verifies whether the transaction fulfils all the necessary and sufficient conditions. Thereby the Endorsing peer responds by granting or denying the endorsement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ordering service or Orderers:&lt;/strong&gt; It approves the inclusion of blocks into the ledger. It communicates with peers and endorsing peers. It provides a shared communication channel to clients and peers over which the transaction can be broadcasted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Channels:&lt;/strong&gt; Channels are a logical structure formed by a collection of peers. This capability allows a group of peers to create a separate ledger of transactions. It is used to restrict access to the transaction with involved parties. It means clients only can see the messages and their associated transactions of the channels they are connected to and are unaware of other channels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Organizations:&lt;/strong&gt; Organizations is the container for the peers and respective certificate authorities (CA). Each organization has its own CA and a list of peers. Usually, organizations are used for physical separation of the blockchain network where each organization can set up their own physical machines and join the network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Membership Services Provider (MSP):&lt;/strong&gt; The MSP is implemented as a Certificate Authority to manage certificates that used to authenticate member identity and roles. It is used for verifying ownership in the network. Each certificate authority is tied to an organization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smart contract:&lt;/strong&gt; Hyperledger Fabric smart contracts are called chaincode. Chaincode is program that defines assets and related transactions; it contains the business logic of the system. Chaincode can be invoked whenever an application needs to interact with the ledger, Chaincode can be written in Golang or Node.js.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--grFGGs_8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rbtihwdfog1cph1qimeu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--grFGGs_8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rbtihwdfog1cph1qimeu.png" alt="Hyperledger Fabric Components" width="800" height="230"&gt;&lt;/a&gt;&lt;br&gt;
source: IBM&lt;/p&gt;

&lt;h2&gt;
  
  
  Hyperledger Fabric Workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Creating of Transaction Proposal:&lt;/strong&gt; Imagine a trade, such as a deal between an two parties. The life of this transaction begins with its inception by a peer node. The client connects to a Hyperledger Fabric network using the Node.js or Java SDK. Using the SDK API, the client creates a transaction proposal and sends it to the endorsing peer for verification&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Endorsement of transaction:&lt;/strong&gt; Each endorsing peer executes the proposal (a function defined within the chaincode) and returns the negative or positive response. The responses and results from the chaincode are returned to the client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Submission to orderer peers:&lt;/strong&gt; If the transaction is endorsed, the client submits the transaction to the ordering service (group of ordering peers/nodes), which uses consensus to order the transaction into a block within the ledger. Otherwise, the transaction is cancelled. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Commitment of transaction:&lt;/strong&gt; Once ordered, the stored transaction block is sent to all of the peers as part of the channel. This serves as a final validation step before changes are actually made to the ledger. There may be more than one transaction stored within one of these blocks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Submission to ledger:&lt;/strong&gt; Once the transaction(s) within the block sent back to the peers is ratified and finalized, the block is written into the ledger.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K8HduS5x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cijfmuly6e1n8qvvfam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K8HduS5x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cijfmuly6e1n8qvvfam.png" alt="Hyperledger Fabric Workflow" width="800" height="647"&gt;&lt;/a&gt; &lt;br&gt;
source: IBM&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I tried to cover high level overview of Hyperledger fabric. In next articles, will cover technical architecture and chaincode request flow. Hyperledger Fabric can be used for Private or Consortium based Blockchain solutions that gives the flexibility to develop good enterprise grade solutions around &lt;strong&gt;Blockchain Technology&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you liked the overview, please hit the Clap button or comment if you have any suggestion or feedback.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>hyperledger</category>
      <category>hyperledgerfabric</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to convert a PEM file to PPK format</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Wed, 01 Jun 2022 18:57:20 +0000</pubDate>
      <link>https://dev.to/deadwin19/how-to-convert-a-pem-file-to-ppk-format-538d</link>
      <guid>https://dev.to/deadwin19/how-to-convert-a-pem-file-to-ppk-format-538d</guid>
      <description>&lt;p&gt;If you are using AWS EC2 instances with Linux OS, then you will always generate the access keys in a &lt;strong&gt;PEM&lt;/strong&gt; (Privacy Enhanced Mail) format.&lt;/p&gt;

&lt;p&gt;If you are using PuTTY to connect EC2 instances then it asks for &lt;strong&gt;PPK&lt;/strong&gt; format, in this case you have convert your PEM file into PPK format. &lt;/p&gt;

&lt;p&gt;You have to follow following steps to convert PEM format to PPK format using PuTTYGen:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download PuTTYGen from &lt;a href="https://www.puttygen.com/"&gt;puttygen.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open PuTTYGen and click the Load button&lt;/li&gt;
&lt;li&gt;Set the filetype to &lt;em&gt;.&lt;/em&gt; so the AWS PEM file is visible&lt;/li&gt;
&lt;li&gt;Select your PEM file and PuTTYGen will import it&lt;/li&gt;
&lt;li&gt;Click Save Private Key and PuTTYGen will convert the PEM to a PPK file&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u8dMOefd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/joanz6pxxto9a6h4nf6g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u8dMOefd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/joanz6pxxto9a6h4nf6g.png" alt="Generate PPK file" width="603" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Connect EC2 from PuTTY
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;You have to enter your EC2 Hostname or IP Address and in host Textbox&lt;/li&gt;
&lt;li&gt;Go To SSH sidebar menu and upload your PPK file&lt;/li&gt;
&lt;li&gt;It will open Terminal Window and authenticate your certificate and Machine&lt;/li&gt;
&lt;li&gt;Once you Authentication done then you can enter your username: &lt;strong&gt;ubuntu&lt;/strong&gt; is default username for EC2 instance&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FqWhZ0Wa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/551erdtmtke80cmu8yc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FqWhZ0Wa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/551erdtmtke80cmu8yc1.png" alt="Hostname / IP in Putty" width="452" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fV3sFito--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/god238ralt1aghslvc4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fV3sFito--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/god238ralt1aghslvc4e.png" alt="Upload PPK file" width="451" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;PEM to PPK conversion is one of the most important activity if you are using EC2 instance.&lt;/p&gt;

&lt;p&gt;If you liked the solution, please hit the Clap button or comment if you have any suggestion or feedback.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>linux</category>
      <category>tutorial</category>
      <category>cloud</category>
    </item>
    <item>
      <title>How to Clone a Specific Git Branch</title>
      <dc:creator>Mrityunjaya Prajapati</dc:creator>
      <pubDate>Tue, 31 May 2022 07:21:24 +0000</pubDate>
      <link>https://dev.to/deadwin19/how-to-clone-a-specific-git-branch-1npj</link>
      <guid>https://dev.to/deadwin19/how-to-clone-a-specific-git-branch-1npj</guid>
      <description>&lt;h2&gt;
  
  
  What is Git
&lt;/h2&gt;

&lt;p&gt;Git is a distributed version control system designed to track changes to a project (code) in software development. It is intended to enforce coordination, collaboration, speed, and efficiency among developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;, on the other hand, is a web-based hosting service for version control using Git. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to clone a Git Repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Git Clone https://github.com/deadwin19/nest-rest-mongo-boilerplate.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This gives you access to all branches in this repository and you can easily toggle between different branches and see the files.&lt;/p&gt;

&lt;p&gt;You can use following command to change your local branch &lt;/p&gt;

&lt;p&gt;&lt;code&gt;git branch -a&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Clone a Specific Branch
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Option One&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone --branch &amp;lt;branchname&amp;gt; &amp;lt;remote-repo-url&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;OR&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone -b &amp;lt;branchname&amp;gt; &amp;lt;remote-repo-url&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;With Option One, you will fetch all the branches in the repository but checkout to the one that you specified, and that branch becomes the configured local branch for &lt;code&gt;git push&lt;/code&gt; and &lt;code&gt;git pull&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option Two&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone --branch &amp;lt;branchname&amp;gt; --single-branch &amp;lt;remote-repo-url&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;OR&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone -b &amp;lt;branchname&amp;gt; --single-branch &amp;lt;remote-repo-url&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Above step performs the same action as option one, except that it will only fetch files from the specified branch without fetching other branches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Git Clone for Single Branch saves good amount of disk space specially when you have to work on only specific branch.&lt;/p&gt;

&lt;p&gt;If you liked the solution, please hit the Clap button or comment if you have any suggestion or feedback.&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
