Web3 & DApp Development Fundamentals · 강의

OpenZeppelin을 사용하는 이유

실전에서 검증된 코드

레슨 1/413개 단계

OpenZeppelin을 사용하는 이유은(는) CoddyKit의 무료 Web3 & DApp Development Fundamentals 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Web3 & DApp Development Fundamentals 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Web3 & DApp Development Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.

이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.

What Is OpenZeppelin

OpenZeppelin Contracts is a library of secure, reusable smart contract building blocks for Solidity.

  • Implements common standards (ERC-20, ERC-721, ERC-1155).
  • Provides access control, security, and utility modules.
  • Is audited and widely used across production protocols.

Why Not Write It Yourself

Reimplementing token standards by hand is risky:

  • Subtle bugs in arithmetic or approvals can drain funds.
  • Standards have edge cases easy to miss.
  • Custom code is unaudited and untested by the community.

Reusing battle-tested code lets you focus on your unique logic.

Installing the Library

Add OpenZeppelin Contracts as a dependency:

npm install @openzeppelin/contracts

It installs into node_modules, and Hardhat resolves imports from there automatically.

npm install @openzeppelin/contracts

Importing Contracts

Import the modules you need by their package path:

// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

The path mirrors the library's folder structure (token, access, security, utils).

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

Inheriting a Standard

You build your contract by inheriting from a base. An ERC-20 token in just a few lines:

contract MyToken is ERC20 { constructor() ERC20("MyToken", "MTK") { _mint(msg.sender, 1000000 * 10 ** decimals()); } }

All transfer, approval, and balance logic is inherited.

contract MyToken is ERC20 {
    constructor() ERC20("MyToken", "MTK") {
        _mint(msg.sender, 1000000 * 10 ** decimals());
    }
}

Overriding Behavior

You can customize inherited functions by overriding them, while still calling the parent with super:

function transfer(address to, uint256 amount) public override returns (bool) { require(to != address(0), "No zero address"); return super.transfer(to, amount); }
function transfer(address to, uint256 amount)
    public override returns (bool) {
    require(to != address(0), "No zero address");
    return super.transfer(to, amount);
}

The Module Categories

OpenZeppelin is organized into areas:

  • token/ — ERC-20, ERC-721, ERC-1155 implementations.
  • access/ — Ownable, AccessControl.
  • security/ — ReentrancyGuard, Pausable.
  • utils/ — math, strings, cryptography helpers.

The Wizard

OpenZeppelin offers a web-based Contracts Wizard that generates a starter contract from checkboxes — pick the standard, toggle mintable, pausable, or access control, and copy the code.

It is a great way to scaffold a correct base before customizing.

Audited and Versioned

OpenZeppelin releases are audited and follow semantic versioning. Pin a version in package.json so a major upgrade does not silently change behavior:

"@openzeppelin/contracts": "^5.0.0"

Read the migration guide before bumping major versions.

"@openzeppelin/contracts": "^5.0.0"

Not a Silver Bullet

OpenZeppelin secures the building blocks, but your logic still needs review:

  • Inheriting securely written code does not make custom functions safe.
  • Misconfiguration (wrong roles, missing checks) can still create holes.

Always test and, for high-value contracts, get an audit.

Contracts vs Contracts-Upgradeable

OpenZeppelin ships two packages:

  • @openzeppelin/contracts — standard contracts with normal constructors.
  • @openzeppelin/contracts-upgradeable — the same modules adapted for proxies, using initializers.

Pick the upgradeable variant only if you actually deploy behind a proxy.

Quick Check

Test your understanding of why teams use OpenZeppelin.

Recap

You learned why OpenZeppelin is the standard library for Solidity.

  • It offers audited, reusable implementations of token standards and security modules.
  • Install with npm and inherit base contracts like ERC20.
  • Override functions with super to customize behavior.
  • Modules cover token, access, security, and utils; the Wizard scaffolds code.
  • Pin versions and still test your own logic — it is not a silver bullet.
무료로 시작

AI 튜터와 함께 Web3 & DApp Development Fundamentals을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
29
레슨
105

자주 묻는 질문

“OpenZeppelin을 사용하는 이유” 강의는 무료인가요?

네 — “OpenZeppelin을 사용하는 이유” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Web3 & DApp Development Fundamentals 강의 전체를 잠금 해제할 수 있습니다. Web3 & DApp Development Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.

“OpenZeppelin을 사용하는 이유”에서 뭘 배우나요?

실전에서 검증된 코드 브라우저에서 직접 실행하는 실습 코드로 Web3 & DApp Development Fundamentals을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Web3 & DApp Development Fundamentals을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Web3 & DApp Development Fundamentals은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“OpenZeppelin을 사용하는 이유” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Web3 & DApp Development Fundamentals 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Web3 & DApp Development Fundamentals 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. OpenZeppelin을 사용하는 이유
  2. 접근 제어
  3. 토큰 확장 기능
  4. 업그레이드 가능한 컨트랙트
← Web3 & DApp Development Fundamentals(으)로 돌아가기