수업에서는 우분투 20.04 LTS, WSL과 편의를 위해 visual studio code를 사용했다.
초기 설치 필요 : node.js(14.x), truffle, ganache-cli
nodejs 14버전과 npm 최신버전을 설치해준다.
sudo curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g npm
truffle과 ganache-cli를 설치해준다.
npm install -g truffle
npm install -g ganache-cli
우분투를 켜고 작업할 곳에 다음을 입력한다. 토큰명은 임의로 정하면 된다.
mkdir magtoken
cd magtoken
truffle init
npm init -y
truffle init을 해주면 contracts, migrations, test 폴더와 truffle-config.js 파일이 생긴 것을 확인할 수 있다.
npm init -y 는 알아서 package.json 파일을 만들어주는 명령어다.
npm install @openzeppelin/contracts
위를 입력하면 토큰이 들어있는 node_modules/@openzeppelin/contracts 폴더가 생긴다.
token 폴더 위치에서 code . 을 입력하면 vs code 로 폴더 내용을 볼 수 있다.
sol 파일의 코드 컬러를 입히기 위해서는 익스텐션에서 solidity 를 검색해 설치하면 된다.
이제 vs code에서 코드를 작성할 것이다.
contracts > MagToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import '@openzeppelin/contracts/token/ERC20/ERC20.sol';
contract MagToken is ERC20 {
uint public INITIAL_SUPPLY = 21000000;
constructor() public ERC20("MAG TOKEN", "MGT") {
_mint(msg.sender, INITIAL_SUPPLY * 10 ** (uint(decimals())));
}
}
license-identifier와 솔리디티의 버전은 node_moduels/@openzeppelin/contracts/token/ERC20/ERC20.sol 의 내용과 동일하게 했다.
초기 토큰 양은 2,100만개로 설정하고, 토큰명과 약자를 설정해 발행한다.
_mint와 decimals()의 형식도 ERC20.sol 에서 해당 함수의 확인이 가능하다.
_mint의 인자로는 sender의 주소와 설정한 총량이 들어간다. decimals의 기본 return은 18로, 소수 뒷자리 수를 정해준다고 한다.
migrations > 2_deploy_MagToken.js
var MagToken = artifacts.require("./MagToken");
module.exports = function(deployer) {
deployer.deploy(MagToken);
}
truffle-config.js
45~49번째 줄 development 부분의 주석을 해제한다.
development: {
host: "127.0.0.1", // Localhost (default: none)
port: 8545, // Standard Ethereum port (default: none)
network_id: "*", // Any network (default: none)
},
85번째 줄 compilers의 version 주석을 해제하고 버전을 바꿔준다.
version: "0.8.0",
이제 MetaMask를 사용해보자. 크롬 웹스토어에서 크롬에 추가하자.
https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn
가입할 때 시드 구문으로 로그인을 할 수 있으므로, 처음에 주어진 영어단어들을 그대로 복사해 잘 저장해놓아야한다.
확장에서 metamask를 누르면 작게 열리는데, 세로로 된 ...을 눌러 보기 확장을 눌러 크게 볼 수 있다.
메타마스크에서는 비공개키로 지갑 계정을 가져올 수 있다.
우분투를 하나 더 열어주고 ganache-cli를 실행시킨다. 이 우분투는 닫지 말고 켜놓자.
ganache-cli
이러면 100 이더씩 들어있는 available accounts 와 private keys 가 각각 10개씩 나온다.
이 private keys 중 하나를 복사해 계정을 가져오고 우측 상단의 네트워크를 로컬로 선택한다.
이제 원래 사용하던 우분투로 돌아와 token폴더 위치에서 다음을 입력한다.
truffle compile
truffle migrate
contracts 폴더의 sol 파일들이 컴파일 되고, migrations 폴더에 만들어둔 js 파일들이 deploy 된다.
아까 만들었던 토큰에 대한 migrate 결과에서 contract address 를 복사해 metamask에서 토큰을 추가할 수 있다.
이런 식으로 다른 계정에도 토큰을 추가해주면 잔액은 0이지만 해당 토큰이 생겨난다.
보내기를 선택해 해당 토큰을 다른 계정으로 보내줄 수도 있다.
메타마스크 오류인지, 금액을 입력하면 다음 버튼이 비활성화되는 경우가 있었다.
이 경우 계정 선택을 취소하고 다시 선택하면 된다.
'블록체인 기반 핀테크 및 응용 SW 개발 > Solidity' 카테고리의 다른 글
[Solidity] 3. 이더리움 토큰에 기능 넣고 실험해보기 (0) | 2021.08.06 |
---|---|
[Solidity] 2. 만든 토큰을 ropsten testnet에 발행하기 (0) | 2021.07.23 |