본문 바로가기
정보공유

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

by 날고싶은커피향 2018. 12. 5.

gteth 클라이언트 실습 및 모니터링과 시각화


세션3. geth 클라이언트 실습 및 모니터링과 시각화
1. Geth 클라이언트 실습 / 시각화 이재진/김현욱 lightsky340@gmail.com kuvh@live.co.kr Byzantium Megara Geth1.7 ethereum 연구회
2. Geth 시작하기 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()
13. Geth 모니터링 13 https://github.com/ethereum/go-ethereum/wiki/Metrics-and-Monitoring ./geth monitor ethereum 연구회


반응형