Statute of Limitations Reference
관할권/청구 유형별 소멸시효 조회 도구
bool
Boolean type, true or false.
bool public myBool = true;uint / int
Unsigned and signed integers. uint is alias for uint256 (8 to 256 bits in steps of 8).
uint256 public count = 0;
int256 public balance = -1;address
Holds a 20-byte Ethereum address. payable variant can receive Ether.
address public owner = msg.sender;
address payable recipient;bytes / string
Fixed-size byte arrays (bytes1..bytes32) and dynamic string type.
bytes32 public data;
string public name = "hello";enum
User-defined type with a finite set of constant values.
enum Status { Active, Paused, Stopped }
Status public status = Status.Active;array
Dynamic and fixed-size arrays. Supports push, pop, length.
uint[] public dynamicArr;
uint[5] public fixedArr;mapping
Hash table mapping keys to values. Cannot be iterated.
mapping(address => uint) public balances;struct
Custom composite type grouping variables together.
struct User {
address addr;
uint balance;
}function
Basic function declaration with visibility, mutability, and return type.
function foo(uint x) public pure returns (uint) {
return x * 2;
}view / pure
view reads state but does not modify. pure neither reads nor modifies state.
function getVal() public view returns (uint) { ... }
function calc(uint a) public pure returns (uint) { ... }payable
Functions that can receive Ether. Access amount via msg.value.
function deposit() public payable {
// msg.value available
}receive / fallback
receive is called on plain Ether transfers. fallback handles unknown function calls.
receive() external payable { }
fallback() external payable { }constructor
Runs once on contract deployment. Cannot be called afterward.
constructor(uint _val) {
owner = msg.sender;
}modifier
Reusable precondition checks. _; marks where function body runs.
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
function foo() public onlyOwner { ... }Visibility
public: accessible everywhere. private: current contract only. internal: current + derived. external: only from outside.
public / private / internal / externalevent
Logs stored on blockchain. indexed params are searchable. Up to 3 indexed.
event Transfer(address indexed from, address indexed to, uint amount);
emit Transfer(msg.sender, to, amount);error / require / revert
Custom errors (0.8.4+). require for inline checks. revert for explicit abort.
error InsufficientBalance(uint available, uint required);
require(bal >= amt, "Low balance");
revert InsufficientBalance(bal, amt);inheritance
Single and multiple inheritance. Use virtual/override for polymorphism.
contract Child is Parent {
function foo() public override { ... }
}interface
Abstract contract with no implementation. All functions external.
interface IERC20 {
function totalSupply() external view returns (uint);
}abstract
Contract with at least one unimplemented function.
abstract contract Base {
function foo() public virtual;
}library
Stateless reusable code. Cannot hold state or receive Ether.
library SafeMath {
function add(uint a, uint b) internal pure returns (uint) { ... }
}
using SafeMath for uint;msg
Properties of the current message call.
msg.sender // caller address
msg.value // Ether sent (wei)
msg.data // calldata bytesblock
Properties of the current block.
block.timestamp // current block time
block.number // current block number
block.chainid // chain IDtx
Transaction-level properties. Avoid tx.origin for auth.
tx.origin // original sender
tx.gaspriceStatute of Limitations Reference 소개
Solidity 레퍼런스는 이더리움 블록체인과 EVM 호환 네트워크에서 탈중앙화 애플리케이션을 구축하는 데 사용되는 Solidity 스마트 컨트랙트 프로그래밍 언어의 핵심 구문과 패턴을 다루는 검색 가능한 치트 시트입니다. 데이터 타입(bool, uint/int, address, bytes/string, enum, array, mapping, struct), 함수(함수 선언, view/pure, payable, receive/fallback, constructor), 수정자(modifier 키워드, 가시성: public/private/internal/external), 이벤트와 에러(event, 커스텀 에러, require, revert), 상속과 인터페이스(상속, interface, abstract contract, library), 전역 변수(msg, block, tx) 등 6개 카테고리로 구성되어 있습니다.
이 레퍼런스는 주로 DeFi 프로토콜, NFT 컬렉션, DAO 등 Web3 애플리케이션을 위한 Solidity 컨트랙트를 작성하거나 감사하는 블록체인 개발자들이 사용합니다. Solidity를 처음 접하는 개발자들은 payable 함수 작성법, 접근 제어용 modifier 사용법, indexed 매개변수가 있는 이벤트 발행, ERC-20 인터페이스 구현 등 일반적인 패턴의 구문을 빠르게 찾아볼 때 활용합니다. 시니어 개발자와 감사자들도 tx.origin vs msg.sender 같은 보안에 민감한 패턴의 올바른 사용을 검증하는 데 사용합니다.
기술적으로 이 레퍼런스는 항목 이름, 설명 텍스트, 실제 Solidity 코드 구문에 대해 전문 텍스트 검색을 제공합니다. "payable"이나 "indexed" 같은 코드 키워드를 검색하면 관련 항목이 즉시 표시됩니다. 카테고리는 기본적으로 모두 펼쳐진 아코디언 섹션으로 구성되어 있습니다. 각 항목은 항목 이름, 평이한 언어 설명, JavaScript 하이라이팅을 사용하는 CodeBlock 컴포넌트의 구문 강조 코드 블록으로 표시됩니다.
주요 기능
- 25개 이상의 개별 참조 항목이 포함된 6개 주요 Solidity 주제 카테고리 수록
- 항목 이름, 설명, 코드 구문 예제에 대한 전문 텍스트 검색
- 기본적으로 모두 펼쳐진 축소 가능한 카테고리 섹션으로 빠른 탐색
- CodeBlock 컴포넌트를 사용한 모든 항목의 구문 강조 코드 블록
- 커스텀 에러(0.8.4부터 지원하는 error/revert)를 포함한 Solidity 0.8.x 패턴 수록
- 보안 관련 패턴 문서화: msg.sender vs tx.origin, payable 주소
- using-for 구문과 함께 library 패턴 포함
- 모든 기기에서 코딩 세션에 적합한 다크 모드 지원 및 반응형 레이아웃
자주 묻는 질문
이 레퍼런스는 어떤 버전의 Solidity를 다루나요?
커스텀 에러(0.8.4부터 사용 가능한 error 키워드)를 포함한 Solidity 0.8.x 구문과 패턴을 주로 다룹니다. 대체된 레거시 패턴은 포함되지 않습니다.
view 함수와 pure 함수의 차이는 무엇인가요?
view 함수는 블록체인의 상태 변수를 읽을 수 있지만 수정하지 않습니다(예: 사용자 잔액 반환). pure 함수는 상태를 읽지도 수정하지도 않으며, 입력 인수에 대해서만 동작합니다(계산이나 유틸리티 함수 등). view와 pure 함수는 외부에서(오프체인) 호출할 때 가스 비용이 발생하지 않습니다.
receive()와 fallback()의 차이는 무엇인가요?
receive()는 컨트랙트가 calldata 없이 이더를 직접 수신할 때 호출됩니다. fallback()은 다른 함수와 일치하지 않는 호출이 있을 때 호출되며, payable로 표시하면 이더도 처리할 수 있습니다. 컨트랙트가 이더를 수신해야 한다면 최소한 payable receive() 함수가 필요합니다.
인증에 tx.origin을 사용하면 안 되는 이유는 무엇인가요?
tx.origin은 전체 트랜잭션 체인을 시작한 최초의 외부 소유 계정을 가리킵니다. 악의적인 컨트랙트가 내 컨트랙트를 속여 자신을 호출하게 만들면, tx.origin은 여전히 무고한 사용자를 가리켜 인증 검사를 우회합니다. 직접 호출자만을 가리키는 msg.sender를 항상 인증에 사용해야 합니다.
internal과 private 가시성의 차이는 무엇인가요?
두 가시성 모두 외부 컨트랙트의 접근을 제한합니다. private은 함수나 변수를 정의한 컨트랙트 내에서만 접근할 수 있으며, 파생(상속) 컨트랙트도 호출할 수 없습니다. internal은 정의한 컨트랙트와 이를 상속받은 컨트랙트 모두에서 접근할 수 있습니다.
커스텀 에러란 무엇이며 require 문자열 대신 사용해야 하는 이유는 무엇인가요?
커스텀 에러(Solidity 0.8.4에서 도입)는 error 키워드를 사용해 매개변수가 있는 타입화된 에러를 정의하고 revert로 발생시킬 수 있습니다. 에러 시그니처가 4바이트에 불과한 반면 문자열은 전체가 저장되므로, 문자열이 있는 require보다 가스 효율이 높습니다. 또한 에러 컨텍스트와 함께 구조화된 데이터를 전달할 수 있습니다.
Solidity에서 mapping과 array의 차이는 무엇인가요?
mapping은 키를 값에 매핑하는 해시 테이블입니다(예: address → uint). mapping은 반복 순회가 불가능하며 모든 값은 기본적으로 0입니다. array는 순서가 있는 목록으로 동적(push/pop 가능)이거나 고정 크기일 수 있습니다. array는 반복 순회가 가능하지만 동적 배열은 커질수록 가스 비용이 증가합니다. O(1) 조회에는 mapping을, 반복이 필요할 때는 array를 선택하세요.
Solidity library란 무엇이며 언제 사용해야 하나요?
library는 상태를 보유하거나 이더를 수신할 수 없는 무상태 재사용 가능 코드 컨트랙트입니다. 수학 연산이나 타입 변환 같은 유틸리티 함수를 여러 컨트랙트에서 공유하기 위해 사용됩니다. using...for 구문과 함께 사용하면 라이브러리 함수를 대상 타입의 메서드처럼 호출할 수 있습니다(예: SafeMath for uint 사용 시 myUint.add(other)).