- Introduction
- Why "Chuizi" (Hammer)?
- Key Features
- Architecture
- Getting Started
- How It Works
- Project Structure
- Contributing
- License
Chuizi Token Doctor is not one of those weak scanners that only read code on Etherscan.
We don't guess. We test in action.
The core principle is based on EVM State Override + eth_call technology. When you input a contract address, we use the state override feature of eth_call to temporarily inject our detection contract code into the mainnet environment. We execute buy and sell tests on the real Base mainnet state β no contract deployment, no gas consumption, yet achieving results identical to real transactions.
If we can't sell in the simulation, you won't be able to escape on mainnet either.
Most scanners just look at the code (Static Analysis). Scammers can easily hide traps.
Chuizi doesn't look. Chuizi hits.
We fork the Base Mainnet and execute Real Transactions in a sandbox:
- If the sell transaction fails in our simulation, it's a honeypot π―
- If the balance change shows 50% tax, it's a scam πΈ
- We smash the shell to see if there's real value inside
Reject static analysis false positives. Directly fork mainnet state for atomic transaction testing. Test token behavior in a real blockchain environment.
Precisely detect malicious logic like buy-only tokens, blacklist restrictions, and paused trading. If a token has traps, we'll discover them before you lose money.
πΈ Hidden Tax Detection
Many scam projects claim 0% tax but actually charge 50%. We calculate the real tax rate through balance changes, exposing hidden fees.
Based on Nest.js + ethers.js high-performance architecture, average detection time < 3 seconds. Get results quickly to make informed decisions.
- Frontend: React + Vite + TypeScript + Tailwind CSS
- Backend: Nest.js + ethers.js + TypeScript
- Contracts: Solidity + Hardhat
"Talk is cheap. Show me the code."
graph LR
Client(βοΈ React SPA) <--> API(π¦
Nest.js API)
API <--> RPC(π Base Mainnet RPC)
subgraph "The Core Magic: State Override"
API -- "eth_call + code injection" --> Doctor[TokenDoctor.sol]
Doctor -- "Real buy test" --> Uniswap
Doctor -- "Real sell test" --> Uniswap
Doctor -- "Return via revert" --> API
end
RPC <--> BaseChain(βοΈ Base Mainnet Real-time State)
| Module | Technology | Description |
|---|---|---|
| Frontend | React + Vite + TypeScript | Modern single-page application |
| Backend | Nest.js + ethers.js | Enterprise-grade Node.js framework |
| Contracts | Solidity + Hardhat | Smart contract development & testing |
| Package Manager | pnpm workspace | Monorepo architecture |
| Blockchain | Base Chain (L2) | Low-cost, high-performance |
Make sure you have the following tools installed:
- Node.js (v18+)
- pnpm (Recommended) -
npm install -g pnpm
git clone https://github.com/huicanvie/chuizi-token-doctor.git
cd chuizi-token-doctor# Install dependencies for all modules
pnpm installcd contracts
# Install dependencies
pnpm install
# Compile contracts (to get ABI and Bytecode)
pnpm hardhat compile
# After compilation, artifacts will be generated and loaded by backend
# Note: No contract deployment needed! Code injected via State Overridecd backend
# Create .env file
cp .env.example .env
# Edit .env file with the following configuration:
# RPC_URL=https://mainnet.base.org # Or use Alchemy/Infura Base RPC
# DOCTOR_ADDRESS_PLACEHOLDER=0x0000000000000000000000000000000000000001 # Any address works
# WETH_ADDRESS=0x4200000000000000000000000000000000000006
# UNISWAP_V3_ROUTER=0x2626664c2603336E57B271c5C0b26F421741e481
# UNISWAP_V2_ROUTER=0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24
# SIMULATE_AMOUNT_ETH=0.1
# SENDER=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 # Simulated sender address
# Start development server
pnpm start:devcd frontend
# Start development server
pnpm devVisit http://localhost:5173 and start your scam token hunting journey!
Because we use EVM State Override technology with the TokenDoctor.sol smart contract to execute simulation transactions on real mainnet state.
// Temporarily inject contract code via eth_call's third parameter
await provider.send('eth_call', [
{
from: sender,
to: doctorAddress, // any address
data: txData,
value: simulationAmount,
},
'latest',
{
// π₯ Key: temporarily override the code at this address
[doctorAddress]: {
code: doctorBytecode, // inject detection contract
},
},
]);Technical Advantages:
- β No Deployment: Contract code only in memory, temporarily injected via RPC call
- β Real State: Direct connection to Base mainnet, using real-time liquidity pools and token state
- β
Zero Cost:
eth_callis read-only, consumes no gas - β Lightning Fast: No waiting for block confirmation, millisecond-level response
// Pseudo-code logic demonstration
function simulation(address token) external payable returns (Result) {
// 1. Try to buy on Uniswap router
try router.swapExactETHForTokens(...) {
// Record successful buy, calculate buy tax
buySuccess = true;
buyTax = calculateTax(expectedAmount, actualAmount);
} catch {
// Buy failed - possible paused trading or blacklist
return HONEYPOT;
}
// 2. Try Approve (many honeypots fail here)
try token.approve(router, maxAmount) {
// Approve successful
} catch {
return HONEYPOT; // Cannot approve
}
// 3. Try to sell
try router.swapExactTokensForETH(...) {
// Record successful sell, calculate sell tax
sellSuccess = true;
sellTax = calculateTax(expectedETH, actualETH);
} catch {
// Can only buy, not sell! Classic honeypot
return HONEYPOT;
}
// 4. Calculate overall tax rate and risk level
return Result({
buySuccess: buySuccess,
sellSuccess: sellSuccess,
buyTax: buyTax,
sellTax: sellTax,
riskLevel: calculateRiskLevel(sellTax)
});
}| Metric | Description | Risk Rating |
|---|---|---|
| Buy Success Rate | Can successfully buy tokens | Fail = π΄ CRITICAL |
| Sell Success Rate | Can successfully sell tokens | Fail = π΄ CRITICAL |
| Buy Tax | Actual received tokens vs theoretical | >30% = π‘ HIGH |
| Sell Tax | Actual received ETH vs theoretical | >30% = π‘ HIGH |
| Gas Consumption | Transaction gas fees | Abnormally high = π‘ Warning |
chuizi-token-doctor/
βββ frontend/ # React frontend application
β βββ src/
β β βββ components/ # UI components
β β βββ pages/ # Pages
β β βββ utils/ # Utility functions
β βββ package.json
β
βββ backend/ # Nest.js backend API
β βββ src/
β β βββ simulation/ # Simulation service
β β βββ types/ # Type definitions
β β βββ main.ts # Entry file
β βββ package.json
β
βββ contracts/ # Solidity smart contracts
β βββ contracts/
β β βββ TokenDoctor.sol # Core detection contract
β βββ scripts/ # Deployment scripts
β βββ test/ # Contract tests
β
βββ pnpm-workspace.yaml # Monorepo configuration
βββ package.json # Root configuration
We welcome PRs from all developers! If you discover a new honeypot pattern that our scanner didn't catch, please submit an Issue.
- Fork this repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow TypeScript and ESLint rules
- Write clear commit messages
- Add tests for new features
- Update relevant documentation
This project is licensed under the MIT License. See LICENSE file for details.
- Hardhat - Ethereum development environment
- Nest.js - Progressive Node.js framework
- ethers.js - Ethereum JavaScript library
- Base - Coinbase's L2 solution
Made with β€οΈ by Canvie