주소형: 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)이 맞지 않으면 컴파일 오류가 납니다. 이때 컴파일러가 올바른 형태를 알려주니 그
값을 그대로 쓰면 됩니다.