Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
affaan-m avatar

Evm Token Decimals

  • 4k installs
  • 238k repo stars
  • Updated August 5, 2026
  • affaan-m/everything-claude-code

evm-token-decimals is an agent skill for prevent silent decimal mismatches across evm chains with runtime queries, caching, and bridge drift checks.

About

The evm-token-decimals skill EVMチェーン全体でサイレントな小数点不一致バグを防ぐ。ランタイムでの小数点照会、チェーン対応キャッシング、ブリッジドトークンの精度ドリフト、ボット・ダッシュボード・DeFiツール向けの安全な正規化をカバーします。. サイレントな小数点不一致は、エラーを発生させることなく残高やUSD値が桁違いになる最も簡単な方法のひとつです。 - Python、TypeScript、またはSolidityでERC-20残高を読み取る場合 - オンチェーン残高から法定通貨の値を計算する場合 - 複数のEVMチェーン間でトークン量を比較する場合 - ブリッジされた資産を扱う場合 - ポートフォリオトラッカー、ボット、またはアグリゲーターを構築する場合 ステーブルコインが同じ小数点を使用していると仮定しないでください。ランタイムでdecimals()を照会し、(chain_id, token_address)でキャッシュし、値の計算には小数点安全な数学を使用します。 ```python from decimal import Decimal from web3 import Web3 python from decimal import Decimal from web3 import Web3 ERC20_ABI = [ {"name": "decimals", "type": "function", "inputs": [], "outputs": [{"type": "uint8"}], "stateMutability": "view"}, {"name": "balanceOf", "type": "function", "inputs": [{"name": "account", "type": "address"}], "outputs": [{"type": "uint256"}], "stateMutability": "view"}, ] def get_token_balance(w3: Web3, token_address: str, wallet: str) - Decimal: contract = w3.eth.contract( address=Web3.to_checksum_address(token_address), abi=ERC20_ABI, ) decimals = contract.functions.decimals().call() raw = contract.functions.balanceOf(Web3.to_checksum_address(wallet)).call() return Decimal(raw) / Decimal(10 decimals).

  • Python、TypeScript、またはSolidityでERC-20残高を読み取る場合
  • オンチェーン残高から法定通貨の値を計算する場合
  • 複数のEVMチェーン間でトークン量を比較する場合
  • ポートフォリオトラッカー、ボット、またはアグリゲーターを構築する場合
  • 常にランタイムでdecimals()を照会する

Evm Token Decimals by the numbers

  • 4,039 all-time installs (skills.sh)
  • +216 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #10 of 479 Web3 & Blockchain skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

evm-token-decimals capabilities & compatibility

Capabilities
python、typescript、またはsolidityでerc 20残高を読み取る場合 · オンチェーン残高から法定通貨の値を計算する場合 · 複数のevmチェーン間でトークン量を比較する場合 · ポートフォリオトラッカー、ボット、またはアグリゲーターを構築する場合 · 常にランタイムでdecimals()を照会する
Use cases
api development · security audit
From the docs

What evm-token-decimals says it does

{"name": "decimals", "type": "function", "inputs": [],
SKILL.md
"outputs": [{"type": "uint8"}], "stateMutability": "view"},
SKILL.md
"inputs": [{"name": "account", "type": "address"}],
SKILL.md
npx skills add https://github.com/affaan-m/everything-claude-code --skill evm-token-decimals

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs4k
repo stars238k
Security audit3 / 3 scanners passed
Last updatedAugust 5, 2026
Repositoryaffaan-m/everything-claude-code

How do I prevent silent decimal mismatches across evm chains with runtime queries, caching, and bridge drift checks with documented agent guidance?

Prevent silent decimal mismatches across EVM chains with runtime queries, caching, and bridge drift checks.

Who is it for?

Developers who need web3 & blockchain help during build work.

Skip if: Skip when the task falls outside Web3 & Blockchain scope described in SKILL.md.

When should I use this skill?

Prevent silent decimal mismatches across EVM chains with runtime queries, caching, and bridge drift checks.

What you get

Completed web3 & blockchain workflow aligned with SKILL.md steps and validation.

  • Normalized balance calculations
  • Chain-aware decimal lookup logic

By the numbers

  • Python、TypeScript、またはSolidityでERC-20残高を読み取る場合
  • オンチェーン残高から法定通貨の値を計算する場合
  • 複数のEVMチェーン間でトークン量を比較する場合

Files

SKILL.mdMarkdownGitHub ↗

EVMトークン小数点

サイレントな小数点不一致は、エラーを発生させることなく残高やUSD値が桁違いになる最も簡単な方法のひとつです。

使用するタイミング

  • Python、TypeScript、またはSolidityでERC-20残高を読み取る場合
  • オンチェーン残高から法定通貨の値を計算する場合
  • 複数のEVMチェーン間でトークン量を比較する場合
  • ブリッジされた資産を扱う場合
  • ポートフォリオトラッカー、ボット、またはアグリゲーターを構築する場合

仕組み

ステーブルコインが同じ小数点を使用していると仮定しないでください。ランタイムでdecimals()を照会し、(chain_id, token_address)でキャッシュし、値の計算には小数点安全な数学を使用します。

使用例

ランタイムで小数点を照会する

from decimal import Decimal
from web3 import Web3

ERC20_ABI = [
    {"name": "decimals", "type": "function", "inputs": [],
     "outputs": [{"type": "uint8"}], "stateMutability": "view"},
    {"name": "balanceOf", "type": "function",
     "inputs": [{"name": "account", "type": "address"}],
     "outputs": [{"type": "uint256"}], "stateMutability": "view"},
]

def get_token_balance(w3: Web3, token_address: str, wallet: str) -> Decimal:
    contract = w3.eth.contract(
        address=Web3.to_checksum_address(token_address),
        abi=ERC20_ABI,
    )
    decimals = contract.functions.decimals().call()
    raw = contract.functions.balanceOf(Web3.to_checksum_address(wallet)).call()
    return Decimal(raw) / Decimal(10 ** decimals)

シンボルが他の場所で通常6小数点を持つからといって1_000_000をハードコードしないでください。

チェーンとトークンでキャッシュする

from functools import lru_cache

@lru_cache(maxsize=512)
def get_decimals(chain_id: int, token_address: str) -> int:
    w3 = get_web3_for_chain(chain_id)
    contract = w3.eth.contract(
        address=Web3.to_checksum_address(token_address),
        abi=ERC20_ABI,
    )
    return contract.functions.decimals().call()

特殊なトークンを防御的に処理する

try:
    decimals = contract.functions.decimals().call()
except Exception:
    logging.warning(
        "decimals() reverted on %s (chain %s), defaulting to 18",
        token_address,
        chain_id,
    )
    decimals = 18

フォールバックをログに記録して可視化しておく。古いまたは非標準トークンはまだ存在します。

SolidityでWAD(18小数点)に正規化する

interface IERC20Metadata {
    function decimals() external view returns (uint8);
}

function normalizeToWad(address token, uint256 amount) internal view returns (uint256) {
    uint8 d = IERC20Metadata(token).decimals();
    if (d == 18) return amount;
    if (d < 18) return amount * 10 ** (18 - d);
    return amount / 10 ** (d - 18);
}

ethersを使ったTypeScript

import { Contract, formatUnits } from 'ethers';

const ERC20_ABI = [
  'function decimals() view returns (uint8)',
  'function balanceOf(address) view returns (uint256)',
];

async function getBalance(provider: any, tokenAddress: string, wallet: string): Promise<string> {
  const token = new Contract(tokenAddress, ERC20_ABI, provider);
  const [decimals, raw] = await Promise.all([
    token.decimals(),
    token.balanceOf(wallet),
  ]);
  return formatUnits(raw, decimals);
}

クイックなオンチェーン確認

cast call <token_address> "decimals()(uint8)" --rpc-url <rpc>

ルール

  • 常にランタイムでdecimals()を照会する
  • シンボルではなく、チェーンとトークンアドレスでキャッシュする
  • floatではなくDecimalBigInt、または同等の正確な数学を使用する
  • ブリッジングやラッパーの変更後は小数点を再照会する
  • 比較や価格計算の前に内部会計を一貫して正規化する

Related skills

Forks & variants (1)

Evm Token Decimals has 1 known copy in the catalog totaling 1.4k installs. They canonicalize to this original listing.

How it compares

evm-token-decimals is an agent skill for prevent silent decimal mismatches across evm chains with runtime queries, caching, and bridge drift checks, not a generic alternative.

FAQ

Who is evm-token-decimals for?

Developers using Web3 & Blockchain workflows with agent-guided SKILL.md steps.

When should I use evm-token-decimals?

Prevent silent decimal mismatches across EVM chains with runtime queries, caching, and bridge drift checks.

Is evm-token-decimals safe to install?

Review the Security Audits panel on this page before installing in production.

Web3 & Blockchainbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.