도구스개발

솔리디티 스토리지 슬롯 계산기

솔리디티 상태변수 목록을 넣으면 32바이트 스토리지 슬롯에 어떻게 나눠 담기는지, 슬롯이 몇 개나 필요한지 계산합니다.

필요한 슬롯 수4
총 용량128바이트
쓰이지 않고 남는 바이트43바이트

슬롯 0

owner
12B 빈 공간

슬롯 1

a
b

슬롯 2

paused
31B 빈 공간

슬롯 3

total
슬롯은 32바이트, 걸쳐서 나눠 담지 않습니다. 다음 변수가 지금 슬롯에 다 안 들어가면 남은 공간을 비워두고 새 슬롯을 씁니다. 크기가 작은 변수(bool·uint8·address 등)를 서로 붙여 선언하면 슬롯 수(가스비)를 줄일 수 있습니다.

사용 방법

  1. 1상태변수를 한 줄에 "타입 이름" 형식으로 적습니다. 예: uint128 a
  2. 2선언 순서 그대로 슬롯에 채워지는 결과를 확인합니다.
  3. 3슬롯 수를 줄이고 싶으면 크기가 작은 변수끼리 붙여 선언 순서를 바꿔보세요.

자주 묻는 질문

스토리지 슬롯(32바이트) 하나를 읽고 쓰는 데 드는 가스는 슬롯 개수에 비례합니다. uint128 두 개를 나란히 선언하면 한 슬롯에 같이 들어가지만, 그 사이에 uint256을 하나 끼워 넣으면 각각 슬롯을 하나씩 새로 차지해 총 슬롯 수가 늘어납니다. 크기가 작은 변수들을 모아서 선언하면 슬롯 수(=가스비)를 줄일 수 있습니다.

bool·address·uintN·intN(N은 8~256의 8의 배수)·bytesN(N은 1~32) 같은 고정 크기 값 타입만 계산합니다. 동적 배열·매핑·string·bytes(가변 길이)는 값 자체가 슬롯에 담기는 게 아니라 keccak256 해시로 정해지는 별도 위치를 참조하는 방식이라 이 규칙이 적용되지 않고, struct·정적 배열은 내부에서 이 규칙을 재귀적으로 적용하되 그 자신은 항상 새 슬롯에서 시작해 이 도구의 범위 밖입니다.

솔리디티는 그렇게 하지 않습니다. 다음 변수가 지금 슬롯에 다 안 들어가면(예: 슬롯에 20바이트가 남았는데 32바이트짜리 uint256을 넣으려는 경우) 남은 공간을 비워두고 다음 슬롯 맨 앞부터 새로 시작합니다. 한 번의 SLOAD/SSTORE로 값 하나를 통째로 읽고 쓸 수 있게 하기 위한 규칙입니다.

고정 크기 값 타입만 순서대로 나열한 경우라면 솔리디티 컴파일러(solc)의 동작과 정확히 같습니다. 다만 상속(부모 컨트랙트의 상태변수가 먼저 슬롯을 차지)이나 struct·매핑이 섞이면 이 도구가 다루는 범위를 벗어나므로, 실제 배포 전에는 solc --storage-layout 같은 도구로 최종 확인하는 것이 안전합니다.

알아두면 좋은 점

  • Solidity 공식 문서 "Layout of State Variables in Storage" 규칙을 그대로 구현했습니다.
  • 고정 크기 값 타입만 다룹니다. 매핑·동적 배열·string·struct·상속은 범위 밖입니다.
  • 입력값은 서버로 전송되지 않습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 11일 · 결과는 참고용 추정치입니다.