블록체인 학습
0 XP

주소형: address

address 는 이더리움 계정 주소를 저장하는 타입입니다. 20바이트(16진수 40자리) 값으로, 사용자의 지갑 주소나 다른 스마트 컨트랙트의 주소를 가리킵니다. 블록체인에서 "누가" 또는 "어디로"를 표현하는 가장 기본적인 타입이라, 권한 관리·송금·토큰 소유 추적 등 거의 모든 컨트랙트에 등장합니다. 초기화하지 않은 address 의 기본값은 영주소 0x0000...0000 이며, 영주소(address(0))는 "주인이 없음"을 뜻하는 특별한 값으로 자주 활용됩니다.

address payable 은 Ether 를 받을 수 있는 주소입니다. 일반 address 와 달리 transfer, send 같은 송금 멤버를 사용할 수 있고, Ether 를 보내려면 payable(addr) 로 변환해야 합니다.

다만 실제 송금에는 가스 제한 문제로 transfer/send 대신 call{value: amount}("") 를 쓰는 것이 현재 권장 방식입니다(Chapter 12에서 자세히 다룹니다).

주요 멤버

address 타입에는 계정 정보를 조회하는 멤버들이 내장되어 있습니다.

  • .balance : 해당 주소가 보유한 Ether 잔액(wei 단위, uint256)
  • .code / .codehash : 그 주소에 배포된 컨트랙트 코드 관련 정보

전역 변수 msg.sender

함수 안에서 자주 쓰는 msg.sender 는 지금 이 함수를 호출한 계정의 주소입니다. "이 작업을 누가 요청했는가"를 알 수 있으므로, 소유자 확인이나 권한 검사의 출발점이 됩니다. 앞으로 배울 require(msg.sender == owner) 같은 접근 제어가 모두 여기서 시작됩니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
contract AddressExample {
    address public owner = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
 
    function ownerBalance() public view returns (uint256) {
        return owner.balance; // owner 주소의 Ether 잔액(wei)
    }
 
    function whoCalled() public view returns (address) {
        return msg.sender; // 이 함수를 호출한 주소
    }
}

코드에 직접 적는 40자리 주소 리터럴은 대소문자를 섞어 쓰든 전부 소문자로 쓰든, EIP-55 체크섬(checksum)이 맞지 않으면 컴파일 오류가 납니다. 이때 컴파일러가 올바른 형태를 알려주니 그 값을 그대로 쓰면 됩니다.

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

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