
Solidity || Sui Move Security Researcher || Formal Verification || π§βπ» SR at @QuillAudits_AI || My opinions are personal
Joined October 2021
- Tweets1.1K
- Following449
- Followers405
- Likes5K
Pro King π retweeted
l1BlockNumber() β HyperCore block progression β EVM block.number π§΅
Do not use:
- block.number to reason about HyperCore state freshness.
- l1BlockNumber() for EVM ordering assumptions.
π
I've had hands-on time with QuillShield, and the 85% validity rate on auditor-reviewed findings is the number that matters most to me.
As an auditor, noise is the real cost of most tools. This one surfaces real issues.
Only 50 beta spots. If you're shipping on EVM, grab one.
Scan your smart contracts before attackers do.
We are opening beta access to QuillShield, our multi-agent auditor for EVM smart contracts, for the first 50 teams.
October has made it clear that waiting is no longer an option. In the last few days alone:
β’ PHP: pre-auth remote code execution, CVSS 9.2
β’ GitLab: CVSS 10, self-hosted servers back to 2014
β’ Node.js: 10 CVEs in one release
β’ Railway: customer secrets accessed
β’ LiteLLM: credential stealer shipped on PyPI
AI helped find some of these bugs, and attackers have the same tools.
A bug in a deployed smart contract can drain funds in a single transaction, so we built QuillShield to find them first. Here's what it has done so far:
> 25 Critical or High vulnerabilities caught across 155 projects
> 497 findings, with 85% of auditor-reviewed ones confirmed valid
> 350,000+ lines of Solidity reviewed
> 83.8% on EVMBench, against 45.6% for the best published model
Here's the beta link: shield.quillaudits.com/
Pro King π retweeted
One of my favourite things is to enter into a Socratic dialogue with an LLM and a codebase. I ask it questions. I read its answers carefully. I correct it when needed and ask more questions.
Pro King π retweeted
I want to start sharing small Hyperliquid based protocols auditing checklists from time to time.
Especially things that can easily be missed while auditing Hyperliquid-based protocols.
Below are two important checks π
HyperCore auditing checklist π§΅
1. spotBalance() β total is NOT free balance:
total includes tokens currently locked in open orders.
Using it as spendable(bridgeable) balance can overestimate user funds.
// β Wrong
uint64 free = bal. total;
// β
Correct
uint64 free = bal. total - bal.hold;
Rotating API keys works because someone issued them. Private keys don't work that way.
Once leaked, the address and every role it holds are gone. Transfer ownership, replace multisig signers, revoke approvals, and keep admin roles behind a multisig with a timelock going forward.
If your deployer key was sitting in a Railway variable, who owns your contracts right now?
Possibly the attacker.
Railway was breached today. Their disclosure says an unauthorised party may have accessed customer environment variables and decrypted some of them. Railway thinks the target was AI inference keys.
On-chain trackers say a sweeper script went through the same dump and hit 200+ addresses across 19+ EVM chains, around $371k as of Oct 21 evening UTC.
Here is the part the βrotate your keysβ advice skips.
An API key has an issuer. You revoke it with OpenAI or Stripe or your database provider and get a new one.
A private key has no issuer, so there is nothing to rotate. Once it has been read, that address is gone, and the balance in it is usually the least of what it controls. The same key is the owner, upgrader or minter on whatever contracts you pointed it at, and that is what the attacker can use next.
So if you ran a bot, relayer, keeper, indexer or backend on Railway with a signing key in its variables, do these 5 things first, from a clean machine with a new key. None of them touch Railway, so you donβt have to wait for deploys to come back.
1. Treat every address whose private key or seed phrase was in a Railway variable as controlled by the attacker.
Move whatβs left and retire it. One key is the same address on every EVM chain, so check all of them, not just mainnet. The sweeper already did.
2. Find every contract where that address holds a role.
Owner, admin, proxy upgrader, minter, pauser, oracle updater, guardian, relayer allowlist. Transfer each to a new address. Start with the deployer key, because in most codebases the account that deploys a contract becomes its default owner and nobody ever changes it.
3. If the key is a signer on a Safe or another multisig, replace it.
Then check the threshold still makes sense without it.
4. Revoke token approvals.
The ones that address granted, and the ones other addresses granted to it.
5. Set monitoring on the old addresses and on the attacker address in the first reply.
A role the attacker hasnβt used yet can still be used.
Then rotate the normal secrets. RPC keys, database passwords, registry credentials, AI API keys. Do it with the provider that issued them, because changing the value inside Railway does nothing to the old one.
And go through services you stopped months ago. One engineering lead on X traced a stolen AWS key to a Railway service that had been idle since July. A stopped service keeps its variables.
None of this is unusual practice, which is the uncomfortable part. At least one template on Railwayβs own deploy page asks you to paste a 0x-prefixed wallet private key straight into a variable.
Longer term, three things.
A hot key on someone elseβs platform holds a few hours of float and no admin roles at all.
Admin roles sit behind a multisig with a timelock.
If you can, sign through a KMS or HSM so the raw key is never in an env var in the first place.
It is also worth running a key leak drill once, because the thing most teams discover mid-incident is that nobody can list which contracts a given key still controls.
Halfway through this talk by @BowTiedDravee at @yAuditDAO, and it's already pushed me to sharpen my attacker mindset.
One part that stuck with me: @1_00_proof spent three weeks on a single function and found a bug that earned a $1M bounty.
Depth beats breadth. Finishing the second half on my break today. Worth your time if you're in security.
xitter.cf/yAuditDAO/status/21102β¦
yBorg - Week 3 Day 2
Todayβs speaker: @BowTiedDravee on βThinking Like an Attacker.β
Use attack trees: start with the goal, work backward, and challenge assumptions until attacker control reaches something breakable.
πΆοΈ Hot take: AI is a gun. You still need to aim.
Watch π
Had the chance to test QuillShield early, and it's a real shift.
Instead of waiting until the code is "done" to find out what's wrong, every PR gets reviewed with full protocol context from day one.
Security that moves at the speed of development. If you're building, grab a beta spot.
8 years of auditing smart contracts. Thousands of findings.
And the same pattern every time: the code was done, the audit was next, the launch was waiting.
We built something that reviews the code while it's still being written.
First look at QuillShield.
The most powerful AI security reviewer for onchain code we've ever built. It reviews every pull request with the full context of your protocol, starting from a complete audit of it.
Opening a small beta. DM for access.
Another audit wrapped at @QuillAudits_AI . 14 findings: 2 High, 6 Medium, 2 Low, 4 Informational.
Alhamdulillah, just put together this simple setup for auditing.
Nothing fancy, but it's where the bugs will be found. Time to lock in. π
Iβve seen so many beautiful setups, MacBooks, and clean workspaces on my timelineβ¦
This is mine.
Just a simple laptop. No desk at all. No gear.
But every day, this is where I learn, struggle, and keep going.
Some days are hard.
Some days I feel behind.
But I donβt stop.
One day, Iβll have that dream setup.
But more importantly β Iβll earn itβΊοΈ.
For now, this is enough. π»
Another audit wrapped at @QuillAudits_AI . 10 findings: 1 Critical, 5 Medium, 4 Low.
If you price WBTC with the BTC/USD feed, you have encoded an assumption you never test: that a wrapper and its underlying are the same asset.
The day that stops being true, your oracle is still correct. Your staleness checks still pass. And your liquidators lose money on every position they touch.
Ask your team what happens at 15% divergence. If the answer is "that will not happen," that is the finding.
π€ Made with AI
400 followers. Thank you to everyone who has read, replied, and pushed back on something I got wrong.
Proud to have been one part of this.
The number I keep coming back to is 12 projects delivered on time. Anyone can find bugs given infinite runway. Finding them on schedule, every month, is the actual discipline.
August was one of those months where you just sit back and feel genuinely proud of the team.
Our audit team @QuillAudits_AI absolutely crushed it: β
12 projects audited - all delivered on time
π 155 findings identified
Huge kudos to @kalp_eth, @Pro___King1,@phoenix244001, @cryptanu, and @turvec_dev for the exceptional work and relentless commitment to securing Web3.
Hats off to you all. On to the next one....
Pro King π retweeted
August was one of those months where you just sit back and feel genuinely proud of the team.
Our audit team @QuillAudits_AI absolutely crushed it: β
12 projects audited - all delivered on time
π 155 findings identified
Huge kudos to @kalp_eth, @Pro___King1,@phoenix244001, @cryptanu, and @turvec_dev for the exceptional work and relentless commitment to securing Web3.
Hats off to you all. On to the next one....
This time, the codebase was relatively small, six medium-severity, one low-severity, and four informational findings.
π€ Made with AI
Pro King π retweeted
If you're an auditor feeling stuck, watch @zigtur talk.
Feedback Loop: Every missed bug is only wasted if you don't feed it back into how you hunt the next one. That loop is what separates auditors who keep improving from those who stall.
youtube.com/watch?v=_5Fya4Luβ¦
Pro King π retweeted
One week audit, wrapped. Team engagement at @QuillAudits_AI .
4 High, 4 Medium, 2 Informational.




















