Solidity 기초 및 ERC 토큰 표준
Solidity 기초 및 ERC 토큰 표준
Solidity는 이더리움 가상 머신(EVM)을 타겟으로 하는 정적 타입 객체 지향 스마트 컨트랙트 프로그래밍 언어입니다.
내용
1. EVM 가스 절감을 위한 Solidity 테크닉
1.1 스토리지 슬롯 패킹 (Struct Packing)
EVM은 256비트(32바이트) 단위로 스토리지 슬롯을 할당합니다. 변수 선언 순서에 따라 슬롯 낭비가 발생합니다.
// 나쁜 예: 총 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 토큰 표준 인터페이스
// 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)으로 승인하면, 해당 디앱이 해킹당했을 때 내 지갑의 토큰이 전액 탈취될 수 있습니다.