ethereum-development

安装量: 37
排名: #19127

安装

npx skills add https://github.com/pluginagentmarketplace/custom-plugin-blockchain --skill ethereum-development

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

返回排行榜