<?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: Steve F</title>
    <description>The latest articles on DEV Community by Steve F (@compustable).</description>
    <link>https://dev.to/compustable</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%2F3878927%2Fb8fc170b-f9ea-4bdb-9bc2-f68e33a0b8aa.png</url>
      <title>DEV Community: Steve F</title>
      <link>https://dev.to/compustable</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/compustable"/>
    <language>en</language>
    <item>
      <title>Your Solana Program's Upgrade Key Is a Ticking Time Bomb - and most developers have no idea.</title>
      <dc:creator>Steve F</dc:creator>
      <pubDate>Tue, 28 Apr 2026 15:19:45 +0000</pubDate>
      <link>https://dev.to/compustable/your-solana-programs-upgrade-key-is-a-ticking-time-bomb-and-most-developers-have-no-idea-1dkk</link>
      <guid>https://dev.to/compustable/your-solana-programs-upgrade-key-is-a-ticking-time-bomb-and-most-developers-have-no-idea-1dkk</guid>
      <description>&lt;p&gt;Let me paint you a picture.&lt;/p&gt;

&lt;p&gt;It's 2am. You get a Telegram message from someone in your community. "Hey, something weird is happening with the protocol." You check. Your program has been upgraded. Not by you. Someone deployed a new version that drains every user account into a wallet you've never seen. By the time you're fully awake, it's over. The funds are gone. The wallet is empty. The attacker has vanished.&lt;/p&gt;

&lt;p&gt;How did they do it?&lt;/p&gt;

&lt;p&gt;They didn't break your smart contract. They didn't find a vulnerability in your business logic. They didn't need to.&lt;/p&gt;

&lt;p&gt;They got your upgrade key.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Key That Controls Everything
&lt;/h2&gt;

&lt;p&gt;Every Solana program has an upgrade authority. One keypair that can deploy a new version of your program at any time, replacing every instruction, every account structure, every piece of logic — instantly, with no warning, no timelock, no governance vote.&lt;/p&gt;

&lt;p&gt;Whoever holds that key owns your protocol. Not in a philosophical sense. Literally. They can replace your program with anything they want. A version that sends all funds to their wallet. A version that bricks every user account. A version that looks identical but skims 0.1% of every transaction forever.&lt;/p&gt;

&lt;p&gt;One key. Total control.&lt;/p&gt;

&lt;p&gt;So where is yours right now?&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Most Developers Keep Their Upgrade Key
&lt;/h2&gt;

&lt;p&gt;Be honest with yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 1: A keypair file on your laptop&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;~/.config/solana/id.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That file. The one you use for &lt;code&gt;solana program deploy&lt;/code&gt;. The one that's been sitting there since you set up your dev environment. The one that's backed up to iCloud or Google Drive because your laptop sync is on. The one that's been present in every terminal session, every VS Code workspace, every time you ran &lt;code&gt;anchor deploy&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;One piece of malware. One compromised npm package in your dependency tree. One malicious VS Code extension. One browser exploit while your terminal was open. That file is gone and you won't know until it's too late.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 2: A keypair in your CI/CD pipeline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub Actions secret. Environment variable on your deployment server. &lt;code&gt;.env&lt;/code&gt; file that gets loaded at build time.&lt;/p&gt;

&lt;p&gt;Think about everyone who has ever had access to your repository. Every engineer. Every contractor. Every person you gave temporary access to debug something. Every third-party GitHub Action that ran in your pipeline — &lt;code&gt;actions/checkout&lt;/code&gt;, &lt;code&gt;actions/setup-node&lt;/code&gt;, every one of those runs in your environment and theoretically has access to your secrets.&lt;/p&gt;

&lt;p&gt;Think about your deployment server. Who has SSH access? What's the IAM policy? When did you last rotate credentials? Is there a misconfigured S3 bucket somewhere with your &lt;code&gt;.env&lt;/code&gt; file in it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 3: A keypair you committed once and deleted&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's in your git history. &lt;code&gt;git log --all --full-history&lt;/code&gt;. It's there. Anyone who has ever cloned your repo — including GitHub itself, including every fork, including every CI system that checked out your code — has a copy of that key.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git filter-branch&lt;/code&gt; doesn't fully fix this. The commit is in reflog. It's in GitHub's servers. It's in every clone that was made before you noticed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option 4: A "secure" server&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One misconfigured IAM policy. One compromised dependency with a supply chain attack. One phishing email to someone on your team that leads to credential theft. One zero-day in your server software.&lt;/p&gt;

&lt;p&gt;Your key is on a machine connected to the internet, running arbitrary code, accessible to multiple people. That is not secure. That is a target.&lt;/p&gt;




&lt;h2&gt;
  
  
  This Is Not Theoretical
&lt;/h2&gt;

&lt;p&gt;Protocols get drained this way. Regularly.&lt;/p&gt;

&lt;p&gt;The attacker's playbook is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find a protocol with a hot wallet upgrade authority&lt;/li&gt;
&lt;li&gt;Compromise the key through any of the vectors above&lt;/li&gt;
&lt;li&gt;Deploy a malicious upgrade&lt;/li&gt;
&lt;li&gt;Drain everything&lt;/li&gt;
&lt;li&gt;Bridge and disappear&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;They don't need to be a smart contract auditor. They don't need to understand your business logic. They just need your keypair file. A script kiddie with a stolen &lt;code&gt;.env&lt;/code&gt; file can do this.&lt;/p&gt;

&lt;p&gt;The scariest part? You might not even know your key is compromised until the moment they use it. The key doesn't announce itself when it's stolen. It just sits there, in their possession, while they wait for the right moment — when your TVL is highest, when you're asleep, when you're distracted by something else.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Answer Everyone Knows But Can't Use
&lt;/h2&gt;

&lt;p&gt;Ask any security-conscious Solana developer what you should do and they'll tell you the same thing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use a hardware cold wallet as your upgrade authority.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Private key generated on the device. Never exported. Never touches your operating system. Never touches a CLI. Never exists in a file on your disk. Physical tap required to sign anything. No malware can reach it because it never touches a general-purpose computer. No leaked &lt;code&gt;.env&lt;/code&gt; file because there is no file. No compromised CI pipeline because the key never enters the pipeline.&lt;/p&gt;

&lt;p&gt;The key literally cannot leave the hardware. That's the whole point.&lt;/p&gt;

&lt;p&gt;It's the right answer. Everyone knows it's the right answer.&lt;/p&gt;

&lt;p&gt;The problem is that until recently, you couldn't actually do it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why You Couldn't Use a Hardware Wallet
&lt;/h2&gt;

&lt;p&gt;The Solana CLI requires a keypair file. Hardware wallets can't export their private key — that's the entire security model. So &lt;code&gt;solana program deploy&lt;/code&gt; doesn't work with a hardware wallet. Neither does &lt;code&gt;anchor deploy&lt;/code&gt;. Neither does any CLI tool.&lt;/p&gt;

&lt;p&gt;What about Squads? Squads is great for multisig governance, but it routes instructions through its own program via CPI. The BPFLoader explicitly rejects CPI calls for upgrade operations. It's not a bug. It's a security feature. Squads permanently cannot perform BPFLoader upgrades.&lt;/p&gt;

&lt;p&gt;So developers were stuck. The right answer was hardware wallet. The available tools required a hot key. Most developers chose the hot key and hoped for the best.&lt;/p&gt;




&lt;h2&gt;
  
  
  WalletDeploy
&lt;/h2&gt;

&lt;p&gt;I built WalletDeploy because I was in this exact situation. My upgrade authority was a Tangem card. I needed to upgrade my program. Nothing worked.&lt;/p&gt;

&lt;p&gt;So I figured out how to construct the BPFLoader instructions directly in the browser and send them to the hardware wallet via WalletConnect for signing. Top-level transaction, signed directly by the cold wallet, submitted straight to the network. No CLI. No hot keys. No middleware.&lt;/p&gt;

&lt;p&gt;It works. I've deployed, upgraded, and closed programs on Solana mainnet. All signed with a Tangem NFC tap. All from a browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's live today:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy any Solana program — drag your &lt;code&gt;.so&lt;/code&gt; file, two taps, done&lt;/li&gt;
&lt;li&gt;Upgrade any program — cold wallet signs the upgrade directly&lt;/li&gt;
&lt;li&gt;Close programs and recover rent SOL&lt;/li&gt;
&lt;li&gt;Transfer upgrade authority to a hardware wallet right now, today, before something bad happens&lt;/li&gt;
&lt;li&gt;Buffer Inspector — scan any wallet for locked SOL from abandoned deploys&lt;/li&gt;
&lt;li&gt;On-chain audit trail — every operation writes a hardware-signed memo to Solana Explorer, permanently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The audit trail matters more than you think.&lt;/strong&gt; Every WalletDeploy operation records an immutable, cold-wallet-signed authorization memo on-chain. If your program is ever questioned — by regulators, by users, by anyone — you have cryptographic proof of every upgrade, who authorized it, and when. No server log. No internal record. Public blockchain, forever.&lt;/p&gt;




&lt;h2&gt;
  
  
  Do This Today
&lt;/h2&gt;

&lt;p&gt;If your upgrade authority is a hot wallet right now, here's what to do:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get a hardware wallet. Tangem works via NFC. Keystone works via QR. Any WalletConnect-compatible hardware wallet works.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;walletdeploy.com&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Connect your hardware wallet&lt;/li&gt;
&lt;li&gt;Use Transfer Upgrade Authority to move your program's authority to the hardware wallet's public key&lt;/li&gt;
&lt;li&gt;That's it. Your upgrade key is now in hardware cold storage.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One operation. Takes five minutes. Your program is now protected by a key that has never touched a general-purpose computer and never will.&lt;/p&gt;

&lt;p&gt;Free forever. No account. No credit card.&lt;/p&gt;




&lt;h2&gt;
  
  
  When You're Ready to Go Further: Freeze It
&lt;/h2&gt;

&lt;p&gt;Hardware cold wallet is the right answer for most programs. But there's one more step for protocols that are mature and battle-tested.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Freeze the program entirely.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Remove the upgrade authority completely. Set it to &lt;code&gt;None&lt;/code&gt;. Nobody can ever upgrade the program again — not you, not an attacker, not anyone. The code is frozen forever, on-chain, provably.&lt;/p&gt;

&lt;p&gt;This is what serious DeFi protocols eventually do. It's the strongest possible decentralization argument. "Nobody controls this contract" is a one-line answer to regulators, auditors, and users. Under the CLARITY Act, a frozen program is the cleanest possible evidence that no central party can modify the protocol.&lt;/p&gt;

&lt;p&gt;WalletDeploy supports this too. When you're ready, connect your hardware wallet, select Freeze Program, confirm the program ID, and tap. One transaction. Permanent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't do this until you're sure.&lt;/strong&gt; There's no undo. But when you are sure — it's the gold standard.&lt;/p&gt;

&lt;p&gt;The full security lifecycle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hot wallet (dangerous)
    → Hardware cold wallet via WalletDeploy (secure)
        → Frozen program (immutable)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;WalletDeploy takes you the whole way.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Question You Should Be Asking
&lt;/h2&gt;

&lt;p&gt;Not "should I do this?" — you already know the answer.&lt;/p&gt;

&lt;p&gt;The question is: &lt;strong&gt;how long are you willing to wait?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every day your upgrade authority is a hot wallet is another day someone could be sitting on your compromised key, waiting for the right moment.&lt;/p&gt;

&lt;p&gt;The tool exists. It's free. It works on mainnet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;walletdeploy.com&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>solana</category>
      <category>blockchain</category>
      <category>security</category>
      <category>rust</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Steve F</dc:creator>
      <pubDate>Tue, 14 Apr 2026 16:49:27 +0000</pubDate>
      <link>https://dev.to/compustable/-5a15</link>
      <guid>https://dev.to/compustable/-5a15</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/compustable/the-solana-buffer-recovery-problem-nobody-talks-about-34cp" class="crayons-story__hidden-navigation-link"&gt;The Solana Buffer Recovery Problem Nobody Talks About&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/compustable" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3878927%2Fb8fc170b-f9ea-4bdb-9bc2-f68e33a0b8aa.png" alt="compustable profile" class="crayons-avatar__image" width="574" height="583"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/compustable" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Steve F
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Steve F
                
              
              &lt;div id="story-author-preview-content-3500790" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/compustable" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3878927%2Fb8fc170b-f9ea-4bdb-9bc2-f68e33a0b8aa.png" class="crayons-avatar__image" alt="" width="574" height="583"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Steve F&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/compustable/the-solana-buffer-recovery-problem-nobody-talks-about-34cp" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 14&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/compustable/the-solana-buffer-recovery-problem-nobody-talks-about-34cp" id="article-link-3500790"&gt;
          The Solana Buffer Recovery Problem Nobody Talks About
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/solana"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;solana&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/blockchain"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;blockchain&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/compustable/the-solana-buffer-recovery-problem-nobody-talks-about-34cp#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>The Solana Buffer Recovery Problem Nobody Talks About</title>
      <dc:creator>Steve F</dc:creator>
      <pubDate>Tue, 14 Apr 2026 15:57:20 +0000</pubDate>
      <link>https://dev.to/compustable/the-solana-buffer-recovery-problem-nobody-talks-about-34cp</link>
      <guid>https://dev.to/compustable/the-solana-buffer-recovery-problem-nobody-talks-about-34cp</guid>
      <description>&lt;p&gt;If you've ever deployed a Solana program with a hardware wallet as the upgrade authority, you've probably hit this wall.&lt;/p&gt;

&lt;p&gt;You write a buffer. You try to upgrade. And then you realize — there's no way to sign the upgrade instruction from your hardware wallet without exporting a private key or routing through middleware that the runtime rejects.&lt;/p&gt;

&lt;p&gt;I lost 1.659 SOL to a locked buffer before I figured this out.&lt;/p&gt;

&lt;p&gt;The Root Cause&lt;br&gt;
Every Solana admin instruction — program upgrades, authority transfers, buffer closes — must be a top-level transaction signed directly by the upgrade authority.&lt;/p&gt;

&lt;p&gt;This is a security invariant baked into the BPFLoader runtime. It will never change. It's not a bug. It's the design.&lt;/p&gt;

&lt;p&gt;This means:&lt;/p&gt;

&lt;p&gt;CLI tools fail. solana program upgrade requires a keypair file on disk. Hardware wallets can't export private keys — that's the whole point of cold storage.&lt;/p&gt;

&lt;p&gt;Squads fails. Squads connects to hardware wallets but routes instructions through CPI (cross-program invocation). The BPFLoader permanently rejects upgrade instructions that arrive via CPI. Squads isn't broken — it's just architecturally incompatible with this requirement.&lt;/p&gt;

&lt;p&gt;Hardware wallet apps fail. Tangem, Keystone, and others support DeFi transactions but have no interface for BPFLoader admin operations.&lt;/p&gt;

&lt;p&gt;What Actually Works&lt;br&gt;
The only path that works is submitting the BPFLoader instruction as a top-level transaction signed directly by your hardware wallet via WalletConnect v2.&lt;/p&gt;

&lt;p&gt;Here's the flow that works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Write buffer via CLI (binary write is fine from CLI)&lt;br&gt;
solana program write-buffer ./target/deploy/my_program.so&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set buffer authority to your hardware wallet&lt;br&gt;
solana program set-buffer-authority  \&lt;br&gt;
 --new-buffer-authority &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sign the upgrade instruction directly from your hardware wallet&lt;br&gt;
→ This is the step that was missing&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 3 is what I couldn't do. The upgrade instruction needs to be a top-level transaction with your hardware wallet as the signer — not routed through any middleware.&lt;/p&gt;

&lt;p&gt;Recovering Locked SOL&lt;br&gt;
If you've already got a buffer locked with a hardware wallet as authority and no way to close it, the same problem applies. The CloseBuffer instruction must also be a top-level transaction signed by the buffer authority.&lt;/p&gt;

&lt;p&gt;I recovered 1.659 SOL from exactly this situation. Here's the mainnet transaction:&lt;/p&gt;

&lt;p&gt;4hqkevNyKubRawDhYULYT7W2FqWnerk38fts4MNM1bsVoCzEzzFBENANzqLaLF1AWx8QgiZxcg4Vosgc8JsW5huw&lt;/p&gt;

&lt;p&gt;Single Tangem NFC tap. No CLI. No Squads.&lt;/p&gt;

&lt;p&gt;The Tool I Built&lt;br&gt;
After hitting this problem I built WalletDeploy — a browser-based tool that constructs BPFLoader instructions and signs them via WalletConnect directly from any hardware wallet.&lt;/p&gt;

&lt;p&gt;What's live on Solana today:&lt;/p&gt;

&lt;p&gt;Deploy new programs (cold wallet is upgrade authority from block 0)&lt;/p&gt;

&lt;p&gt;Upgrade programs&lt;/p&gt;

&lt;p&gt;Extend programs&lt;/p&gt;

&lt;p&gt;Transfer upgrade authority&lt;/p&gt;

&lt;p&gt;Recover locked SOL from orphaned buffers&lt;/p&gt;

&lt;p&gt;Emergency shutdown / reactivate AI agent programs&lt;/p&gt;

&lt;p&gt;No install. No signup. Free during beta. Works with Tangem, Keystone, Ngrave, Ellipal — any WalletConnect v2 wallet.&lt;/p&gt;

&lt;p&gt;The Broader Pattern&lt;br&gt;
This isn't just a Solana problem. Every blockchain runtime enforces the same invariant — administrative instructions must be top-level transactions signed directly by the authority. EVM proxy upgrades (upgradeTo, transferOwnership), Near contract upgrades, Sui package upgrades — same pattern, different instruction encoding.&lt;/p&gt;

&lt;p&gt;EVM support is coming Q2 2026.&lt;/p&gt;

&lt;p&gt;If You're Stuck Right Now&lt;br&gt;
If you have a locked buffer or need to upgrade a program and your upgrade authority is a hardware wallet:&lt;/p&gt;

&lt;p&gt;Go to walletdeploy.com&lt;/p&gt;

&lt;p&gt;Connect your hardware wallet via WalletConnect&lt;/p&gt;

&lt;p&gt;Select your operation&lt;/p&gt;

&lt;p&gt;Tap to sign&lt;/p&gt;

&lt;p&gt;Questions or feedback: &lt;a href="mailto:dev@walletdeploy.com"&gt;dev@walletdeploy.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>solana</category>
      <category>blockchain</category>
      <category>security</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
