-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgeth_bak.html
281 lines (276 loc) · 11.8 KB
/
geth_bak.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
<!DOCTYPE html>
<html>
<head>
<title>Session 2. Geth 실습 가이드</title>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/earlyaccess/nanumgothic.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/earlyaccess/nanumgothiccoding.css" rel="stylesheet">
<link href="css/Styles.css" rel="stylesheet">
</head>
<body>
<h1 id="main_title" align="center">Session 2. Geth 실습 가이드</h1>
<!--Step 1-->
<div class="steps">
<h3 class="sub_title">Step 1. Geth 설치 및 실행</h3>
<div class="content">
<ol>
<li>Geth 다운로드</li>
<p>운영체제에 맞는 Geth 클라이언트를 다운로드하세요.<a href="https://geth.ethereum.org/downloads/" target="_blank">링크</a></p><br><br>
<li>Geth 설치하기</li>
<p>Windows: 인스톨러의 가이드에 따라 설치하세요.(환경변수 자동 등록)</p>
<p>Mac: Users/Username 디렉토리에 설치하세요.(Home 디렉토리)</p><br><br>
<li>Geth 실행하기</li>
<p>콘솔에 아래와 같이 입력하여 Geth를 실행하세요.</p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td>
<p><code>geth console</code></p>
</td>
</tr>
</table><br><br>
<h3 class="step_final">완료조건: 프롬프트가 깜빡이는지 확인하세요.</h3>
<img src="img/geth_run.png" width="800px" border="1px">
</ol>
</div>
</div>
<!--Step 2-->
<div class="steps">
<h3 class="sub_title">Step 2. Private network 접속(1)</h3>
<div class="content">
<ol>
<li>Genesis.json 다운로드</li>
<p>실습용 Private chain에 연결하기 위해 Genesis.json 파일을 다운로드하세요.<a href="genesis/genesis.json" download>링크</a></p>
<p>※ Genesis.json 다운로드 Directory(권장)</p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td>
<p><code>Windows: C:\Users\Username</code></p>
<p><code>Mac: Users\Username</code></p>
</td>
</tr>
</table><br><br>
<li>Genesis initialization</li>
<p>콘솔에 아래와 같이 입력하여 Geth를 init하세요.</p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td>
<p><code>geth --datadir="./ether_study" init genesis.json</code></p>
</td>
</tr>
</table><br><br>
<h3 class="step_final">완료조건: Successfully wrote genesis state 메시지 출력</h3>
<img src="img/genesis_init.png" width="800px" border="1px">
</ol>
</div>
</div>
<!--Step 3-->
<div class="steps">
<h3 class="sub_title">Step 3. Private network 접속(2)</h3>
<div class="content">
<ol>
<li>Console mode로 Geth 실행하기</li>
<p>콘솔에 아래와 같이 입력하여 Geth를 실행하세요.</p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td>
<p><code>geth --datadir="./ether_study" --networkid 15 --port 8080 console</code></p>
</td>
</tr>
</table><br><br>
<li>CLI를 이용해 Bootnode에 직접 접속하기</li>
<p>콘솔에 아래와 같이 입력하여 Bootnode에 직접 접속하세요. </p><br>
<img src="img/bootnode.png"><br><br>
<p><b>Bootnode 1</b><font color="=#000000" style="font-size: 12pt"> 좌석번호 1번 ~ 8번까지 1번 Bootnode에 접속해주세요.</font></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>admin.addPeer("enode://050e541ba9321debf17e0e020caef78e0dfb20852f85b88cf2019885f50ace72d1f4eb650f73173df8556949e7e7c60a703fa32993c6cbdbef683a079f00b8f3@13.124.226.8:8080")</code></p>
</td>
</tr>
</table><br>
<p><b>Bootnode 2</b><font color="=#000000" style="font-size: 12pt"> 좌석번호 9번 ~ 16번까지 2번 Bootnode에 접속해주세요.</font></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>admin.addPeer("enode://9d2b72b673b8daf33d3132aaa12e18b42cfa21d4f4fee9f9c3eb7775ce9b0726e9c60b1af57b0d90ae03914ca3803d43dbef2ec7683a2f38f63363bdb686a84b@13.125.35.226:8080")</code></p>
</td>
</tr>
</table><br>
<p><b>Bootnode 3</b><font color="=#000000" style="font-size: 12pt"> 좌석번호 17번 ~ 24번까지 3번 Bootnode에 접속해주세요.</font></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>admin.addPeer("enode://94f9e6aa37d48560fdf4b8f6144cd9c11e3f33009462356215226778112f37e253a55c10d7e3703a639a0f130331c12e740c36d202139243e9181c0adca7c2a1@52.78.81.206:8080")</code></p>
</td>
</tr>
</table><br>
<p><b>Bootnode 4</b><font color="=#000000" style="font-size: 12pt"> 좌석번호 25번 ~ 32번까지 4번 Bootnode에 접속해주세요.</font></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>admin.addPeer("enode://3387f881cfc46624928642bad2de1ca79e9d624e59717ffab1be362576daedbb9820e438fac5ed6b21dbefed7c03f5a41b0c28970fb93b7951def04e2424dc11@13.124.217.65:8080")</code></p>
</td>
</tr>
</table><br>
<p><b>Bootnode 5</b><font color="=#000000" style="font-size: 12pt"> 좌석번호 33번 ~ 40번까지 5번 Bootnode에 접속해주세요.</font></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>admin.addPeer("enode://af6af1fbd314a6bdc2920f623a555bff33099f4f6c9213858a63913c5cd0a5576e16a27bfd1220bddb7325071b0b2b4cdac8a7c5288b405035a1595d80c905ed@13.125.25.243:8080")</code></p>
</td>
</tr>
</table><br><br>
<h3 class="step_final">완료조건: CLI명령 admin.peers 입력 시 연결된 Peer들의 정보가 출력</h3>
<img src="img/admin_peers.png" width="800px" border="1px">
</ol>
</div>
</div>
<!--Step 4-->
<div class="steps">
<h3 class="sub_title">Step 4. CLI 실습</h3>
<div class="content">
<ol>
<li>Account 생성하기</li>
<p>콘솔에 아래와 같이 입력하여 Account를 생성하세요.</p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td>
<p><code>personal.newAccount()</code></p>
</td>
</tr>
</table><br><br>
<li>생성한 Account 확인하기</li>
<p>콘솔에 아래와 같이 입력하여 보유한 Account의 List를 확인할 수 있습니다. </p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td>
<p><code>personal.listAccounts</code></p>
</td>
</tr>
</table><br><br>
<li>생성한 Account의 Balance 확인하기</li>
<p>콘솔에 아래와 같이 입력하여 생성한 Account의 Balance를 확인할 수 있습니다.</p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td>
<p><code>eth.getBalance(personal.listAccounts[0])</code></p>
</td>
</tr>
</table><br><br>
<li>생성한 Account 삭제하기</li>
<p>실습을 위해 ./ether_study/keystore 에 있는 UTC--... 파일을 삭제하세요.</p><br>
<li>실습용 Account 다운로드하기</li>
<p>이 <a href="Account_download.html" target="_blank">링크</a>에서 본인의 좌석번호와 같은 실습용 Account를 다운로드한 후 ./ether_study/keystore에 압축을 해제하세요.</p><br><br>
<li>실습용 Account의 Balance 확인하기</li>
<p>콘솔에 아래와 같이 입력하여 실습용 Account의 Balance를 확인할 수 있습니다.</p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td>
<p><code>eth.getBalance(personal.listAccounts[0])</code></p>
</td>
</tr>
</table><br><br>
<h3 class="step_final">완료조건: 실습용 Account의 Balance = 100.1ETH 확인</h3>
<img src="img/ether_balance.png" width="800px" border="1px">
</ol>
</div>
</div>
<!--Step 5-->
<div class="steps">
<h3 class="sub_title">Step 5. Transaction의 처리과정</h3>
<div class="content">
<ol>
<li>Ether transfer</li>
<p>콘솔에 아래와 같이 입력하여 강사의 Account로 100ETH를 송금하세요.</p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>personal.sendTransaction({from:personal.listAccounts[0],to:"0x4906e16b0875b1988b8d3d95ec731d05f9430646",value:web3.toWei(100,"ether")},"1")</code></p>
</td>
</tr>
</table><br><br>
<h3 class="step_final">완료조건: 콘솔에 Submitted transaction 메시지 확인</h3>
<img src="img/sendtransaction_receipt.png" width="800px" border="1px"><br><br><br><br>
<li>Pending Tx 확인하기</li>
<p>아직 블럭에 담기지 못한 Tx은 각 노드 Local의 Transaction pool에 저장됩니다.</p>
<p><b>Txpool 상태확인</b></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>txpool.status</code></p>
</td>
</tr>
</table><br>
<p><b>Txpool 상세내역 확인</b></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>txpool.content</code></p>
</td>
</tr>
</table><br>
<p><b>송금한 금액과 수수료 확인</b></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>txpool.inspect</code></p>
</td>
</tr>
</table><br><br>
<li>Mining으로 Tx을 Block에 담아 처리하기<b>(강사만 진행합니다.)</b></li>
<p><b>Block reward를 수취할 Account를 coinbase로 세팅</b></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>miner.setEtherbase(personal.listAccounts[1])</code></p>
</td>
</tr>
</table><br>
<p><b>Mining 시작</b></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>miner.start()</code></p>
</td>
</tr>
</table><br>
<p><b>Coinbase Account의 Balance 증가 확인</b></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>eth.getBalance(personal.listAccounts[1])</code></p>
</td>
</tr>
</table><br>
<p><b>Mining한 Block 확인</b></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>eth.getBlock(확인할 블럭 넘버)</code></p>
</td>
</tr>
</table><br>
<img src="img/mining_block.png" width="800px" border="1px"><br><br><br><br>
<p><b>강사의 Account Balance 증가 확인</b></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>eth.getBalance(personal.listAccounts[0])</code></p>
</td>
</tr>
</table><br><br>
<p><b>실습용 Account Balance 차감 확인</b></p>
<table border="0px" width="800px" bgcolor="black" cellpadding="10pt">
<tr>
<td style="word-break: break-all">
<p><code>eth.getBalance(personal.listAccounts[0])</code></p>
</td>
</tr>
</table><br><br>
<h3 class="step_final">완료조건: 강사의 Account Balace = 4000ETH 확인<br>강사의 안내에 따라 직접 Mining을 시도해보세요.</h3>
<p>Geth의 추가적인 기능은 이더리움 Wiki를 확인하세요.<a href="https://github.com/ethereum/go-ethereum/wiki/Management-APIs#list-of-management-apis" target="_blank">링크</a>
</ol>
</div>
</div>
</body>
</html>