Last active
January 24, 2019 01:34
-
-
Save flyyou/eddf38f3e01132b1dd12c08bc6304c15 to your computer and use it in GitHub Desktop.
[Ethereum Study_01] 이더리움 개발 환경 구성
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Ethereum Network ## | |
- TestRPC | |
개발 단계에서 실제 이더없이 시뮬레이션 테스트 환경을 구성할 수 있게 해주는 툴. 원래 이더리움 메인넷에서 테스트를 하려면 실제 이더가 필요하지만, | |
TestRPC 를 사용하면 마이닝 없이 가상환경에서 리소스, 트랜잭션에 대한 제한 없이 이더리움을 만들어내서 테스트를 할 수 있음. | |
- TestNet | |
이더리움의 퍼블릭 테스트 네트워크. 현재 아래와 같은 3개의 퍼블릭 테스트넷을 제공. | |
- Ropsten (Proof of Work): 프로덕션 환경이 실제 메인넷이랑 가장 비슷하여 (PoW 이기 때문에) 현재 가장 많이 쓰여지고 있는 테스트 네트워크. | |
Geth 와 Parity 클라이언드 둘다 지원. 이전에 스팸 어택을 당한 이력이 있음… 이더 마이닝이 가능하며, 테스트 이더를 요청할 수 있다. | |
- Kovan (Proof of Authority): Parity 팀이 랍스텐의 문제를 해결하기 위해 개발한 테스트 네트워크. 스팸어택으로부터 안전하며, | |
Parity 클라이언트만 지원. 이더 마이닝 불가능하며, 테스트 이더 요청 필요. | |
- Rinkeby (Proof of Authority): Rinkeby 역시 스팸 어택을 방지하고자 만들어졌으며, 이더리움 팀이 개발한 테스트넷. Geth 클라이언트만 지원. | |
이더 마이닝 불가능하며, 테스트 이더 요청 가능. | |
- Mainnet | |
실제 거래가 이루어지는 이더리움의 메인 네트워크. | |
## Ganache ## (https://truffleframework.com/ganache) | |
개발 편의를 위하여 test RPC를 손쉽게 구동시켜 주는 어플리케이션. | |
어플리케이션을 실행하면 7545번 포트로 test RPC가 구동되며, mining이 활성화되어있기 때문에 바로 contract를 배포하거나 transaction을 실행할 수 있는 | |
환경이 갖춰짐 | |
( 설치방법 ) (https://github.com/trufflesuite/ganache-cli/blob/master/README.md) | |
https://github.com/trufflesuite/ganache/releases 에서 윈도우(또는 각OS별) 파일을 받아 설치하면 끝! | |
Using npm: | |
npm install -g ganache-cli | |
or, if you are using Yarn: | |
yarn global add ganache-cli | |
( 구동 ) | |
- 실행하면 바로 구동되며 기본으로 10개의 Account가 생성된다. | |
- 기본설정 포트가 7545이지만 8545로 변경 후 재구동을 하면 Chrome의 Metamask를 이용하여 접속이 가능하다. | |
- Localhost 8545 : Private Network | |
- 구동 후 로그 현황 | |
[오후 1:42:31] Starting server (version 1.2.3) with initial configuration: {"hostname":"127.0.0.1","port":8545,"network_id":5777, | |
"default_balance_ether":100,"total_accounts":10,"unlocked_accounts":[],"locked":false, | |
"vmErrorsOnRPCResponse":true,"verbose":false,"gasLimit":6721975,"gasPrice":20000000000} | |
[오후 1:42:31] eth_blockNumber | |
[오후 1:42:31] Ganache started successfully! | |
[오후 1:42:31] Waiting for requests... | |
[오후 1:42:31] eth_getBlockByNumber | |
어플리케이션의 상단에 4개의 탭 | |
Accounts: account들의 주소, 잔고, 트랜잭션 수 | |
Blocks: block 번호, 생성시점, 사용된 가스, 포함된 트랜잭션 | |
Transactions: 전체 트랜잭션 | |
Logs: EthereumJS VM의 로그 | |
ganache-cli을 electron으로 wrapping하는 형태로 제작되어있어, GUI가 필요없다면 ganache-cli을 사용해도 무방함. | |
ganache-core가 EthereumJS을 기반으로 제작되어있기 때문에 의도하지 않은 동작이 발생할 땐 EthereumJS 관련한 이슈를 확인하는 것이 좋다. | |
( Metamask ) | |
사용자가 이더리움 블록체인 네트워크와 편하게 통신을 하게해주는 DApp. Chrome의 경우 chrome extension으로 설치하여 간편하게 접근 및 다룰 수 있슴. | |
설치 : https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?utm_source=chrome-ntp-icon | |
Transaction 발생 | |
- 비밀번호 입력 후 접속한다. | |
- (사람모양아이콘) Import Account를 선택한 후 Ganache에서 생성해준 Private key를 복사하여 붙여넣기 한다. | |
- Account가 Import 되어서 Transaction 생성이 가능하다. | |
- Ganache가 AUTOMINING 상태이기 때문에 곧 바로 이더 전송이 가능 | |
- Ganache에서 Transaction을 조회할 수 있다. | |
--------------------- BLOCK VIEW ----------------------- | |
BLOCK 1 | |
GAS USED | |
21000 | |
GAS LIMIT | |
6721975 | |
MINED ON | |
2019-01-23 13:53:24 | |
BLOCK HASH | |
0x4f29b0b0b05ca6f93d91a61d3600322d4f446d9653aec21d0dfa21fff374291f | |
TX HASH | |
0xfa042b50a66e6787d8963ec2b66a26452bfdbd366ac9cc2f6eca64c663be4557 | |
FROM ADDRESS | |
0xc53a3cdfC483D716b68Ec55d496E726eeB055E3D | |
GAS USED | |
... | |
VALUE | |
10000000000000000000 | |
## Truffle ## | |
Truffle Famework는 솔리디티 코드(스마트 컨트랙트)를 로컬 환경에서 보다 쉽게 컴파일하고 배포할 수 있는 프레임워크. | |
초보자들을 위한 이더리움 DApp 만들기 에서 소개한 바와 같이, DApp 개발은 큰 단위로 Front-end와 Back-end로 나눌 수 있으며 | |
Truffle Framework는 Back-end 컨트랙트 작성에 사용할 수 있다. | |
( 설치 방법 ) | |
- Truffle은 node.js플랫폼 설치 후 가능함. (https://nodejs.org/ko/) | |
- npm명령어를 통해 설치 | |
C:\> npm install truffle -g | |
......... | |
+ truffle@5.0.2 | |
added 90 packages from 305 contributors in 61.435s | |
## Tutorial ## | |
#. 사전준비 (선택사항) | |
- ATOM 설치 : 개발 편의성 (https://atom.io/) | |
- ATOM Package 설치 : Solidity 코드 편집 기능 | |
Menu: Packages > Setting View > Install packages/Themes | |
linter-solidity, autocomplete-solidity 설치 (solidity로 검색하면 바로 나옵니다.) | |
- Truffle Boxes : example applications and project templates. https://truffleframework.com/boxes | |
# MetaCoin Example # - https://truffleframework.com/boxes/metacoin - https://github.com/truffle-box/metacoin-box | |
- Creating a Project | |
> mkdir MetaCoin | |
> cd MetaCoin | |
> truffle unbox metacoin (truffle만 입력하면 Command에 대한 설명이 표시됨) | |
√ Preparing to download | |
√ Downloading | |
√ Cleaning up temporary files | |
√ Setting up box | |
Unbox successful. Sweet! | |
Commands: | |
Compile contracts: truffle compile | |
Migrate contracts: truffle migrate | |
Test contracts: truffle test | |
- netwrok configration 설정 | |
truffle-config.js 파일을 수정 : Ganache 를 통한 local 환경에서 deploy를 할 것이기 때문에 localhost 주소와 8545 포트로 설정 | |
development: { | |
host: "127.0.0.1", | |
port: 8545, | |
network_id: "*" | |
}, | |
- ganache 실행 또는 ganache-cli 실행 | |
- metacoin 예제 compile | |
> truffle compile ==> build 디렉토리가 생성됨 | |
- contract compile 및 deploy | |
> truffle migrate | |
Summary | |
======= | |
> Total deployments: 3 | |
> Final cost: 0.01510414 ETH | |
: Local network에 deploy된 결과를 볼 수 있음. | |
- Ganache에서 Blocks이 생성되고 Contract creation의 Transaction이 생성된 것을 확인 할 수 있음 | |
------------- TRANSACTION VIEW ---------------- | |
TX 0xfa9b89af1da4437d062bde09582a08bea19d0a6cd5500cb2f91282f5b9a14100 | |
SENDER ADDRESS | |
0xc53a3cdfC483D716b68Ec55d496E726eeB055E3D | |
CREATED CONTRACT ADDRESS | |
0x7FE3E04a05D6c434fe8585f2a957504A76D1f5ad | |
CONTRACT CREATION | |
VALUE | |
0.00 ETH | |
GAS USED | |
284908 | |
GAS PRICE | |
20000000000 | |
GAS LIMIT | |
6721975 | |
MINED IN BLOCK | |
1 | |
TX DATA | |
0x608060405234801561001057600080fd5b50336000806101000a81548173.....049eb6cef0fc9c75a311464d54a2871dd62314ddba9fc7be94138ea7ea90029 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment