지난 번에는 하드햇 튜토리얼로 프레임워크를 이용한 컨트랙트의 작성부터 배포를 다뤘다. 이번에는 표준 사양의 컨트랙트를 오픈제플린을 사용해 온라인으로 쉽게 작성하는 방법에 대해 적어보려고 한다. 솔리디티 문법에 대한 기초적인 이해만 있으면 따로 준비할 건 없기에 블록체인 개발을 맛보기로 해보고 싶은 사람한테 추천한다! 👍
순서는 다음과 같다.
- 왜 오픈제플린을 사용하는가? - 오픈제플린이란? - 오픈제플린 위자드를 활용한 간단 컨트랙트 구현 - 참고 자료 |
왜 오픈제플린을 사용하는가?
블록체인 네트워크에서는 유통할 수 있는 토큰의 호환성을 위해 ERC20, ERC721, ERC1155 등의 표준 사양을 제공하고 있다.
예시로 ERC20은 아래와 같은 사양을 가지고 있다.
// METHOD
function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
// EVENTS
event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)
(+) ERC vs EIP(접은 글 확인!)
간혹 ERC와 EIP를 혼동하는 케이스가 있는데 엄연히 따지면 ERC는 EIP의 한 카테고리라고 보면 된다.
(개인적으로 EIP는 인터페이스, ERC는 EIP를 implement 한 추상 클래스의 역할을 하고 있다, 로 이해하고 있다.)
EIP에 관한 자료는 여기서 더 자세히 볼 수 있다.
그런데 컨트랙트를 작성할 때마다 위 메서드와 이벤트를 구현하게 되면, 이건 너무 비용 낭비라는 생각이 들 것이다. 표준 사양이라 안 짤 수도 없고... 이 때, 표준 사양을 구현하지 않아도 사용할 수 있도록 등장한 것이 오픈제플린이다.
오픈제플린이란?
오픈제플린 공식 문서는 이렇게 소개를 하고 있다.
오픈제플린은 안전한 스마트 컨트랙트 개발을 위한 솔리디티 기반 표준 라이브러리입니다. 커뮤니티에서 검증된 코드 기반으로 컨트랙트를 구축해보세요.
|
오픈제플린은 회사 이름이기도 하다. 2015년 데미안 브리너와 마누엘 아라오스가 공동 설립한 블록체인 개발 회사로, 앞서 말한 오픈제플린 라이브러리(어떤 곳에선 프레임워크라 부르기도 한다.)와 스마튼 컨트랙트를 관리 및 운영하는 플랫폼 제플린OS를 제공하고 있다.
오픈제플린에서 제공하는 라이브러리를 이용하면 위에서 말한 메서드와 이벤트를 구현할 필요 없이, 아래처럼 쓰면 된다. 참 쉽죠?
// contracts/MyNFT.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract MyNFT is ERC721 {
constructor() ERC721("MyNFT", "MNFT") {
}
}
오픈제플린에서 제공하는 컨트랙트들은 전부 virtual 메소드여서, 만일 표준을 따르되 일부 기능을 입맛에 맞게 커스텀하고 싶으면 오버라이딩을 하면 된다. 오버라이딩 예시는 다음과 같다.
function _baseURI() internal view override returns (string memory) {
return "https://my-domain/metadata/";
}
오픈제플린으로 활용한 간단 컨트랙트 구현 및 사용해보기
1) 오픈제플린 위자드로 컨트랙트 만들기
그럼 본격적으로 오픈제플린을 이용한 컨트랙트를 만들어보자. 오픈제플린에서는 위자드라는 인터렉티브 컨트랙트 생성 도구를 제공하고 있다. 위자드로 들어가면 아래와 같은 화면을 볼 수 있다.
왼쪽의 체크박스 리스트에서 원하는 기능을 클릭하면 오른쪽에서 코드가 자동으로 만들어진다. 우리는 별도의 커스텀 없이 민팅이 가능하고, 오너가 존재하는 ERC721을 만들어볼 것인다.
이러면 컨트랙트 구현이 끝났다. 참 쉽죠?
2) remix 온라인 ide에서 배포 및 사용해보기
구현이 끝나면 위자드 우측 상단에 [Open in Remix] 버튼이 있다. 버튼을 클릭하면 컨트랙트 개발 전용 Remix (온라인) IDE가 뜬다. 파일 명은 랜덤으로 정해진다.
왼쪽의 Compile contract~ 이라 적힌 푸른색 버튼을 클릭한다. 아래와 같이 뜨면 컴파일에 성공한 것이다.
무엇이 달라졌나 물으면, 컴파일이 되면서 artifacts 라는 컴파일 파일들이 자동으로 생성된다.
Before | After |
이후 왼쪽 카테고리에서 이더리움 모양의 아이콘 (Deploy & run transactions) 를 클릭하면 배포 환경과 배포할 주소와 gas limit 등을 설정하고 배포를 할 수 있는 창이 뜬다. 리믹스 가상 네트워크에서 배포하는 것이므로 돈은 들지 않으니 걱정하지 않아도 된다.
주황색 Deploy 버튼을 클릭하면 배포가 되면서 터미널에서 트랜잭션 정보를 보여주고, 왼쪽 하단에서 배포된 컨트랙트를 확인할 수 있다.
배포된 컨트랙트의 토글 버튼을 클릭하면 하단에 사용할 수 있는 메서드 목록이 뜬다. 왼쪽의 주황색 또는 푸른색 버튼을 사용하면 메서드가 실행된다.
이 메서드들은 ERC721 표준 메서드들이다. 파라미터가 필요한 메서드들의 경우 파라미터를 기입하고, 없을 경우 바로 사용해도 가능하다. 적절하지 못한 파라미터를 넣어 메서드를 실행하면 터미널에서 오류를 뱉는다. 파라미터가 없는 name, owner 를 클릭하면 메서드 바로 아래에 리턴값을 (있다면) 보여준다. 터미널에선 실행된 메서드의 트랜잭션 정보를 보여준다.
이렇게 오픈제플린을 활용한 컨트랙트 구현과 배포, 그리고 실행까지 해보았다! 블록체인에 대해 잘 몰라도 시도해볼 수 있을 정도로 쉽고 간편하다! 위자드를 이용해 기본적인 기능을 가진 컨트랙트 코드를 만들고 입맛대로 커스텀하여 사용할 수도 있다. 이 글을 통해 사람들이 쉽게 블록체인 개발을 시도해봤으면 좋겠다. 😎
참고 자료
'블록체인 뿅뿅' 카테고리의 다른 글
체인링크 VRF 사용해보기 (3) Subscription과 컨트랙트 연동하기 (0) | 2023.06.17 |
---|---|
체인링크 VRF 사용해보기 (2) Subscription Manager 사용하기 (0) | 2023.05.28 |
체인링크 VRF 사용해보기 (1) 체인링크란? (0) | 2023.04.23 |
HardHat 튜토리얼 2편 (0) | 2023.03.09 |
HardHat 튜토리얼 1편 (1) | 2023.02.24 |