Skills Plugins MCP Prompt Model 博客 我的中心

evm-token-decimals

EVMチェーン全体でサイレントな小数点不一致バグを防ぐ。ランタイムでの小数点照会、チェーン対応キャッシング、ブリッジドトークンの精度ドリフト、ボット・ダッシュボード・DeFiツール向けの安全な正規化をカバーします。

DeepseekModel 官方收录技能 质量 优秀 · 90 v1.0.0

获取

https://deepseekmodel.com/api/download.php?id=affaan-m-ecc-docs-ja-jp-skills-evm-token-decimals-skill-md&format=skill
下载 .skill 标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用
.skill 文件中 system_prompt 字段的实际内容。
name evm-token-decimals description EVMチェーン全体でサイレントな小数点不一致バグを防ぐ。ランタイムでの小数点照会、チェーン対応キャッシング、ブリッジドトークンの精度ドリフト、ボット・ダッシュボード・DeFiツール向けの安全な正規化をカバーします。 origin ECC direct-port adaptation version 1.0.0 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ではなく Decimal 、 BigInt 、または同等の正確な数学を使用する ブリッジングやラッパーの変更後は小数点を再照会する 比較や価格計算の前に内部会計を一貫して正規化する
Agent 识别该技能的关键词,点击任意一个即可复制。

该技能未提供触发词。

下载的 .skill 包内含以下字段。
字段 说明
format格式标识(skill/v1)
skill_id技能唯一 ID
name技能名称
version版本号
description技能描述
category所属分类(数组)
trigger_words触发词列表
tags标签列表
source来源标识
source_url来源链接(本页地址)
exported_at导出时间(每次下载生成)
system_prompt系统提示词正文
model_config模型参数:provider / model / temperature / max_tokens / top_p
examples示例
install_guide各平台导入说明(Coze / Dify / Claude / 自定义框架)
同一份技能可按不同平台格式导出。
.skill 标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用 下载
.skillpro 增强格式,额外含脚本 / 工具 / 依赖 / 钩子占位 下载
.json 纯 JSON 导出,只含 system_prompt 与模型参数 下载
Coze 带 frontmatter 的 Markdown,Coze 平台导入用 下载
Dify Dify DSL,创建应用后直接导入 下载

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

验证码 --

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。