.claude/skills/tevm-events/SKILL.md
EVM step-by-step tracing for debugging contract execution. Use when debugging contracts or profiling gas usage.
npx skillsauth add cyotee/crane tevm-eventsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Monitor EVM execution at opcode level.
onStep - Each EVM instructiononNewContract - Contract deploymentonBeforeMessage - Before call executiononAfterMessage - After call executionconst result = await client.tevmCall({
to: contractAddress,
data: '0x...',
onStep: (step, next) => {
console.log(`PC: ${step.pc}, Opcode: ${step.opcode.name}`)
next?.()
}
})
interface InterpreterStep {
pc: number // Program counter
opcode: {
name: string // e.g., 'SSTORE', 'CALL'
fee: number // Gas cost
dynamicFee?: bigint
}
gasLeft: bigint
gasRefund: bigint
stack: Uint8Array[]
memory: Uint8Array
depth: number // Call depth
address: Address // Current contract
}
const profile = { opcodes: new Map(), totalGas: 0n }
await client.tevmCall({
to: contractAddress,
data: '0x...',
onStep: (step, next) => {
const gasCost = BigInt(step.opcode.fee)
const stats = profile.opcodes.get(step.opcode.name) || { count: 0, total: 0n }
stats.count++
stats.total += gasCost
profile.opcodes.set(step.opcode.name, stats)
profile.totalGas += gasCost
next?.()
}
})
// Results
for (const [op, stats] of profile.opcodes) {
console.log(`${op}: ${stats.count}x, ${stats.total}g`)
}
await client.tevmCall({
to: contractAddress,
data: '0x...',
onAfterMessage: (result, next) => {
if (result.execResult.exceptionError) {
console.log('Error:', result.execResult.exceptionError.error)
console.log('Return:', result.execResult.returnValue)
}
next?.()
}
})
await client.mine({
blockCount: 1,
onBlock: (block, next) => {
console.log('Block:', block.header.number)
next?.()
},
onReceipt: (receipt, blockHash, next) => {
console.log('Tx:', receipt.transactionHash)
next?.()
},
onLog: (log, receipt, next) => {
console.log('Log:', log.address, log.topics)
next?.()
}
})
development
Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".
documentation
Write to contracts and send transactions. Use when executing state-changing contract functions.
development
HTTP and WebSocket transports for blockchain connectivity. Use when configuring network connections.
data-ai
Read contract data with type-safe ABI. Use when querying smart contract view/pure functions.