| 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 | [object Object] |
| retry_config | [object Object] |
| logging | [object Object] |
Ethereum Development Skill
Master Ethereum development including EVM internals, gas optimization, transaction mechanics, and client interactions.
Quick Start
# Invoke this skill for Ethereum development
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 } from 'viem';
import { mainnet } from 'viem/chains';
const client = createPublicClient({ chain: mainnet, transport: http() });
// Read mapping value: balances[address]
async function getBalance(contract: `0x${string}`, user: `0x${string}`) {
const slot = keccak256(encodePacked(['address', 'uint256'], [user, 0n]));
return await client.getStorageAt({ address: contract, slot });
}
EIP-1559 Transaction
import { createWalletClient, http, parseEther } from 'viem';
const client = createWalletClient({ transport: http() });
const hash = await client.sendTransaction({
to: '0x...',
value: parseEther('0.1'),
type: 'eip1559',
maxFeePerGas: parseGwei('30'),
maxPriorityFeePerGas: parseGwei('2'),
});
Gas Optimization Cheatsheet
| Technique | Savings | Example |
|---|---|---|
| Storage packing | ~20k/slot | uint128 + uint128 in one slot |
| Calldata vs memory | ~3/byte | Use calldata for read-only |
| Unchecked math | ~80/op | unchecked { i++; } |
| Custom errors | ~200+ | error Unauthorized() |
| Short-circuit | Variable | Cheap checks first |
Common Pitfalls
| Pitfall | Issue | Solution |
|---|---|---|
| Storage in loops | Expensive reads | Cache in memory first |
| String storage | Uses multiple slots | Use bytes32 when possible |
| Zero value storage | Full refund gone | Don't rely on SSTORE refunds |
Troubleshooting
"Transaction underpriced"
# Check current gas prices
cast gas-price --rpc-url $RPC
cast basefee --rpc-url $RPC
Set maxFeePerGas to at least 2x current base fee.
"Out of gas"
# Trace transaction to find issue
cast run --trace $TX_HASH --rpc-url $RPC
"Nonce too low"
# Get current nonce
cast nonce $ADDRESS --rpc-url $RPC
CLI Commands
# Foundry essentials
forge build --sizes # Contract sizes
forge test --gas-report # Gas consumption
forge snapshot # Gas snapshots
cast storage $ADDR $SLOT # Read storage
cast call $ADDR "fn()" # Simulate call
Test Template
contract GasTest is Test {
function test_GasOptimization() public {
uint256 gasBefore = gasleft();
target.optimizedFunction();
uint256 gasUsed = gasBefore - gasleft();
assertLt(gasUsed, 50000, "Too much gas used");
}
}
Cross-References
- Bonded Agent:
02-ethereum-development - Related Skills:
solidity-development,web3-frontend
Version History
| Version | Date | Changes |
|---|---|---|
| 2.0.0 | 2025-01 | Production-grade with viem, gas optimization |
| 1.0.0 | 2024-12 | Initial release |