오픈제플린을 이용한 토큰 생성
2019. 3. 21. 15:49ㆍBlockChain/Solidity
'처음 배우는 블록체인' 8장 실습을 참고로 구성된 예제입니다.
트러플 버전은 5.0.4에서 진행하였습니다.
버전정보
-truffle(develop)> version
-Truffle v5.0.4 (core: 5.0.4)
-Solidity v0.5.2 (solc-js)
-Node v8.10.0
-openzeppelin-solidity": "^2.2.0"
-오픈 제플린 2.2 공식 문서 참고링크
커맨드 8-23 새 프로젝트 생성
mkdir dapps-token
cd dapps-token
sudo truffle init
오픈제플린 설치
sudo npm install -g npm // npm 업데이트 한번 해주기
sudo npm init -f
sudo npm install openzeppelin-solidity
코드 8-7 토큰의 스마트 계약 (contracts/DappsToken.sol)
pragma solidity ^0.5.2; // ①
// ② StandardToken.sol은 2.2 이상의 버전에서 ERC20.sol로 명칭이 바뀜
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
import "../node_modules/openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol";
contract DappsToken is ERC20, ERC20Detailed { // ③
// 선언, 초기화 방법 변경, 따라서 아래는 주석처리
// string public name = "Whackur Token"; // 토큰 이름 설정
// string public symbol = "WKRTKN"; // 토큰을 화폐 단위로 나타낼 때의 기호 설정
// uint public decimals = 18; // 토큰에서 허용할 소수점 자릿수 설정
// 생성자로 생성할 때 바로 토큰이름과 축약어, 자릿수를 삽입해준다.
// ④
constructor() ERC20Detailed("Whackur Token", "WKRTKN", 18) public {
uint public initialSupply = 1000e18;
// ④
constructor() ERC20Detailed("Whackur Token", "WKRTKN", 18) public{
_mint(msg.sender, initialSupply);
}
}
코드 8-8 2_deploy_dapps_token.js
계약을 배포할 때 필요한 마이그레이션 스크립트 작성
migrations/ 디렉터리 아래에 숫자_작업 내용_계약 이름 형태로 작성
var DappsToken = artifacts.require("./DappsToken.sol"); // ①
contract('DappsToken', function(accounts) { // ②
// ③
it("should put 1000e18 DappsToken in the first account", function() {
return DappsToken.deployed().then(function(instance) {
return instance.balanceOf.call(accounts[0]);
// ④
}).then(function(balance) {
assert.equal(balance.valueOf(), 1000e18, "1000e18 wasn't in the first account");
});
});
});
코드 8-9 DappsTokens.js
테스트 코드는 test 디렉터리 하위에 작성
var DappsToken = artifacts.require("./DappsToken.sol"); // ①
contract('DappsToken', function(accounts) { // ②
// ③
it("should put 1000e18 DappsToken in the first account", function() {
return DappsToken.deployed().then(function(instance) {
return instance.balanceOf.call(accounts[0]);
// ④
}).then(function(balance) {
assert.equal(balance.valueOf(), 1000e18, "1000e18 wasn't in the first account");
});
});
});
0.5.2 버전(도커) 형태로 서비스를 실행
지난 포스팅을 참고하여 도커형태로 서비스 실행하도록 구성한다.
커맨드 8-25 테스트 실행
트러플을 개발자 모드로 실행한 후 instance, accounts를 설정한다.
버전 변경에 따라 let에 변수로 인스턴스 선언 후 호출한다.
sudo truffle develop
truffle(develop)> compile
truffle(develop)> test
truffle(develop)> let instance = await DappsToken.deployed()
truffle(develop)> let accounts = await web3.eth.getAccounts()
커맨드 8-27 토큰 이름 확인
instance.name()
커맨드 8-28 통화 기호와 전체 토큰 발행량 확인
instance.symbol()
instance.totalSupply()
커맨드 8-29 계정 0과 1의 토큰 발행량 확인
계정의 첫 번째는 토큰을 발행한 사람이고 모든 토큰을 소유하고 있다.
truffle(develop)> instance.balanceOf(accounts[0])
<BN: 3635c9adc5dea00000>
truffle(develop)> instance.balanceOf(accounts[1])
<BN: 0>
커맨드 8-30 100토큰 송금
accounts, accounts[1] 로 계정 리스트 확인 후 송금
truffle(develop)> instance.transfer(accounts[1], 100)
커맨드 8-31 각 계정의 토큰 수 확인
truffle(develop)> instance.balanceOf(accounts[0])
<BN: 3635c9adc5de9fff9c>
truffle(develop)> instance.balanceOf(accounts[1])
<BN: 64>
truffle(develop)> instance.balanceOf(accounts[2])
<BN: 0>
'BlockChain > Solidity' 카테고리의 다른 글
메타코인(Metacoin) 발행 트러플 예제 (0) | 2019.03.21 |
---|---|
우분투 도커로 트러플 환경 구성하기 (1) | 2019.03.21 |