Skip to main content Skills Marketplace Descubra e explore skills de IA criadas pela comunidade.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Copiar promptMostrar detalhes do prompt Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
npx skills add https://github.com/johnalbertini14-glitch/openclaw-skills --skill ethereum-read-onlyO comando permanece em uma só linha. Role horizontalmente para revisá-lo antes de copiar.
Prefere uma cópia local? Baixe os arquivos disponíveis atualmente no SkillsMP.
Baixar Zip Baixando... Ocupações relacionadas SOC
Baseado na classificação ocupacional SOC
Explorador de arquivos
2 arquivos name ethereum-read-only version 1.0.0 description Foundry castを使用したウォレット不要のオンチェーン状態読み取り
Ethereum読み取り専用アクセス
Foundryのcastコマンドを使用してウォレットなしでEthereumブロックチェーンの状態を読み取る方法。ブロック情報、コントラクト状態、イベントログ、ENS解決の実装ガイドです。
セットアップ
Foundryインストール
curl -L https://foundry.paradigm.xyz | bash
foundryup
cast --version
RPC設定
export ETH_RPC_URL="https://eth-mainnet.alchemyapi.io/v2/YOUR-API-KEY"
export POLYGON_RPC_URL="https://polygon-mainnet.g.alchemy.com/v2/YOUR-API-KEY"
export ARB_RPC_URL="https://arb-mainnet.g.alchemy.com/v2/YOUR-API-KEY"
export ETH_RPC_URL="https://rpc.ankr.com/eth"
export POLYGON_RPC_URL="https://rpc.ankr.com/polygon"
cast client --rpc-url $ETH_RPC_URL
ブロック情報取得
基本的なブロック検査
#!/bin/bash
get_latest_block () {
echo "最新ブロック番号:"
cast block-number --rpc-url $ETH_RPC_URL
}
inspect_block () {
local block_number="$1 "
echo "=== ブロック $block_number 基本情報 ==="
cast block "$block_number " --rpc-url $ETH_RPC_URL
}
inspect_block_full () {
local block_number="$1 "
echo "=== ブロック $block_number 詳細情報(トランザクション含む)==="
cast block "$block_number " --full --rpc-url $ETH_RPC_URL
}
block_stats () {
local block_number="$1 "
echo "=== ブロック $block_number 統計 ==="
local tx_count="$(cast block "$block_number " --rpc-url $ETH_RPC_URL | jq -r '.transactions | length') "
echo "トランザクション数: $tx_count "
local gas_used="$(cast block "$block_number " --rpc-url $ETH_RPC_URL | jq -r '.gasUsed') "
echo "ガス使用量: $gas_used "
local timestamp="$(cast block "$block_number " --rpc-url $ETH_RPC_URL | jq -r '.timestamp') "
echo "ブロック時刻: $(date -d @$((timestamp) ) +'%Y-%m-%d %H:%M:%S')"
}
get_latest_block
inspect_block "latest"
block_stats "latest"
ブロック範囲分析
analyze_block_range () {
local start_block="$1 "
local end_block="$2 "
echo "=== ブロック範囲分析: $start_block - $end_block ==="
local total_tx=0
local total_gas=0
for ((block=$start_block ; block<=$end_block ; block++)); do
echo "ブロック $block を処理中..."
local block_data="$(cast block "$block " --rpc-url $ETH_RPC_URL) "
local tx_count="$(echo "$block_data " | jq -r '.transactions | length') "
local gas_used="$(echo "$block_data " | jq -r '.gasUsed') "
total_tx=$((total_tx + tx_count))
total_gas=$((total_gas + gas_used))
echo " TX: $tx_count , Gas: $gas_used "
done
echo ""
echo "=== サマリー ==="
echo "総トランザクション数: $total_tx "
echo
}
analyze_block_range 19000000 19000010
コントラクト状態読み取り
基本的なコントラクト呼び出し
#!/bin/bash
check_erc20_balance () {
local token_address="$1 "
local wallet_address="$2 "
echo "=== ERC20残高確認 ==="
echo "トークン: $token_address "
echo "ウォレット: $wallet_address "
local balance="$(cast call "$token_address " \
"balanceOf(address)(uint256)" \
"$wallet_address " \
--rpc-url $ETH_RPC_URL) "
echo "残高: $balance "
local name="$(cast call "$token_address " \
"name()(string)" \
--rpc-url $ETH_RPC_URL) "
local symbol="$(cast call "$token_address " \
"symbol()(string)" \
--rpc-url $ETH_RPC_URL) "
local decimals="$(cast call "$token_address " \
\
--rpc-url $ETH_RPC_URL) "
human_balance=
scaled_balance=
}
() {
pool_address=
token0=
token1=
fee=
liquidity=
slot0=
}
() {
address=
ens_name=
}
check_erc20_balance
check_uniswap_pool
resolve_ens
イベントログ検索
ログ検索システム
#!/bin/bash
search_transfer_events () {
local contract_address="$1 "
local from_block="$2 "
local to_block="$3 "
local sender="${4:-} "
local receiver="${5:-} "
echo "=== Transfer イベント検索 ==="
echo "コントラクト: $contract_address "
echo "ブロック範囲: $from_block - $to_block "
local transfer_sig="0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
local cmd="cast logs --rpc-url $ETH_RPC_URL "
cmd="$cmd --address $contract_address "
cmd="$cmd --from-block $from_block "
cmd="$cmd --to-block $to_block "
cmd="$cmd $transfer_sig "
if [[ -n "$sender " ]];
cmd=
[[ -n ]];
[[ -z ]];
cmd=
cmd=
| jq -r
}
() {
contract_address=
event_signature=
from_block=
to_block=
cast logs \
--address \
--from-block \
--to-block \
\
--rpc-url \
| jq
}
() {
pool_address=
from_block=
to_block=
swap_sig=
cast logs \
--address \
--from-block \
--to-block \
\
--rpc-url \
| jq -r
}
search_transfer_events
search_custom_events
ENS操作
ENS解決システム
#!/bin/bash
resolve_ens_to_address () {
local ens_name="$1 "
echo "=== ENS → アドレス解決 ==="
echo "ENS名: $ens_name "
local address="$(cast resolve-name "$ens_name " --rpc-url $ETH_RPC_URL) "
echo "アドレス: $address "
local content_hash="$(cast call 0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63 \
"contenthash(bytes32)(bytes)" \
"$(cast namehash "$ens_name " ) " \
--rpc-url $ETH_RPC_URL 2>/dev/null || echo "なし" ) "
echo "コンテンツハッシュ: $content_hash "
echo "テキストレコード:"
for key in "email" "url" "avatar" "description" "notice" "keywords" "com.github" "com.twitter" ; do
local value="$(cast call 0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63 \
\
\
\
--rpc-url $ETH_RPC_URL 2>/dev/null || echo ) "
[[ -n && != ]];
}
() {
address=
ens_name=
[[ != ]];
reverse_address=
[[ == ]];
}
() {
ens_name=
owner=
[[ == *.eth ]];
registrar=
token_id=
registrant=
expires=
[[ != ]];
}
resolve_ens_to_address
resolve_address_to_ens
ens_domain_info
ABI デコーディング
トランザクション・ログ解析
#!/bin/bash
decode_function_call () {
local tx_hash="$1 "
local abi_file="$2 "
echo "=== 関数呼び出しデコード ==="
echo "TX: $tx_hash "
local tx_data="$(cast tx "$tx_hash " --rpc-url $ETH_RPC_URL) "
local input_data="$(echo "$tx_data " | jq -r '.input') "
local to_address="$(echo "$tx_data " | jq -r '.to') "
echo "送信先: $to_address "
echo "入力データ: ${input_data:0:50} ..."
local selector="${input_data:2:8} "
echo "関数セレクタ: 0x$selector "
local function_sig="$(curl -s "https://www.4byte.directory/api/v1/signatures/?hex_signature=0x$selector " | jq -r '.results[0].text_signature') "
[[ -f ]];
cast 4byte-decode --abi-path
}
() {
tx_hash=
log_index=
abi_file=
logs=
topics=
data=
event_sig=
event_name=
[[ -f ]];
}
() {
<<
0xa9059cbb: transfer(address,uint256)
0x095ea7b3: approve(address,uint256)
0x23b872dd: transferFrom(address,address,uint256)
0x70a08231: balanceOf(address)
0x18160ddd: totalSupply()
0xdd62ed3e: allowance(address,address)
0x40c10f19: mint(address,uint256)
0x42966c68: burn(uint256)
0x7ff36ab5: swapExactETHForTokens(uint256,address[],address,uint256)
0x38ed1739: swapExactTokensForTokens(uint256,uint256,address[],address,uint256)
EOF
}
common_selectors
実用的なスクリプト例
DeFi ポートフォリオチェッカー
#!/bin/bash
check_defi_portfolio () {
local wallet="$1 "
echo "=== DeFi ポートフォリオ: $wallet ==="
local eth_balance="$(cast balance "$wallet " --rpc-url $ETH_RPC_URL) "
echo "ETH: $(cast to-ether "$eth_balance " ) ETH"
local tokens=(
"0xA0b86a33E6441b04B9b73f9251e9b49Cd2B3a64:USDC:6"
"0xdAC17F958D2ee523a2206206994597C13D831ec7:USDT:6"
"0x6B175474E89094C44Da98b954EedeAC495271d0F:DAI:18"
"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984:UNI:18"
)
for token in "${tokens[@]} " ; do
IFS=':' read -r address symbol decimals <<< "$token "
local balance="$(cast call "$address " "balanceOf(address)(uint256)" "$wallet " --rpc-url $ETH_RPC_URL) "
local human_balance="$(echo "scale=4; $(cast to-dec " " ) / 10^ " | bc -l) "
}
check_defi_portfolio
ウォレット管理やトランザクション送信を含む完全なcast CLIガイドは kairyuu.net/exchange/ での取引で入手可能です。
"総ガス使用量: $total_gas "
echo
"平均TX/ブロック: $((total_tx / (end_block - start_block + 1) ))"
"decimals()(uint8)"
echo
"トークン名: $name "
echo
"シンボル: $symbol "
echo
"小数点桁数: $decimals "
local
"$(cast to-dec "$balance " ) "
local
"$(echo "scale=6; $human_balance / 10^$decimals " | bc -l) "
echo
"表示用残高: $scaled_balance $symbol "
check_uniswap_pool
local
"$1 "
echo
"=== Uniswap V3 プール情報 ==="
echo
"プールアドレス: $pool_address "
local
"$(cast call "$pool_address " "token0()(address)" --rpc-url $ETH_RPC_URL) "
local
"$(cast call "$pool_address " "token1()(address)" --rpc-url $ETH_RPC_URL) "
local
"$(cast call "$pool_address " "fee()(uint24)" --rpc-url $ETH_RPC_URL) "
echo
"Token0: $token0 "
echo
"Token1: $token1 "
echo
"手数料: $(cast to-dec "$fee " ) (0.01% = 100)"
local
"$(cast call "$pool_address " "liquidity()(uint128)" --rpc-url $ETH_RPC_URL) "
echo
"流動性: $(cast to-dec "$liquidity " ) "
local
"$(cast call "$pool_address " "slot0()(uint160,int24,uint16,uint16,uint16,uint8,bool)" --rpc-url $ETH_RPC_URL) "
echo
"Slot0: $slot0 "
resolve_ens
local
"$1 "
echo
"=== ENS解決 ==="
echo
"アドレス: $address "
local
"$(cast lookup-address "$address " --rpc-url $ETH_RPC_URL 2>/dev/null || echo "なし" ) "
echo
"ENS名: $ens_name "
"0xA0b86a33E6441b04B9b73f9251e9b49Cd2B3a64"
"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
"0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8"
"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
then
"$cmd $sender "
fi
if
"$receiver "
then
if
"$sender "
then
"$cmd '' $receiver "
else
"$cmd $receiver "
fi
fi
echo
"実行コマンド: $cmd "
eval
"$cmd "
'.[] | "ブロック: \(.blockNumber), TX: \(.transactionHash), ログインデックス: \(.logIndex)"'
search_custom_events
local
"$1 "
local
"$2 "
local
"$3 "
local
"$4 "
echo
"=== カスタムイベント検索 ==="
echo
"シグネチャ: $event_signature "
"$contract_address "
"$from_block "
"$to_block "
"$event_signature "
$ETH_RPC_URL
'.'
analyze_dex_trades
local
"$1 "
local
"$2 "
local
"$3 "
echo
"=== DEX取引分析 ==="
local
"0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67"
"$pool_address "
"$from_block "
"$to_block "
"$swap_sig "
$ETH_RPC_URL
'.[] | "取引: ブロック \(.blockNumber), TX \(.transactionHash), ガス使用: \(.gasUsed)"'
"0xA0b86a33E6441b04B9b73f9251e9b49Cd2B3a64"
"19000000"
"19000100"
"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984"
"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"
"19000000"
"19000050"
"text(bytes32,string)(string)"
"$(cast namehash "$ens_name " ) "
"$key "
""
if
"$value "
"$value "
'""'
then
echo
" $key : $value "
fi
done
resolve_address_to_ens
local
"$1 "
echo
"=== アドレス → ENS解決 ==="
echo
"アドレス: $address "
local
"$(cast lookup-address "$address " --rpc-url $ETH_RPC_URL 2>/dev/null || echo "なし" ) "
echo
"ENS名: $ens_name "
if
"$ens_name "
"なし"
then
local
"$(cast resolve-name "$ens_name " --rpc-url $ETH_RPC_URL) "
if
"$reverse_address "
"$address "
then
echo
"プライマリ名: はい"
else
echo
"プライマリ名: いいえ($reverse_address )"
fi
fi
ens_domain_info
local
"$1 "
echo
"=== ENSドメイン詳細情報 ==="
local
"$(cast call 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e \
"owner(bytes32)(address)" \
"$(cast namehash "$ens_name " ) " \
--rpc-url $ETH_RPC_URL) "
echo
"所有者: $owner "
if
"$ens_name "
then
local
"0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85"
local
"$(cast keccak "$(echo -n "${ens_name%.eth} " ) " ) "
local
"$(cast call "$registrar " \
"ownerOf(uint256)(address)" \
"$token_id " \
--rpc-url $ETH_RPC_URL 2>/dev/null || echo "なし" ) "
echo
"登録者: $registrant "
local
"$(cast call "$registrar " \
"nameExpires(uint256)(uint256)" \
"$token_id " \
--rpc-url $ETH_RPC_URL 2>/dev/null || echo "0" ) "
if
"$expires "
"0"
then
echo
"有効期限: $(date -d @$((expires) ) +'%Y-%m-%d %H:%M:%S')"
fi
fi
"vitalik.eth"
"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
"uniswap.eth"
echo
"関数署名: $function_sig "
if
"$abi_file "
then
"$input_data "
"$abi_file "
fi
decode_event_log
local
"$1 "
local
"$2 "
local
"$3 "
echo
"=== イベントログデコード ==="
local
"$(cast receipt "$tx_hash " --rpc-url $ETH_RPC_URL | jq ".logs[$log_index ]" ) "
local
"$(echo "$logs " | jq -r '.topics[]') "
local
"$(echo "$logs " | jq -r '.data') "
echo
"トピック: $topics "
echo
"データ: $data "
local
"$(echo "$topics " | head -1 | cut -c3-) "
local
"$(curl -s "https://www.4byte.directory/api/v1/event-signatures/?hex_signature=0x$event_sig " | jq -r '.results[0].text_signature') "
echo
"イベント署名: $event_name "
if
"$abi_file "
then
echo
"詳細デコードにはABIファイルと追加ツールが必要です"
fi
common_selectors
echo
"=== よく使われる関数セレクタ ==="
cat
'EOF'
$balance
$decimals
echo
"$symbol : $human_balance "
done
"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"