<?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: JakeMalarczyk</title>
    <description>The latest articles on DEV Community by JakeMalarczyk (@jakemalarczyk).</description>
    <link>https://dev.to/jakemalarczyk</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4219809%2F02dbab1d-bfd6-4f8a-a8b6-bfc2e51b301b.png</url>
      <title>DEV Community: JakeMalarczyk</title>
      <link>https://dev.to/jakemalarczyk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jakemalarczyk"/>
    <language>en</language>
    <item>
      <title>Solana audit readiness checklist: 12 things to prepare before the audit starts</title>
      <dc:creator>JakeMalarczyk</dc:creator>
      <pubDate>Sun, 01 Nov 2026 13:12:04 +0000</pubDate>
      <link>https://dev.to/jakemalarczyk/solana-audit-readiness-checklist-12-things-to-prepare-before-the-audit-starts-1pj9</link>
      <guid>https://dev.to/jakemalarczyk/solana-audit-readiness-checklist-12-things-to-prepare-before-the-audit-starts-1pj9</guid>
      <description>&lt;p&gt;An audit is billed in engineer-days. Every day an auditor spends setting up your project or guessing what a function should do is a day not spent looking for bugs. These 12 items are what a well-prepared team hands over before the start date.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Freeze a tagged commit. Keep new features on a separate branch until the report is final.&lt;/li&gt;
&lt;li&gt;[ ] Finish the features in scope. Cut unlaunched features from scope.&lt;/li&gt;
&lt;li&gt;[ ] Clean the build: compiles from a clean checkout with pinned Rust, Solana and Anchor versions, and no failing tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Write a short spec: for each instruction, what it does, who may call it, which accounts it touches and what it must never allow.&lt;/li&gt;
&lt;li&gt;[ ] List your invariants (for example: total supply equals the sum of balances, only the authority can move funds, debt never exceeds collateral).&lt;/li&gt;
&lt;li&gt;[ ] Draw the trust model: which keys exist, who holds them, what the upgrade authority can do, which off-chain services the program relies on.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tests
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Ship tests that run in one command.&lt;/li&gt;
&lt;li&gt;[ ] Cover the failure paths: wrong signer, wrong owner, wrong account, zero and maximum amounts.&lt;/li&gt;
&lt;li&gt;[ ] Add fuzzing or property tests where money moves.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Process
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Agree scope and exclusions in writing: programs, commit, what is out of scope (frontend, keepers, oracles, key management) and whether the fix review is included.&lt;/li&gt;
&lt;li&gt;[ ] Name a developer on call who answers auditor questions within hours.&lt;/li&gt;
&lt;li&gt;[ ] Plan the fix window: reserve your engineers for the days after the first report.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do the spec and invariants first. Writing them often exposes a design problem before anyone is paid to find it.&lt;/p&gt;

&lt;p&gt;Full article with FAQ: &lt;a href="https://orivions.com/blog/solana-audit-readiness-checklist" rel="noopener noreferrer"&gt;https://orivions.com/blog/solana-audit-readiness-checklist&lt;/a&gt;&lt;br&gt;
All three checklists on GitHub: &lt;a href="https://github.com/JakeMalarczyk/solana-security-checklists" rel="noopener noreferrer"&gt;https://github.com/JakeMalarczyk/solana-security-checklists&lt;/a&gt;&lt;/p&gt;

</description>
      <category>solana</category>
      <category>security</category>
      <category>web3</category>
      <category>checklist</category>
    </item>
    <item>
      <title>Anchor security checklist: 16 checks before your Solana audit</title>
      <dc:creator>JakeMalarczyk</dc:creator>
      <pubDate>Sun, 01 Nov 2026 13:11:54 +0000</pubDate>
      <link>https://dev.to/jakemalarczyk/anchor-security-checklist-16-checks-before-your-solana-audit-4an6</link>
      <guid>https://dev.to/jakemalarczyk/anchor-security-checklist-16-checks-before-your-solana-audit-4an6</guid>
      <description>&lt;p&gt;Anchor turns account validation into declarations, which removes whole classes of bugs. But Anchor only checks what you tell it to check. Run these 16 checks on any Anchor program before sending it to an auditor. This list is preparation for an audit, not a replacement for one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accounts and signers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Use &lt;code&gt;Signer&lt;/code&gt; for every account that must authorize the instruction. A plain account or &lt;code&gt;UncheckedAccount&lt;/code&gt; is not checked for a signature.&lt;/li&gt;
&lt;li&gt;[ ] Tie stored authorities to the signer with &lt;code&gt;has_one&lt;/code&gt; or an explicit constraint, for example &lt;code&gt;#[account(mut, has_one = authority)]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;[ ] Justify every &lt;code&gt;UncheckedAccount&lt;/code&gt; and &lt;code&gt;AccountInfo&lt;/code&gt;: validate owner, key or data yourself.&lt;/li&gt;
&lt;li&gt;[ ] Prevent the same account being passed twice into two mutable slots, for example &lt;code&gt;from.key() != to.key()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  PDAs and initialization
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Validate PDAs with &lt;code&gt;seeds&lt;/code&gt; and &lt;code&gt;bump&lt;/code&gt; in the account constraint, and store the canonical bump.&lt;/li&gt;
&lt;li&gt;[ ] Design seeds so users cannot collide: include the user or the parent account.&lt;/li&gt;
&lt;li&gt;[ ] Avoid &lt;code&gt;init_if_needed&lt;/code&gt; unless you have a reason, and check it cannot reset balances or owners.&lt;/li&gt;
&lt;li&gt;[ ] Close accounts with the &lt;code&gt;close&lt;/code&gt; constraint instead of draining lamports by hand.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tokens and CPIs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Constrain token accounts by mint and authority (&lt;code&gt;token::mint&lt;/code&gt;, &lt;code&gt;token::authority&lt;/code&gt; or associated token constraints).&lt;/li&gt;
&lt;li&gt;[ ] Use &lt;code&gt;Program&amp;lt;&amp;gt;&lt;/code&gt; or &lt;code&gt;Interface&amp;lt;&amp;gt;&lt;/code&gt; types for programs you call, so the program ID is checked.&lt;/li&gt;
&lt;li&gt;[ ] Decide on Token-2022 support explicitly and review extensions such as transfer fees and transfer hooks.&lt;/li&gt;
&lt;li&gt;[ ] Scope PDA signer seeds tightly: separate PDAs for vaults, authorities and configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Math, upgrades and testing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Use checked arithmetic and keep &lt;code&gt;overflow-checks = true&lt;/code&gt; in the release profile. Round in the protocol's favour.&lt;/li&gt;
&lt;li&gt;[ ] Validate &lt;code&gt;remaining_accounts&lt;/code&gt; by hand: Anchor does no validation on them.&lt;/li&gt;
&lt;li&gt;[ ] Plan account layout changes before upgrades: version accounts or reserve space, use &lt;code&gt;realloc&lt;/code&gt; carefully.&lt;/li&gt;
&lt;li&gt;[ ] Test the failure paths (wrong signer, wrong mint, duplicated accounts, zero and maximum amounts) and fuzz the rest, for example with Trident.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to do with the results
&lt;/h2&gt;

&lt;p&gt;Fix what you find, write down the invariants your program must always keep, and send both to your auditor with a frozen commit. Before mainnet, also go through the pre-launch checklist in the GitHub repository below.&lt;/p&gt;

&lt;p&gt;Full article with FAQ: &lt;a href="https://orivions.com/blog/anchor-security-checklist" rel="noopener noreferrer"&gt;https://orivions.com/blog/anchor-security-checklist&lt;/a&gt;&lt;br&gt;
All three checklists on GitHub: &lt;a href="https://github.com/JakeMalarczyk/solana-security-checklists" rel="noopener noreferrer"&gt;https://github.com/JakeMalarczyk/solana-security-checklists&lt;/a&gt;&lt;/p&gt;

</description>
      <category>solana</category>
      <category>anchor</category>
      <category>security</category>
      <category>rust</category>
    </item>
    <item>
      <title>Solana pre-launch security checklist: 15 checks before mainnet</title>
      <dc:creator>JakeMalarczyk</dc:creator>
      <pubDate>Sun, 01 Nov 2026 13:11:36 +0000</pubDate>
      <link>https://dev.to/jakemalarczyk/solana-pre-launch-security-checklist-15-checks-before-mainnet-154j</link>
      <guid>https://dev.to/jakemalarczyk/solana-pre-launch-security-checklist-15-checks-before-mainnet-154j</guid>
      <description>&lt;p&gt;An audit is necessary, but it is not a launch plan. Many incidents have nothing to do with a clever exploit in the program: a leaked upgrade key, a compromised frontend, an unaudited last-minute change, or nobody noticing a drain for hours. These 15 checks cover what usually goes wrong around the code. Assign a name to each line: a check without an owner is a check nobody did.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keys and authorities
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] 1. Move the program upgrade authority to a multisig (signers on separate devices, never the development agency).&lt;/li&gt;
&lt;li&gt;[ ] 2. Decide your upgrade policy in public: upgradeable, behind a timelock or immutable.&lt;/li&gt;
&lt;li&gt;[ ] 3. Review token mint and freeze authorities. Revoke what you do not need, document what you keep and why.&lt;/li&gt;
&lt;li&gt;[ ] 4. Audit every admin instruction (fees, pauses, parameters, withdrawals): right signer, controlled by the multisig.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Code and deployment
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] 5. Deploy exactly the audited commit. Anything changed after the audit is unaudited code.&lt;/li&gt;
&lt;li&gt;[ ] 6. Publish a verifiable build so anyone can confirm the on-chain program matches your public source.&lt;/li&gt;
&lt;li&gt;[ ] 7. Test failure paths: wrong signer, wrong owner, duplicated accounts, zero and maximum amounts.&lt;/li&gt;
&lt;li&gt;[ ] 8. Rehearse the launch on devnet with production settings, including multisig steps.&lt;/li&gt;
&lt;li&gt;[ ] 9. Plan account migrations before you need them: reserve space or version your accounts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Operations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] 10. Set up monitoring and alerts for unusual outflows, failed transaction spikes, admin instructions and authority changes.&lt;/li&gt;
&lt;li&gt;[ ] 11. Use more than one RPC provider, with a fallback and rate limits.&lt;/li&gt;
&lt;li&gt;[ ] 12. Protect the frontend and domain: registrar lock, two-factor authentication, restricted deploy access, pinned third-party scripts.&lt;/li&gt;
&lt;li&gt;[ ] 13. Write an incident response plan: who can pause, how they reach each other, who talks to users, which partners to call.&lt;/li&gt;
&lt;li&gt;[ ] 14. Launch a bug bounty sized relative to the funds at risk.&lt;/li&gt;
&lt;li&gt;[ ] 15. Cap risk at launch with deposit caps or rate limits, and raise them as confidence grows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Verify that deployed code matches the audited code
&lt;/h2&gt;

&lt;p&gt;Build the audited commit and compare it with the program on chain using &lt;code&gt;solana-verify get-program-hash&lt;/code&gt; and &lt;code&gt;solana-verify verify-from-repo&lt;/code&gt;. Once remote verification succeeds, explorers such as Solana Explorer, SolanaFM and Solscan show the program as verified.&lt;/p&gt;

&lt;p&gt;Full article with FAQ: &lt;a href="https://orivions.com/blog/solana-pre-launch-security-checklist" rel="noopener noreferrer"&gt;https://orivions.com/blog/solana-pre-launch-security-checklist&lt;/a&gt;&lt;br&gt;
All three checklists on GitHub: &lt;a href="https://github.com/JakeMalarczyk/solana-security-checklists" rel="noopener noreferrer"&gt;https://github.com/JakeMalarczyk/solana-security-checklists&lt;/a&gt;&lt;/p&gt;

</description>
      <category>solana</category>
      <category>security</category>
      <category>web3</category>
      <category>rust</category>
    </item>
  </channel>
</rss>
