Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (2)
이전 글 보기
이전 글에서 Smart Contract에 대해서 설명을 간단하게(?) 했다. 이제 이 Smart Contract를 직접 제작해 보자.
준비물
이전 편에서도 설명했듯이..
1. Ganache GUI
2. Truffle + Solidity
3. SublimeText와 같은 에디터
3-1. Visual Studio Code 는 Solidity 플러그인을 받는다.
3-2. SublimeText도 Solidity 플러그인이 있다.
4. Docker
Ganache GUI설치
Ganache는 BC Node를 구현하기 위한 최고의(?) 소프트웨어이다. 테스트넷(ropsen이었나..)에 가입하기 귀찮고 관리하기도 귀찮으니 Smart Contract를 테스트 해보기에 가장 적합한 Ganache를 사용했다.
https://www.trufflesuite.com/ganache 에 접속하여 GUI를 받는다. 처음엔 CLI로 시작을 했었는데,, GUI가 최고다.
Truffle 설치
매번 Smart Contract를 컴파일 하는것은 매우 귀찮은 일이니 이것을 쉽게 도와주는 Truffle을 설치한다. npm으로 쉽게 설치가 가능하다.
Truffle | Installation | Documentation | Truffle Suite
The Truffle suite of tools make dapp development easier and more consistent.
www.trufflesuite.com
npm install -g truffle
다른 방법
사실 방법은 여러가지가 있다. Solidity로 Smart Contract를 제작하고, .sol이라는 확장자를 가진 Solidity를 web3j에서 사용 가능하도록 Compile만 되면 되는 것이기 때문에, 여러 방법을 소개하고 있는 사이트를 링크하겠다. (필자는 Docker를 사용할 것임!)
https://web3j.readthedocs.io/en/latest/smart_contracts.html
Smart Contracts — web3j latest documentation
In order to deploy a smart contract onto the Ethereum blockchain, it must first be compiled into a bytecode format, then it can be sent as part of a transaction. web3j can do all of this for you with its Solidity smart contract wrappers. To understand what
web3j.readthedocs.io
Docker 설치
Solidity를 Web3j에서 이용하기 위해서는 Java 파일로 다시 Generate 해줘야 하는데 이 과정을 도커가 도와준다.
(Mac) https://docs.docker.com/docker-for-mac/install/
(Windows) https://docs.docker.com/docker-for-windows/install/
제작 시작!
일단 프로젝트 폴더를 하나 만들고, Initializing 해준다.
$ mkdir example
$ cd example
$ truffle init
✔ Preparing to download box
✔ Downloading
✔ cleaning up temporary files
✔ Setting up box
위와 같이 나오면 된다.
이제 Ganache 를 열어 프로젝트를 만들어 주자.
Truffle Projects 에 Add Project를 클릭하여 아까 만든 프로젝트 폴더에 있는 truffle-config.js를 임포트 한다.
그 다음 위쪽 메뉴에서 server메뉴를 들어간 후, Host Name을 0.0.0.0-All interface를 선택하고 Save한다.
벌써 BC Node 가 생성됐다.
처음 시작을 하면 약 10개의 지갑(사용자)가 생성이 되고 일단 100 ETH가 지급된다. 이 ETH는 1편에서도 말씀드렸듯이, Smart Contract 배포 및 이용을 위한 수수료 지불에 사용된다.
이제 Solidity로 Smart Contract를 만들어보자.
우리는 ERC20이라는 프로토콜을 이용해 Smart Contract를 만들것이다. ERC20에 대한 설명은 아래 블로그에서 설명을 너무나도 잘 해주고 계시다.
https://steemit.com/kr/@kiwonhong/erc-20-erc-20
ERC-20 정체! ERC-20 이란? — Steemit
블록체인, 특히 이더리움 공부를 시작하게 되면 많이 보이는 용어 중 하나가 ERC-20 이란 용어인데 대략적인 내용은 알지만 명확한 정의를 몰라 정체를 찾아보게 되었다. 우선 위키피디아에 ERC20 을… by kiwonhong
steemit.com
ERC-20토큰이라는 건 정확히 무엇일까요?
싸이클린은 이더리움 플랫폼에 만들어진 ERC-20 토큰입니다. 우리는 모두 암호화폐 세게에서 “ERC-20”이라는 단어가 던져진 것을 보았지만, 그렇게 많은 토큰들이 왜 ERC-20 토큰일까요? 여러분은 아마도 메인넷 출시 전에 ERC-20…
medium.com
일단 ERC20을 사용하기 위해서 ERC20을 받아준다.
$ npm install @openzeppelin/contracts
위 커맨드를 치시면 node_modules 폴더가 생성되고 안에 다운로드가 된다. 원래 그냥 진행하는게 맞는 것이겠지만 본인은 자꾸 파일 import 에러가 나서 필요한 파일을 모조리 로컬 개발 폴더로 옮긴 후 진행했기에, 똑같이 알려드리도록 하곘다.
일단 우리가 필요한 파일은 node_modules/@openzeppelin/contracts 폴더 안에 있다.
1. GSN/Context.sol
2. token/ERC20/ERC20.sol
3. token/ERC20/ERC20Detailed.sol
4. token/ERC20/IERC20.sol
5. math/SafeMath.sol
6. ownership/Ownable.sol
위 6개 파일들을 모두 찾아 복사한 후, 프로젝트 폴더 안에 있는 contracts 폴더에 싹다 넣는다. 그리고 파일을 하나하나 열어 맨 윗줄 import 코드를 바꾸면 되는데, 그냥 경로 부분을 ./fimename.sol 로 바꿔주면 된다.
예를 들어 Ownable.sol 파일에서 맨 윗줄 import를 import "./Context.sol"; 이렇게만 바꿔주시면 된다. 다른 파일도 다. 그래야 컴파일 할 때 에러가 생기지 않는다.
이제 진짜 SmartContract를 작성해 보겠다.
$ truffle create contract MyToken
그럼 이제 contracts폴더에 MyToken.sol도 생성이 되었을 것이다. 이제 이 MyToken.sol을 아래와 같이 수정해준다.
pragma solidity >= 0.5.0 < 0.7.0;
import "./ERC20.sol";
import "./ERC20Detailed.sol";
import "./Ownable.sol";
contract MyToken is ERC20, ERC20Detailed, Ownable {
constructor(string memory name, string memory symbol, uint8 decimals)
ERC20Detailed(name,symbol,decimals) public {
}
function mint(address to, uint256 value) public onlyOwner{
_mint(to, value);
}
}
이제 코드를 컴파일 한다.
$ truffle compile
컴파일이 되면 위와 같이 Import했던 solidity들이 다 같이 컴파일 되면서 Compiled successfully ~~ 라고 뜬다.
배포
migrations 폴더에 2_mytoken_migration.js 라는 JavaScript라는 파일을 하나 생성하고, 아래와 같이 수정한다.
var MyToken = artifacts.require("MyToken");
module.exports = function(deployer) {
deployer.deploy(MyToken, "junseo", "JSC", 100000000);
// Additional contracts can be deployed here
};
그 다음 truffle-config.js 를 열어 ganache와 맞춰준다.
module.exports = {
networks: {
development: {
host: "127.0.0.1", // Localhost (default: none)
port: 7545, // Standard Ethereum port (default: none)
network_id: "*", // Any network (default: none)
},
},
mocha: {
// timeout: 100000
},
compilers: {
solc: {
// version: "0.5.1", // Fetch exact version from solc-bin (default: truffle's version)
// docker: true, // Use "0.5.1" you've installed locally with docker (default: false)
// settings: { // See the solidity docs for advice about optimization and evmVersion
// optimizer: {
// enabled: false,
// runs: 200
// },
// evmVersion: "byzantium"
// }
}
}
}
Ganache 에서 포트 번호를 7545로 설정했으니 우리도 바꿔주면 된다.
이제 진짜 배포해 보자.
$ truffle migrate
위 커맨드를 치게 되면
MyToken이라는 SmartContract가 Deploy(배포) 된 것을 확인할 수 있다. 1편에서도 말했듯이 (중요) SmartContract를 BC Node에 배포하면 이에 따른 수수료가 발생하게 되는데, 아래 보면 Total cost가 얼마나 나왔는지 볼 수 있다. account에 표시된 주소가 이 해당 SmartContract를 배포한 배포자 라고 할 수 있다. 그럼 이 사람의 ETH 가 줄어들어야 하는데, Ganache에서 확인해 보자.
해당 account와 동일한 account의 Address주소를 보게 되면 100ETH 에서 99.96 ETH로 줄어든 것을 볼 수 있다. 이는, Smart Contract를 배포했기 때문에 수수료를 지급했고, 그만큼 줄어든 것을 볼 수 있다.
위에 Contracts 탭을 눌러보자. MyToken이 제대로 Deployed 된 것을 볼 수 있다.
이제 안드로이드만 남았다
해당 SmartContract를 BC Node에 deploy했으니, 이 SmartContract를 안드로이드에서도 이용할 수 있다.
앞서 말한 Web3j를 통해 가능하며, 또 Web3j로 Generate 해야한다. 이건 다음 편에 계속 포스팅 하도록 하겠다.
'BlockChain' 카테고리의 다른 글
댓글
이 글 공유하기
다른 글
-
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (4)
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (4)
2020.02.06 -
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (3)
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (3)
2020.02.05 -
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (1)
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (1)
2020.02.04