정지용
기술스택 목록
프레임워크

OpenZeppelin Contracts

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

이더리움 스마트 컨트랙트를 안전하게 만들 수 있도록 검증된 표준 부품을 제공하는 라이브러리

OpenZeppelin Contracts는 ERC20, ERC721 같은 토큰 표준과 접근 제어, 일시 정지, 재진입 방지 등 스마트 컨트랙트에서 반복적으로 필요한 로직을 감사된 형태로 미리 구현해둔 Solidity 라이브러리입니다. 스마트 컨트랙트는 배포 후 수정이 어렵고 코드에 결함이 있으면 자산 손실로 직결되기 때문에, 개발자가 매번 토큰 표준이나 보안 로직을 직접 작성하다 실수를 저지르는 문제를 줄이기 위해 만들어졌습니다. 개발자는 이 라이브러리의 컨트랙트를 상속받아 필요한 부분만 커스터마이징하는 방식으로 사용합니다.

이럴 때 사용합니다

  • 토큰(ERC20, ERC721 등) 컨트랙트를 처음부터 직접 구현하지 않고 검증된 표준을 쓰고 싶을 때
  • 소유권 관리나 역할 기반 권한 제어를 직접 설계하지 않고 안전하게 적용하고 싶을 때
  • 감사받은 코드를 기반으로 해 보안 사고 위험을 줄이고 싶을 때
  • 커뮤니티와 감사 기관에 널리 검토된 컨트랙트로 신뢰도를 높이고 싶을 때

핵심 개념

Inheritance
OpenZeppelin이 제공하는 컨트랙트(ERC721, Ownable 등)를 상속받아 표준 기능을 그대로 확보하고, 필요한 함수만 오버라이드해 커스터마이징하는 사용 방식입니다.
ERC Standards
ERC20(대체 가능 토큰), ERC721(NFT), ERC1155(멀티 토큰) 등 이더리움에서 합의된 토큰 인터페이스 표준을 구현한 컨트랙트 모음입니다.
Access Control
Ownable(단일 소유자)이나 AccessControl(역할 기반 권한)처럼 특정 함수 호출 권한을 제한하는 패턴으로, 누가 민감한 기능을 실행할 수 있는지 관리합니다.
Security Modules
재진입 공격을 막는 ReentrancyGuard, 긴급 정지를 위한 Pausable 등 알려진 취약점 패턴을 방어하는 유틸리티 컨트랙트입니다.
Upgradeable Contracts
프록시 패턴을 활용해 배포 후에도 로직을 교체할 수 있도록 만든 버전의 컨트랙트로, 일반 버전과 별도로 제공됩니다.

OpenZeppelin을 상속한 간단한 NFT 컨트랙트

ERC721과 Ownable을 상속해 소유자만 새 토큰을 발행할 수 있는 최소 NFT 컨트랙트입니다.

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

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract MyNFT is ERC721, Ownable {
    constructor() ERC721("MyNFT", "MNFT") Ownable(msg.sender) {}

    function mint(address to, uint256 tokenId) public onlyOwner {
        _safeMint(to, tokenId);
    }
}

처음 쓸 때 흔한 함정

  • 상속 시 부모 생성자 인자를 빠뜨리거나 초기화 순서를 잘못 이해해 배포에 실패하는 경우가 흔하다
  • 일반 버전과 Upgradeable 버전을 혼동해 프록시 환경에 맞지 않는 컨트랙트를 배포하기도 한다
  • 함수를 오버라이드할 때 부모 로직을 완전히 이해하지 못한 채 필수 검증 코드를 빠뜨릴 수 있다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.