본문 바로가기

Blockchain

Web3j 스터디 (5) 단위 변환 (wei, gwei, eth)

1. 지갑 주소 생성 (Private Key, Public Key)
1.1 Private Key로 Public Key 추출
1.2 생성된 주소 메타마스크에 등록해보기
1.3 Private Key로 서명 생성

2. 단위 변환 (wei, gwei, eth)
2.1 wei → eth
2.2 eth → wei

 

이더리움 단위 변환 (wei, gwei, ether)

이더리움(Ethereum)에서 모든 금액은 가장 작은 단위인 wei로 처리된다.
그 이유는 컴퓨터가 소수점 계산에서 발생할 수 있는 오차를 피하기 위해서이다.
모든 계산을 정수 단위로만 수행하면 금융 연산에서의 정확성을 보장할 수 있다.

 

web3j에서는 Convert 유틸 클래스를 이용해 wei, gwei, ether 간의 단위 변환을 할 수 있다.


1. 이더리움 단위 체계

단위 설명 비율

wei 가장 작은 단위 1 wei
gwei 가스비 계산에 주로 사용 1 gwei = 10⁹ wei
ether 기본 단위 1 ether = 10¹⁸ wei

 

즉, 1 ether = 1,000,000,000 gwei = 1,000,000,000,000,000,000 wei 이다.


2. 예제 코드

package conversion;

import java.math.BigDecimal;
import org.web3j.utils.Convert;
import org.web3j.utils.Convert.Unit;

public class EtherUnitConversion {

    public static void main(String[] args) {

        // 단위 정리
        // wei : 가장 작은 단위
        // gwei : 가스비 계산에 사용 (10^9 wei)
        // ether : 기본 단위 (10^18 wei)

        // 1. wei -> gwei, wei -> eth
        BigDecimal wei1 = new BigDecimal("18000000000000000000"); // 18 ETH에 해당하는 wei
        BigDecimal gwei1 = Convert.fromWei(wei1, Unit.GWEI);
        BigDecimal eth1 = Convert.fromWei(wei1, Unit.ETHER);

        System.out.println("=== wei -> gwei, wei -> eth ===");
        System.out.println("wei1 = " + wei1);
        System.out.println("gwei1 = " + gwei1);
        System.out.println("eth1 = " + eth1);

        // 2. eth -> wei, gwei -> wei
        BigDecimal eth2 = new BigDecimal("0.39");
        BigDecimal wei2 = Convert.toWei(eth2, Unit.ETHER);
        BigDecimal gwei2 = Convert.toWei(eth2, Unit.GWEI);

        System.out.println("=== eth -> wei, gwei -> wei ===");
        System.out.println("eth2 = " + eth2);
        System.out.println("wei2 = " + wei2);
        System.out.println("gwei2 = " + gwei2);
    }
}

3. 실행 결과

=== wei -> gwei, wei -> eth ===
wei1 = 18000000000000000000
gwei1 = 18000000000
eth1 = 18

=== eth -> wei, gwei -> wei ===
eth2 = 0.39
wei2 = 390000000000000000
gwei2 = 390000000

4. wei를 사용하는 이유

이더리움은 모든 계산을 wei 단위의 정수(integer)로 처리한다.
즉, 내부적으로는 소수점이 존재하지 않는다.
이 방식은 부동소수점 연산에서 생길 수 있는 오차를 제거하기 위함이다.

예를 들어 사용자가 1.5 ETH를 전송한다고 입력하면,
내부에서는 1,500,000,000,000,000,000 wei로 변환되어 기록된다.
이렇게 하면 정밀도 손실 없이 정확한 계산이 가능하다.


5. 비트코인과의 비교

비트코인도 동일한 원리로 동작한다.
1 BTC = 10⁸ 사토시(Satoshi)이며, 이더리움의 wei와 유사한 개념이다.
즉, 비트코인은 1 BTC를 100,000,000개의 사토시로 쪼개고,
이더리움은 1 ETH를 1,000,000,000,000,000,000개의 wei로 쪼갠다.


6. 정리

이더리움 단위 변환은 가스비 계산, 트랜잭션 생성, 스마트 컨트랙트 호출 등
거의 모든 영역에서 필수적으로 사용된다.
web3j의 Convert 클래스를 사용하면 단위 변환을 간단히 수행할 수 있다.

변환 방향 메서드

wei → 다른 단위 Convert.fromWei()
다른 단위 → wei Convert.toWei()