🔑 코인 투자 추천 링크 🔑
4. openzeppelin 사용하여 ERC20 토큰 만들기
6. web3.js 와 자바스크립트를 활용한 간단한 예제
10. 솔리디티 조건문, 반복문(if, else, for)
11. 솔리디티 암호화폐 지불(호텔룸 예약하기 프로그램)
13. 리믹스 솔리디티 6.0 버전 ERC20토큰 만들기
14. web3.js 와 자바스크립트를 활용하여 (이더잔액조회) 지갑 만들기
15. 솔리디티 컨트랙트 Web.js 활용하여 웹으로 보여주기
* 블록체인 전문가들도 놓치기 쉬운 비트코인, 이더리움의 핵심가치 강의
지난시간에 openzeppelin을 설치했고 이를 활용해서 기본적인 스마트컨트랙트 작성 후 배포까지 하였습니다. 이번시간에는 실제로 사용 가능한 ERC20 토큰을 만들어보겠습니다.
[*참고 OpenZeppelin 라이브러리 설치과정]
1) smartcontract 폴더 생성
2) truffle init
3) npm init -y
4) npm install @openzeppelin/contracts
1. MyToken.sol 파일을 새롭게 작성합니다.
소스는 아래와 같습니다.
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20{
uint public INITIAL_SUPPLY = 120000;
constructor() public ERC20("My Token","MT"){
_mint(msg.sender, INITIAL_SUPPLY);
}
}
migrations 폴더안에 2_deploy_Mytoken.js 을 아래와 같이 작성합니다.
추가로 truffle-config.js 네트워크 및 버전을 아래와 같이 변경해줍니다.
간단히 설명하면,
import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
node_modules 폴더에 있는 위 경로의 ERC20.sol 파일을 불러오겠다.
contract MyToken is ERC20
불러온 ERC20.sol 파일에 현재의 TEST 코드를 덮어쓰겠다.
constructor() public ERC20("My token","MT"){
_mint(msg.sender, INITIAL_SUPPLY);
}
consturctor는 스마트컨트랙트가 생성될때 1번만 호출이 됩니다.
그리고 위 코드에서는 ERC20 컨트랙트에 정의된 _mint() 함수를 사용했습니다.
_mint() 함수에 대한 사용법은 아래와 같습니다.
기타 openzeppelin에서 제공하는 ERC20 함수에 대한 사용법은 아래 사이트에서 참고하시면 됩니다.
docs.openzeppelin.com/contracts/2.x/api/token/erc20#ERC20
객체지향언어(C++,JAVA) 등에 대한 배경지식이 있는 분이라면 생성자에 대한 이해가 있을텐데요..(향후에 설명이 가능하면 이부분을 설명하겠습니다.)
아무튼, 겍체지향언어에는 생성자라는 개념이 있는데, 그 생성자의 개념이 솔리디티에도 동일하게 있습니다.(솔리디티도 객체지향언어와 유사하므로..) 그런데 차이가 있습니다. 그 차이를 간략하게 설명합니다. 일단 이런 개념이 있다정도로 알고 넘어가시면 될것 같네요.
1) 솔리디티에서 생성자는 선택사항이며, 명시적으로 선언하지 않는 경우 컴파일러가 기본 생성자를 넣어줌.
2) 생성자는 계약이 배포될 때만 한 번 실행됨. (이 부분이 일반적인 객체지향프로그래밍 언어랑 차이점)
- 일반적으로 새로운 객체 인스턴스가 생성될때마다 생성자가 실행됨.
- 솔리디티에서는 EVM에 배포되는 시점에만 실행됨.
- 즉, 다른 프로그래밍 언어에서는 여러개의 생성자를 둘 수있지만, 솔리디티에서는 한 계약에 하나의 생성자만 있어야 함.
3) 생성자는 파라미터를 취할 수 있으며, 계약을 배포할때 인자를 넣어야 함.
4) 생성자는 계약과 같은 이름을 가짐.
5) 생성자의 가시성은 Public 또는 Internal이 될 수 있음.
6) 생성자는 external 이나 Private는 될 수 없음.
7) 생성자는 데이터를 명시적으로 반환하지 않음.
일단 솔리디티에서의 생성자의 특징은 위와 같습니다. 중요한건 2번사항입니다. 나머지는 알면 좋지만 잘 이해가 안되더라도 이런것이 있다정도로 알고 넘어가시면 될것 같습니다. 일단 지금은요..
2. 배포하기
이제 한번 배포해봅시다!!
먼저 gansche-cli를 실행해줍니다.
그리고, truffle migrate --reset 해줍니다.
MyToken 정보가 아래와 같이 생성된걸 확인 할 수 있습니다.
contract address: 0x37FE0A4614D254E3Ae271790df2091ae2D825EED
3. Contract 다루기
이전 시간에 했던 방식으로 contract address와 ABI를 활용해서 myehterwallet에 연결해봅시다.
Contract address와 ABI를 복사하여 아래 myetherwallet에 붙여넣기합니다.
이전과는 다르게 오른쪽 메뉴에 상당히 많은 기능들이 생긴걸 확인할 수 있습니다.
이름, 총 공급량 등도 쉽게 확인할 수 있네요!!
메타마스크에서 사용자정의 토큰추가를 하면(토큰컨트랙트 주소를 입력합니다.) 아래와 같이 토큰이 추가되는걸 확인할 수 있습니다.
아래와 같이 토큰 전송도 가능하군요!!!
이렇게 ERC20 토큰을 만들고 보내는것까지 성공했습니다.
어렵지 않게 할 수 있는 이유는, ERC20.sol 파일을 활용했기 때문인데요.
간략하게 ERC20.sol 파일의 소스를 한번 살펴볼까요?
대략 위와 같지만, 최신 버전과 상세한 사용법은 아래 메뉴얼을 참고하는게 가장 좋습니다.
docs.openzeppelin.com/contracts/3.x/erc20
블록체인 교육 문의는 아래 링크 참고 바랍니다.
https://kimsfamily.kr/page/Profile
댓글