본문 바로가기

Blockchain

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

- 네트워크: BSC Testnet
- 체인 ID: 97

---

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()