| name | ethereum-development |
| description | Master Ethereum development including EVM, gas optimization, and client interactions |
| sasmp_version | 1.3.0 |
| version | 2.0.0 |
| updated | 2025-01 |
| bonded_agent | 02-ethereum-development |
| bond_type | PRIMARY_BOND |
| atomic | true |
| single_responsibility | ethereum_development |
| parameters | {"topic":{"type":"string","required":true,"enum":["evm","gas","transactions","clients","debugging"]},"network":{"type":"string","default":"mainnet","enum":["mainnet","sepolia","holesky","local"]}} |
| retry_config | {"max_attempts":3,"backoff":"exponential","initial_delay_ms":1000} |
| logging | {"level":"info","include_timestamps":true,"track_usage":true} |
Ethereum Development Skill
Master Ethereum development including EVM internals, gas optimization, transaction mechanics, and client interactions.
Quick Start
Skill("ethereum-development", topic="gas", network="mainnet")
Topics Covered
1. EVM (Ethereum Virtual Machine)
Understand the execution environment:
- Stack Machine: 256-bit words, 1024 depth
- Memory: Linear byte array, expansion costs
- Storage: Persistent key-value, 32-byte slots
- Opcodes: Costs, effects, gas consumption
2. Gas Optimization
Reduce transaction costs:
- Storage Packing: Fit multiple values in one slot
- Calldata vs Memory: Choose efficiently
- Loop Optimization: Cache storage reads
- Custom Errors: Save gas on reverts
3. Transaction Mechanics
Master transaction lifecycle:
- Types: Legacy (0), Access List (1), EIP-1559 (2)
- Fee Estimation: Base fee, priority fee, max fee
- Nonce Management: Sequential ordering
- Receipts: Status, logs, gas used
4. Client Interactions
Work with Ethereum nodes:
- RPC Methods: eth_, debug_, trace_
- State Queries: Storage slots, code, balance
- Event Subscriptions: Filter logs, topics
Code Examples
Gas-Efficient Storage
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract Optimized {
// Pack into single slot (32 bytes)
struct User {
uint128 balance; // 16 bytes
uint64 lastUpdate; // 8 bytes
uint32 nonce; // 4 bytes
bool active; // 1 byte
// 3 bytes padding
}
mapping(address => User) public users;
}
Read Storage Slot
import { createPublicClient, http, keccak256, encodePacked, pad } ;
{ mainnet } ;
client = ({ : mainnet, : () });
() {
slot = (([, ], [user, ]));
client.({ : contract, slot });
}