Solidity 기초 및 ERC 토큰 표준
최종 수정: 2026-08-16 16:50
· admin
# Solidity 기초 및 ERC 토큰 표준
Solidity는 이더리움 가상 머신(EVM)을 타겟으로 하는 정적 타입 객체 지향 스마트 컨트랙트 프로그래밍 언어입니다.
[TOC]
---
## 1. EVM 가스 절감을 위한 Solidity 테크닉
### 1.1 스토리지 슬롯 패킹 (Struct Packing)
EVM은 256비트(32바이트) 단위로 스토리지 슬롯을 할당합니다. 변수 선언 순서에 따라 슬롯 낭비가 발생합니다.
```solidity
// 나쁜 예: 총 3개 슬롯 소모 (약 60,000 gas)
struct BadStruct {
uint128 a; // 슬롯 0 (16바이트 사용, 16바이트 낭비)
uint256 b; // 슬롯 1 (32바이트 사용)
uint128 c; // 슬롯 2 (16바이트 사용)
}
// 좋은 예: 총 2개 슬롯으로 패킹 (약 40,000 gas)
struct GoodStruct {
uint128 a; // 슬롯 0 (16바이트)
uint128 c; // 슬롯 0에 함께 패킹 (총 32바이트 채움)
uint256 b; // 슬롯 1 (32바이트)
}
```
---
## 2. ERC-20 토큰 표준 인터페이스
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
```
* **보안 주의점**: `approve` 함수를 무제한(`type(uint256).max`)으로 승인하면, 해당 디앱이 해킹당했을 때 내 지갑의 토큰이 전액 탈취될 수 있습니다.