SlideShare une entreprise Scribd logo
1  sur  13
Télécharger pour lire hors ligne
Geth 클라이언트 실습 / 시각화
이재진/김현욱
lightsky340@gmail.com
kuvh@live.co.kr
Byzantium Megara Geth1.7
ethereum 연구회
Geth 시작하기
ethereum 연구회
실습 시나리오 및 환경 설명
3
Geth 설치 부터 채굴까지 ~
Alice
Bob
Miner
: Bob 에게 5 이더 송금
: Alice 로부터 5 이더 수금
: 트랜잭션 확인(채굴)
ethereum 연구회
Geth & Eth
- 이더리움의 전체 기능을 사용할 수 있는 풀 클라이언트로서 다중 인터페이스 제공
: 커맨드라인 모드 의 부가 명령어로 대화형 자바스크립트 콘솔 과 JSON-RPC 서버
- Geth 커맨드라인 : geth [options] command [--command options] [arguments...]
$ geth --identity "JayChain" --rpc --rpcport "8800" --rpccorsdomain "*" --datadir "/Users/jay/privatechain" --port
"30303" --nodiscover --rpcapi "db,eth,net,web3" --networkid 2017 console
--identity "JayChain" // 내 프라이빗 노드 식별자.
--rpc // RPC 인터페이스 가능하게 함.
--rpcport "8800" // RPC 포트 지정
--rpccorsdomain "*" // 접속가능한 RPC 클라이언트 URL 지정 , 가능한 *(전체 허용) 보다는 URL을 지정하는 게 보안상 좋
음.
--datadir "/Users/jay/privatechain" // 커스텀 디렉토리 지정
--port "30303" // 네트웍 Listening Port 지정
--nodiscover // 같은 제네시스 블록과 네트웍ID에 있는 블록에 연결 방지
--rpcapi "db,eth,net,web3" // RPC에 의해서 접근을 허락할 API
--networkid 2017
console // 출력을 콘솔로 함. 4
이더리움 CLI 클라이언트
Geth & Eth
- 대화형 자바스크립트 옵션 ( console , attach , js )
- 이더리움은 자바스크립트 런타임 환경(JSRE)을 대화형 콘솔 또는 비대화형 스크립트 모드로 제공
$ geth console // 콘솔에서 커맨드 라인 모드로 JSRE 사용
$ geth attach [ipc:/some/custom/path | rpc:http://127:0.0.1:8545] // 작동중인 geth 노드의 콘솔에 연결 후 사용
$ geth console 2 >> /dev/null // 화면에 log를 출력하지 않는다.
$ geth js demo.js 2 >> geth.log // 비대화형 모드 , demo.js 파일을실행한다.
- 커맨드라인 모드 : JSON-RPC 서버 옵션
- JSON-RPC는 경량 RPC 프로토콜을 통해 이더리움을 호출하고 그 결과를 JSON 포맷으로 받음.
- 이더리움 RPC 인터페이스를 제공하는 Web3.js 라이브러리를 사용하여 자바 스크립트 응용 프로그램내에서이더리
움 노드 호출
- 기본 JSON-RPC 기본 엔드포인트 : http://localhost:8545
- Geth 구동 : $ geth –rpc –rpcaddr <IP주소 > --rpcport <포트번호>
- Geth 콘솔: >> admin.startRPC(IP주소, 포트번호) 5
이더리움 CLI 클라이언트
Geth & Eth
1. 커스템 제네시스 파일 생성 , CustomGenesis.json
{
"config": {
"chainId": 2017,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "200000000",
"gasLimit": "2100000",
"alloc": {
"0x81162835c5164e390c714a6e213e64c6b4f00132": { "balance": "400000000000000000000" },
"0x29d5b5488fe14e36dba76f5d667448bc9e13312d": { "balance": "300000000000000000000" }
}
}
2. 네트워크 ID 지정 ( 메인넷 1번 )
geth --datadir /privatechain init CustomGenesis.json --networkid 2017
6
이더리움 CLI 클라이언트 – 개인 네트워크 구축
Geth & Eth
1. 어카운트 생성 - Alice , > personal.newAccount(“Alice”)
2. 어카운트의 목록 조회 , > eth.accounts
3. 마이닝 후 보상을 받을 이더베이스(etherbase)를 지정 - Alice어카운트.
> miner.setEtherbase(personal.listAccounts[0])
> miner.setEtherbase("0x81162835c5164e390c714a6e213e64c6b4f00132")
4. 마이닝 실행, 마이닝 후 리워드 보상은 앞서 지정한 Alice 어카운트로 보내짐
> miner.start()
> miner.start(2) // 마이닝 쓰레드를 2개로 지정
5. 계정 잔액 조회(Wei 단위로 표시되기 때문에 1/1018로 계산 )
> eth.getBalance(eth.accounts[0]) // eth.getBalance(eth.coinbase)
> web3.fromWei(eth.getBalance(eth.coinbase),"ether")
> web3.fromWei(eth.getBalance(eth.coinbase),"shannon")
6. 생성된 블록 수 조회.
> eth.blockNumber 7
Geth CLI 사용 – Alice가 Bob에게 5이더 송금하기.
Geth & Eth
7. > personal.newAccount("Bob") // 송금을 위해 Bob 라는 계정을 추가 생성
8. Alice -> Bob 로 이더 송금 (21,000 gas is the minimum for sending a transaction )
> eth.sendTransaction({from: eth.coinbase, to: "0x29d5b5488fe14e36dba76f5d667448bc9e13312d", value:
web3.toWei(5, "ether")})
> web3.eth.sendTransaction({from:'0x81162835c5164e390c714a6e213e64c6b4f00132' ,
to:'0x29d5b5488fe14e36dba76f5d667448bc9e13312d', value:web3.toWei(5,'ether'), gasLimit: 21000,
gasPrice: 20000000000}) //gasLimit: 21000, gasPrice: 20000000000} ->옵션 사항임.
> acct1 = web3.eth.accounts[0]
> acct2 = web3.eth.accounts[1]
> web3.eth.sendTransaction({from: acct1, to: acct2, value: web3.toWei(5, 'ether'), gasLimit: 21000,
gasPrice: 20000000000})
➔ 위의 트렌젝션을 실행하면 Alice 계정에서 돈을 옮겨야 하는 데 LOCK되어 있으니 Unlock 시키라고 함.
8
Geth CLI 사용 – Alice가 Bob에게 5이더 송금하기.
ethereum 연구회
Geth & Eth
9. Alice 계정을 UNLOCK을 시킴
> personal.listWallets[0].status // 어카운트의 상태 확인”
> web3.personal.unlockAccount(eth.coinbase) // 어카운트 락 해제
> web3.personal.unlockAccount("0x81162835c5164e390c714a6e213e64c6b4f00132”)
> web3.personal.unlockAccount(eth.coinbase, 'Jay')
> personal.lockAccount(eth.coinbase) // 어카운트 락
➔ 패스워드에는 Alice 라고 계정 이름을 넣으면됨( 대소문자 구별함).
➔ 트렌젝션이 즉시 수행되지 않고 수행 대기 상태가 됨(pending). 마이닝 작업을 수행해야 함.
10. 수행대기중인 트랜잭션 확인
> eth.pendingTransactions // 수행대기중인 미확정 트렌젝션 조회
11. 마이닝 수행.
> miner.start()
> eth.pendingTransactions // 미확정 트렌젝션 재확인
> eth.getBalance(eth.accounts[1]) //다음으로 Bob의 Account에 Ether가 송금됨을 확인할 수 있음
9
Geth CLI 사용 – Alice가 Bob에게 5이더 송금하기.
ethereum 연구회
Geth 상태 모니터링 및 시각화
Metrics and Monitoring
ethereum 연구회
Metrics
Metrics 시스템의 목표는 로그와 비슷하지만, 코드 사이에 분석(카운터 변수, 공용 인터페이스, API, console hook, 기타 등)을
위한 복잡한 구조를 만들어야 할 필요 없이 임의의 Metric 모음을 추가하기만 하면 되는 것이다. 대신, 필요할 때 마다 Metric을
업데이트 해 주어야 하고, 자동으로 수집되어야 한다, API를 통해 드러나고, 질의가 가능해야 하며, 분석을 위해 시각화 할 수
있어야 한다.
11
Geth Metrics 시스템
•Meters : 물리적인 계량기(전기, 수도 등)와 비슷하게, 통과하는 무언가의 양과 속도를 측정
할 수 있다. Meter에는 특정 측정 단위(바이트, 블록, malloc 등)가 없으며, 임의의 이벤트만
센다 .
•Timers : 이벤트의 발생이 측정 될 뿐만 아니라, 기간도 수집되는 Meter의 확장. Meter와
마찬가지로 Timer도 임의의 이벤트를 측정 할 수 있지만 각각의 시간은 개별적으로
할당해야 한다.
Metrics 종류
Metrics : Geth 의 로깅 시스템
ethereum 연구회
Geth 모니터링
var (
headerInMeter =
metrics.NewMeter("eth/downloader/headers/in")
headerReqTimer =
metrics.NewTimer("eth/downloader/headers/req")
headerDropMeter =
metrics.NewMeter("eth/downloader/headers/drop")
headerTimeoutMeter =
metrics.NewMeter("eth/downloader/headers/timeout")
bodyInMeter = metrics.NewMeter("eth/downloader/bodies/in")
bodyReqTimer =
metrics.NewTimer("eth/downloader/bodies/req")
12
metrics.go
meter := metrics.NewMeter("system/memory/allocs")
timer := metrics.NewTimer("chain/inserts")
meter.Mark(n) // Record the occurrence of `n` events
timer.Update(duration) // Record an event that took `duration`
timer.UpdateSince(time) // Record an event that started at `time`
timer.Time(function) // Measure and record the execution of `function`
case packet := <-d.headerCh:
// Make sure the active peer is giving us the skeleton
headers
if packet.PeerId() != p.id {
log.Debug("Received skeleton from incorrect
peer", "peer", packet.PeerId())
break
}
headerReqTimer.UpdateSince(request)
timeout.Stop()
Geth 모니터링
13
https://github.com/ethereum/go-ethereum/wiki/Metrics-and-Monitoring
./geth monitor
ethereum 연구회

Contenu connexe

Tendances

세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발Jay JH Park
 
Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programmingihpark92
 
Blockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSBlockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSFermat Jade
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingihpark92
 
Blockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreBlockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreihpark92
 
Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Fermat Jade
 
Block chain introduction slideshare
Block chain introduction   slideshareBlock chain introduction   slideshare
Block chain introduction slidesharewonyong hwang
 
Dapp시연 150214
Dapp시연 150214Dapp시연 150214
Dapp시연 150214Jihong Shim
 
Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2Soobok Jin
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)Colin Chae
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조Logpresso
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception상현 조
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료TIMEGATE
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System상현 조
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용noerror
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server SampleGCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group SystemGCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System상현 조
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Circulus
 

Tendances (20)

세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
 
Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programming
 
Blockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSBlockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POS
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programming
 
Blockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreBlockchain 1st bitcoin_core
Blockchain 1st bitcoin_core
 
Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)
 
Block chain introduction slideshare
Block chain introduction   slideshareBlock chain introduction   slideshare
Block chain introduction slideshare
 
Dapp시연 150214
Dapp시연 150214Dapp시연 150214
Dapp시연 150214
 
Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용
 
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
 
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server SampleGCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
 
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group SystemGCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신
 

En vedette

java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰Sungchul Park
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Wooseung Kim
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013beom kyun choi
 
간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기beom kyun choi
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나beom kyun choi
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
코딩소림사 Rx java
코딩소림사 Rx java코딩소림사 Rx java
코딩소림사 Rx javaByeongsu Kang
 
알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1Byeongsu Kang
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드도형 임
 
Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Byeongsu Kang
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면Byeongsu Kang
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드도형 임
 
GStreamer-VAAPI: Hardware-accelerated encoding and decoding on Intel hardware...
GStreamer-VAAPI: Hardware-accelerated encoding and decoding on Intel hardware...GStreamer-VAAPI: Hardware-accelerated encoding and decoding on Intel hardware...
GStreamer-VAAPI: Hardware-accelerated encoding and decoding on Intel hardware...Igalia
 
U2 product For Wiseeco
U2 product For WiseecoU2 product For Wiseeco
U2 product For Wiseeco호진 하
 
Global mobile market report
Global mobile market reportGlobal mobile market report
Global mobile market reportChang Kim
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
Pure Function and Honest Design
Pure Function and Honest DesignPure Function and Honest Design
Pure Function and Honest DesignHyungho Ko
 

En vedette (20)

java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013
 
간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
코딩소림사 Rx java
코딩소림사 Rx java코딩소림사 Rx java
코딩소림사 Rx java
 
알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
 
알고리즘2
알고리즘2알고리즘2
알고리즘2
 
Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드
 
GStreamer-VAAPI: Hardware-accelerated encoding and decoding on Intel hardware...
GStreamer-VAAPI: Hardware-accelerated encoding and decoding on Intel hardware...GStreamer-VAAPI: Hardware-accelerated encoding and decoding on Intel hardware...
GStreamer-VAAPI: Hardware-accelerated encoding and decoding on Intel hardware...
 
U2 product For Wiseeco
U2 product For WiseecoU2 product For Wiseeco
U2 product For Wiseeco
 
Global mobile market report
Global mobile market reportGlobal mobile market report
Global mobile market report
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
Pure Function and Honest Design
Pure Function and Honest DesignPure Function and Honest Design
Pure Function and Honest Design
 

Similaire à 세션3. geth 클라이언트 실습 및 모니터링과 시각화

TXGX 2019_Jesse_Klaytn API Service
TXGX 2019_Jesse_Klaytn API ServiceTXGX 2019_Jesse_Klaytn API Service
TXGX 2019_Jesse_Klaytn API ServiceKlaytn
 
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Amazon Web Services Korea
 
Build the OpenStack Cloud with Neutron Networing, IceHouse
Build the OpenStack Cloud with Neutron Networing, IceHouseBuild the OpenStack Cloud with Neutron Networing, IceHouse
Build the OpenStack Cloud with Neutron Networing, IceHousejieun kim
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210Yong Joon Moon
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIHyunghun Cho
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02정출 김
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js연웅 조
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기John Kim
 
Hadoop security DeView 2014
Hadoop security DeView 2014Hadoop security DeView 2014
Hadoop security DeView 2014Gruter
 
Provisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterProvisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterJinwoong Kim
 
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...OpenStack Korea Community
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 

Similaire à 세션3. geth 클라이언트 실습 및 모니터링과 시각화 (20)

OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
 
TXGX 2019_Jesse_Klaytn API Service
TXGX 2019_Jesse_Klaytn API ServiceTXGX 2019_Jesse_Klaytn API Service
TXGX 2019_Jesse_Klaytn API Service
 
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
Build the OpenStack Cloud with Neutron Networing, IceHouse
Build the OpenStack Cloud with Neutron Networing, IceHouseBuild the OpenStack Cloud with Neutron Networing, IceHouse
Build the OpenStack Cloud with Neutron Networing, IceHouse
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
Redis
RedisRedis
Redis
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210
 
Servlet3
Servlet3Servlet3
Servlet3
 
D app ethereum
D app ethereumD app ethereum
D app ethereum
 
Blockchain
BlockchainBlockchain
Blockchain
 
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIDo IoT Yourself! - 사물 간의 연결을 위한 Open API
Do IoT Yourself! - 사물 간의 연결을 위한 Open API
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
 
Hadoop security DeView 2014
Hadoop security DeView 2014Hadoop security DeView 2014
Hadoop security DeView 2014
 
Provisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterProvisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes Cluster
 
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 

Plus de Jay JH Park

20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig Economy20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig EconomyJay JH Park
 
Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )Jay JH Park
 
Hidden 서비스 소개
Hidden 서비스 소개 Hidden 서비스 소개
Hidden 서비스 소개 Jay JH Park
 
Samsung Pay, The future of Pay
Samsung Pay, The future of PaySamsung Pay, The future of Pay
Samsung Pay, The future of PayJay JH Park
 
클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatONJay JH Park
 
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 Jay JH Park
 

Plus de Jay JH Park (6)

20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig Economy20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig Economy
 
Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )
 
Hidden 서비스 소개
Hidden 서비스 소개 Hidden 서비스 소개
Hidden 서비스 소개
 
Samsung Pay, The future of Pay
Samsung Pay, The future of PaySamsung Pay, The future of Pay
Samsung Pay, The future of Pay
 
클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON
 
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
 

세션3. geth 클라이언트 실습 및 모니터링과 시각화

  • 1. Geth 클라이언트 실습 / 시각화 이재진/김현욱 lightsky340@gmail.com kuvh@live.co.kr Byzantium Megara Geth1.7 ethereum 연구회
  • 3. 실습 시나리오 및 환경 설명 3 Geth 설치 부터 채굴까지 ~ Alice Bob Miner : Bob 에게 5 이더 송금 : Alice 로부터 5 이더 수금 : 트랜잭션 확인(채굴) ethereum 연구회
  • 4. Geth & Eth - 이더리움의 전체 기능을 사용할 수 있는 풀 클라이언트로서 다중 인터페이스 제공 : 커맨드라인 모드 의 부가 명령어로 대화형 자바스크립트 콘솔 과 JSON-RPC 서버 - Geth 커맨드라인 : geth [options] command [--command options] [arguments...] $ geth --identity "JayChain" --rpc --rpcport "8800" --rpccorsdomain "*" --datadir "/Users/jay/privatechain" --port "30303" --nodiscover --rpcapi "db,eth,net,web3" --networkid 2017 console --identity "JayChain" // 내 프라이빗 노드 식별자. --rpc // RPC 인터페이스 가능하게 함. --rpcport "8800" // RPC 포트 지정 --rpccorsdomain "*" // 접속가능한 RPC 클라이언트 URL 지정 , 가능한 *(전체 허용) 보다는 URL을 지정하는 게 보안상 좋 음. --datadir "/Users/jay/privatechain" // 커스텀 디렉토리 지정 --port "30303" // 네트웍 Listening Port 지정 --nodiscover // 같은 제네시스 블록과 네트웍ID에 있는 블록에 연결 방지 --rpcapi "db,eth,net,web3" // RPC에 의해서 접근을 허락할 API --networkid 2017 console // 출력을 콘솔로 함. 4 이더리움 CLI 클라이언트
  • 5. Geth & Eth - 대화형 자바스크립트 옵션 ( console , attach , js ) - 이더리움은 자바스크립트 런타임 환경(JSRE)을 대화형 콘솔 또는 비대화형 스크립트 모드로 제공 $ geth console // 콘솔에서 커맨드 라인 모드로 JSRE 사용 $ geth attach [ipc:/some/custom/path | rpc:http://127:0.0.1:8545] // 작동중인 geth 노드의 콘솔에 연결 후 사용 $ geth console 2 >> /dev/null // 화면에 log를 출력하지 않는다. $ geth js demo.js 2 >> geth.log // 비대화형 모드 , demo.js 파일을실행한다. - 커맨드라인 모드 : JSON-RPC 서버 옵션 - JSON-RPC는 경량 RPC 프로토콜을 통해 이더리움을 호출하고 그 결과를 JSON 포맷으로 받음. - 이더리움 RPC 인터페이스를 제공하는 Web3.js 라이브러리를 사용하여 자바 스크립트 응용 프로그램내에서이더리 움 노드 호출 - 기본 JSON-RPC 기본 엔드포인트 : http://localhost:8545 - Geth 구동 : $ geth –rpc –rpcaddr <IP주소 > --rpcport <포트번호> - Geth 콘솔: >> admin.startRPC(IP주소, 포트번호) 5 이더리움 CLI 클라이언트
  • 6. Geth & Eth 1. 커스템 제네시스 파일 생성 , CustomGenesis.json { "config": { "chainId": 2017, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "difficulty": "200000000", "gasLimit": "2100000", "alloc": { "0x81162835c5164e390c714a6e213e64c6b4f00132": { "balance": "400000000000000000000" }, "0x29d5b5488fe14e36dba76f5d667448bc9e13312d": { "balance": "300000000000000000000" } } } 2. 네트워크 ID 지정 ( 메인넷 1번 ) geth --datadir /privatechain init CustomGenesis.json --networkid 2017 6 이더리움 CLI 클라이언트 – 개인 네트워크 구축
  • 7. Geth & Eth 1. 어카운트 생성 - Alice , > personal.newAccount(“Alice”) 2. 어카운트의 목록 조회 , > eth.accounts 3. 마이닝 후 보상을 받을 이더베이스(etherbase)를 지정 - Alice어카운트. > miner.setEtherbase(personal.listAccounts[0]) > miner.setEtherbase("0x81162835c5164e390c714a6e213e64c6b4f00132") 4. 마이닝 실행, 마이닝 후 리워드 보상은 앞서 지정한 Alice 어카운트로 보내짐 > miner.start() > miner.start(2) // 마이닝 쓰레드를 2개로 지정 5. 계정 잔액 조회(Wei 단위로 표시되기 때문에 1/1018로 계산 ) > eth.getBalance(eth.accounts[0]) // eth.getBalance(eth.coinbase) > web3.fromWei(eth.getBalance(eth.coinbase),"ether") > web3.fromWei(eth.getBalance(eth.coinbase),"shannon") 6. 생성된 블록 수 조회. > eth.blockNumber 7 Geth CLI 사용 – Alice가 Bob에게 5이더 송금하기.
  • 8. Geth & Eth 7. > personal.newAccount("Bob") // 송금을 위해 Bob 라는 계정을 추가 생성 8. Alice -> Bob 로 이더 송금 (21,000 gas is the minimum for sending a transaction ) > eth.sendTransaction({from: eth.coinbase, to: "0x29d5b5488fe14e36dba76f5d667448bc9e13312d", value: web3.toWei(5, "ether")}) > web3.eth.sendTransaction({from:'0x81162835c5164e390c714a6e213e64c6b4f00132' , to:'0x29d5b5488fe14e36dba76f5d667448bc9e13312d', value:web3.toWei(5,'ether'), gasLimit: 21000, gasPrice: 20000000000}) //gasLimit: 21000, gasPrice: 20000000000} ->옵션 사항임. > acct1 = web3.eth.accounts[0] > acct2 = web3.eth.accounts[1] > web3.eth.sendTransaction({from: acct1, to: acct2, value: web3.toWei(5, 'ether'), gasLimit: 21000, gasPrice: 20000000000}) ➔ 위의 트렌젝션을 실행하면 Alice 계정에서 돈을 옮겨야 하는 데 LOCK되어 있으니 Unlock 시키라고 함. 8 Geth CLI 사용 – Alice가 Bob에게 5이더 송금하기. ethereum 연구회
  • 9. Geth & Eth 9. Alice 계정을 UNLOCK을 시킴 > personal.listWallets[0].status // 어카운트의 상태 확인” > web3.personal.unlockAccount(eth.coinbase) // 어카운트 락 해제 > web3.personal.unlockAccount("0x81162835c5164e390c714a6e213e64c6b4f00132”) > web3.personal.unlockAccount(eth.coinbase, 'Jay') > personal.lockAccount(eth.coinbase) // 어카운트 락 ➔ 패스워드에는 Alice 라고 계정 이름을 넣으면됨( 대소문자 구별함). ➔ 트렌젝션이 즉시 수행되지 않고 수행 대기 상태가 됨(pending). 마이닝 작업을 수행해야 함. 10. 수행대기중인 트랜잭션 확인 > eth.pendingTransactions // 수행대기중인 미확정 트렌젝션 조회 11. 마이닝 수행. > miner.start() > eth.pendingTransactions // 미확정 트렌젝션 재확인 > eth.getBalance(eth.accounts[1]) //다음으로 Bob의 Account에 Ether가 송금됨을 확인할 수 있음 9 Geth CLI 사용 – Alice가 Bob에게 5이더 송금하기. ethereum 연구회
  • 10. Geth 상태 모니터링 및 시각화 Metrics and Monitoring ethereum 연구회
  • 11. Metrics Metrics 시스템의 목표는 로그와 비슷하지만, 코드 사이에 분석(카운터 변수, 공용 인터페이스, API, console hook, 기타 등)을 위한 복잡한 구조를 만들어야 할 필요 없이 임의의 Metric 모음을 추가하기만 하면 되는 것이다. 대신, 필요할 때 마다 Metric을 업데이트 해 주어야 하고, 자동으로 수집되어야 한다, API를 통해 드러나고, 질의가 가능해야 하며, 분석을 위해 시각화 할 수 있어야 한다. 11 Geth Metrics 시스템 •Meters : 물리적인 계량기(전기, 수도 등)와 비슷하게, 통과하는 무언가의 양과 속도를 측정 할 수 있다. Meter에는 특정 측정 단위(바이트, 블록, malloc 등)가 없으며, 임의의 이벤트만 센다 . •Timers : 이벤트의 발생이 측정 될 뿐만 아니라, 기간도 수집되는 Meter의 확장. Meter와 마찬가지로 Timer도 임의의 이벤트를 측정 할 수 있지만 각각의 시간은 개별적으로 할당해야 한다. Metrics 종류 Metrics : Geth 의 로깅 시스템 ethereum 연구회
  • 12. Geth 모니터링 var ( headerInMeter = metrics.NewMeter("eth/downloader/headers/in") headerReqTimer = metrics.NewTimer("eth/downloader/headers/req") headerDropMeter = metrics.NewMeter("eth/downloader/headers/drop") headerTimeoutMeter = metrics.NewMeter("eth/downloader/headers/timeout") bodyInMeter = metrics.NewMeter("eth/downloader/bodies/in") bodyReqTimer = metrics.NewTimer("eth/downloader/bodies/req") 12 metrics.go meter := metrics.NewMeter("system/memory/allocs") timer := metrics.NewTimer("chain/inserts") meter.Mark(n) // Record the occurrence of `n` events timer.Update(duration) // Record an event that took `duration` timer.UpdateSince(time) // Record an event that started at `time` timer.Time(function) // Measure and record the execution of `function` case packet := <-d.headerCh: // Make sure the active peer is giving us the skeleton headers if packet.PeerId() != p.id { log.Debug("Received skeleton from incorrect peer", "peer", packet.PeerId()) break } headerReqTimer.UpdateSince(request) timeout.Stop()