블록체인 학습
0 XP

Wei, Gwei, Ether 단위

이더리움의 기본 화폐는 Ether(ETH) 입니다. 하지만 스마트 컨트랙트 내부에서 금액을 다룰 때는 항상 가장 작은 단위인 Wei 를 기준으로 계산합니다. Solidity 에는 소수점 타입이 없어 모든 금액을 정수로만 표현해야 하기 때문입니다.

Ether 를 실수(예: 0.5)로 다룬다면 반올림 오차가 쌓여 1원, 1전 단위에서 자금이 새어 나갈 수 있습니다. 그래서 화폐의 가장 작은 조각인 Wei 를 단위로 삼아, 정수 연산만으로 오차 없이 금액을 다룹니다.

단위 환산표

세 단위는 모두 10의 거듭제곱 관계로 연결됩니다. 1 ether 는 1 gwei 의 10억 배이고, 1 gwei 는 다시 1 wei 의 10억 배입니다.

단위Wei 환산거듭제곱
1 wei110^0
1 gwei1,000,000,000 (10억)10^9
1 ether1,000,000,000,000,000,000 (100경)10^18

Solidity 의 금액 변수는 예외 없이 모두 정수(Wei)입니다. 1 ether 라는 표기는 10^18 이라는 거대한 숫자를 사람이 읽기 쉽게 바꾼 별칭일 뿐, 새로운 타입이 아닙니다.

단위 접미사 사용하기

Solidity 는 wei, gwei, ether 라는 단위 접미사(unit suffix) 를 언어 차원에서 기본 제공합니다. 숫자 뒤에 접미사를 붙이면 컴파일 시점에 자동으로 Wei 값으로 환산되므로, 10^18 같은 숫자를 직접 적어 실수할 위험이 사라집니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
contract EtherUnits {
    uint256 public oneWei = 1 wei;       // 1
    uint256 public oneGwei = 1 gwei;     // 1_000_000_000
    uint256 public oneEther = 1 ether;   // 10^18
 
    // 단위 접미사는 컴파일 시점에 정수로 환산됩니다.
    bool public isGweiCorrect = (1 gwei == 1e9);    // true
    bool public isEtherCorrect = (1 ether == 1e18); // true
 
    // 0.5 ether 같은 값도 Wei 정수로 안전하게 표현됩니다.
    uint256 public halfEther = 0.5 ether;           // 5 * 10^17
}

가스 가격(gas price)은 보통 gwei 단위로 이야기하고("지금 가스 30 gwei"), 지갑이나 화면에 보여주는 금액은 ether 단위로 환산해 표시합니다. 컨트랙트 내부 계산은 언제나 Wei 입니다.

Code Editor
에디터를 불러오는 중...
실행 결과

Run 버튼을 눌러 코드를 실행하세요.