﻿---
title: "토큰 소수 자릿수 검증 방법"
description: "올바른 컨트랙트와 블록에서 ERC-20 decimals를 확인하고 부동소수점 오류 없이 원시 잔액, 전송, 승인, 브리지 변환을 대조합니다."
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 토큰 소수 자릿수 검증 방법

> 교육 목적의 정보이며 투자 또는 보안 조언이 아닙니다. 소수 자릿수는 토큰의 신원, 가치, 준비금 또는 안전성을 증명하지 않습니다.

<a id="answer"></a>

## 직접 답변

ERC-20 토큰의 `decimals()`는 정수 토큰 단위를 인터페이스에 어떻게 표시할지 알려 주는 선택적 메타데이터입니다. 반환값이 `d`이면 일반적인 표시 금액은 `raw / 10^d`입니다. 이 값은 컨트랙트 연산을 바꾸지 않으며 토큰을 인증하지도 않습니다. 결과를 신뢰하기 전에 체인, 정확한 컨트랙트 주소, 코드 또는 프록시 구현, 블록을 확인해야 합니다.

지정한 블록에서 독립 RPC를 통해 `decimals()`를 직접 읽고 반환값을 ABI에 따라 `uint8`로 디코딩한 뒤 발행자의 공식 컨트랙트 목록 및 신뢰할 수 있는 탐색기와 비교합니다. 이어 원시 `balanceOf`, 전송, 승인, 영수증, 이벤트 값으로 배율을 시험합니다. 호출이 없거나 되돌려지거나 잘못된 데이터를 반환하거나 다른 증거와 충돌할 때 `18`을 조용히 가정하면 안 됩니다.

<a id="mechanism"></a>

## 작동 원리

ERC-20은 부호 없는 정수 금액을 저장하고 전송합니다. 소수점을 삽입하는 것은 표시 계층이며 컨트랙트는 여전히 정수를 받습니다. 사용자 입력은 십진 문자열 또는 임의 정밀도 정수 연산으로 변환하고 이진 부동소수점은 사용하지 않습니다. `10^d`를 곱한 결과가 정수일 때만 표현 가능한 수량입니다.

`decimals()`는 선택 사항이므로 규격을 따르는 토큰도 이를 생략할 수 있습니다. 사용자 정의 또는 업그레이드 가능 구현은 예상 밖의 값을 반환하거나 업그레이드 후 동작이 달라질 수 있습니다. ERC-1967 프록시는 프록시 주소, 구현 또는 비콘, 관리자, 업그레이드 이벤트를 검사합니다. 토큰 상태는 프록시 주소에서 읽고 모든 비교를 같은 블록에 고정합니다.

Allowance와 ERC-2612 `permit` 값도 원시 정수입니다. 전송 표시가 정확해도 승인, 라우터 최소 금액, 브리지 금액 또는 회계 데이터베이스가 같은 배율을 사용했다는 뜻은 아닙니다. 브리지의 출발지와 목적지 컨트랙트는 서로 다른 소수 자릿수를 쓸 수 있으므로 문서화된 변환 및 반올림 규칙에 따라 양쪽의 표시 가치와 원시 단위를 비교합니다.

다음 절차를 사용합니다.

1. 체인 ID 또는 도메인, 토큰 컨트랙트, 블록 번호, RPC 엔드포인트, 관찰 시간을 고정합니다.
2. 발행자의 공식 목록에서 주소를 확인하고 이름, 심볼, 아이콘, 검색 결과는 권위 있는 증거로 취급하지 않습니다.
3. 배포된 코드와 프록시 여부를 확인하고 구현 또는 비콘, 관리자, 최근 업그레이드를 기록합니다.
4. `decimals()`를 호출하고 ABI에 따라 `uint8`을 디코딩합니다. 기본값을 대신 넣지 말고 성공, 되돌림, 빈 값, 잘못된 출력을 기록합니다.
5. 호환되는 블록에서 원시 `balanceOf`, `totalSupply`, allowance, 트랜잭션 calldata, 영수증, 이벤트를 읽고 확인한 배율로 표시합니다.
6. 수수료, 반올림, 자투리, 리베이스, 전송세를 포함해 전송, 승인, 견적, 브리지 금액을 정수 연산으로 다시 계산합니다.
7. 시뮬레이션 후 소액 트랜잭션을 보내고 전후 원시 잔액을 대조합니다. 인터페이스, RPC, 이벤트, 잔액 중 하나라도 다르면 중단합니다.

<a id="example"></a>

## 예시

- **하나의 원시 값과 두 배율.** `raw = 123456789`일 때 `d = 6`은 `123.456789`, `d = 18`은 `0.000000000123456789`로 표시하며 차이는 `10^12`배입니다.
- **표현 가능성이 중요합니다.** `d = 6`이면 `1.25` 토큰은 원시 단위 `1250000`입니다. `0.0000001` 토큰은 원시 단위 하나보다 작으므로 거부하거나 명시된 규칙으로 반올림해야 합니다.
- **승인 배율 불일치.** `d = 6`에서 `100` 토큰의 allowance는 `100000000`입니다. `d = 18`로 인코딩하면 `100000000000000000000`이 되어 의도보다 `10^12`배 큰 승인액이 됩니다.
- **브리지 재조정.** 문서화된 `1:1` 경로가 `d = 6`인 출발지 토큰을 `d = 18`인 목적지 표시로 바꾼다면 출발지 원시값 `2500000`은 `2.5` 토큰이고 목적지 원시값 `2500000000000000000`도 `2.5`입니다. 수수료, 한도, 자투리, 실제 수령 잔액은 별도로 확인해야 합니다.

<a id="risks"></a>

## 위험

- 올바른 주소를 잘못된 체인에서 조회합니다.
- 복제된 이름, 심볼 또는 아이콘이 다른 컨트랙트를 숨깁니다.
- 이전 확인 뒤 프록시 구현 또는 비콘이 바뀝니다.
- RPC나 탐색기가 오래되거나 최종 확정되지 않았거나 일치하지 않는 상태를 제공합니다.
- 누락되거나 잘못된 메타데이터가 조용히 `18`로 대체됩니다.
- 이진 부동소수점 변환이 크거나 정밀한 금액을 반올림합니다.
- 지갑이 전송은 정확히 표시하지만 allowance나 permit은 잘못 표시합니다.
- 데이터베이스가 원시 단위와 사람이 읽는 금액을 섞습니다.
- 브리지가 같은 소수 자릿수를 가정하거나 자투리 반올림을 공개하지 않습니다.
- 전송 수수료, 리베이스, 발행, 소각, 일시 정지, 동결이 단순 대조를 깨뜨립니다.
- 트랜잭션 calldata, 이벤트, 영수증, 실제 잔액 변화가 일치하지 않습니다.
- 소수 자릿수 확인을 발행자, 준비금, 유동성 또는 안전성의 증명으로 오해합니다.

<a id="misconceptions"></a>

## 흔한 오해

- **모든 ERC-20 토큰의 소수 자릿수는 `18`입니다.** 메타데이터는 선택 사항이며 구현은 다른 값을 반환할 수 있습니다.
- **소수 자릿수는 EVM이 쓰는 정밀도 비트입니다.** 십진수 표시 규칙일 뿐 토큰 연산은 정수 연산입니다.
- **탐색기의 형식화된 잔액은 독립적인 확인입니다.** 같은 메타데이터 호출에 의존하여 같은 오류를 공유할 수 있습니다.
- **심볼과 소수 자릿수가 같으면 같은 자산입니다.** 올바른 체인, 정확한 컨트랙트, 발행자 증거도 필요합니다.
- **소액 전송 성공으로 모든 통합이 검증됩니다.** 승인, 라우터, 브리지, 거래소, 회계 시스템은 금액을 각각 조정할 수 있습니다.

<a id="related"></a>

## 관련 주제

- [토큰 컨트랙트 검증](/crypto/token-contract-verification/)
- [지갑 calldata 디코딩](/crypto/calldata-decoding-wallet/)
- [브리지 토큰 검증](/crypto/bridge-token-verification/)
- [전송 수수료 토큰 위험](/crypto/fee-on-transfer-token-risk/)
- [프록시 컨트랙트](/crypto/proxy-contract/)

<a id="sources"></a>

## 출처

- [ERC-20: Token Standard](https://eips.ethereum.org/EIPS/eip-20) - Ethereum Improvement Proposals (접근일: 2026-08-21)
- [ERC-20](https://docs.openzeppelin.com/contracts/5.x/erc20) - OpenZeppelin Docs (접근일: 2026-08-21)
- [JSON-RPC API](https://ethereum.org/developers/docs/apis/json-rpc/) - ethereum.org (접근일: 2026-08-21)
- [ERC-1967: Proxy Storage Slots](https://eips.ethereum.org/EIPS/eip-1967) - Ethereum Improvement Proposals (접근일: 2026-08-21)
- [ERC-2612: Permit Extension for EIP-20 Signed Approvals](https://eips.ethereum.org/EIPS/eip-2612) - Ethereum Improvement Proposals (접근일: 2026-08-21)

Source: https://wiki.fcontext.com/ko/crypto/token-decimals-verification/index.mdx
