Skip to content

Commit

Permalink
add: install geth, private ethereum network
Browse files Browse the repository at this point in the history
  • Loading branch information
5jisoo committed Dec 13, 2024
1 parent 71fecbc commit 24cdffb
Show file tree
Hide file tree
Showing 5 changed files with 215 additions and 0 deletions.
71 changes: 71 additions & 0 deletions _posts/2024-12-13-install-geth.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
---
title: Geth 설치
date: 2024-12-13 17:36:00 +/-TTTT
categories: [Security, Blockchain]
tags: [security, blockchain, geth, ethereum, dapp]
math: true
---

## 블록체인과 스마트 컨트랙트

### 블록체인
데이터를 안전하게 저장하기 위한 자료구조
- 데이터를 블록에 저장하고, 그 블록들이 연결된 구조를 블록체인이라고 한다.

### 스마트 컨트랙트

블록체인에 넣어서 실행시킬 수 있는 프로그램
- 블록체인에 저장되어 값이나 프로그램이 절대로 위/변조되지 않는다.
- '무결성'을 보장함.
- 하지만, 프로그램을 넣거나 변숫값을 읽고 쓰기 위해서는 비용이 발생한다.
- 주언어: Solidity

## Geth (Go Ethereum)

고(Go)에서 구현된 전체 이더리움 노드를 실행하기 위한 다목적 명령 줄 도구.
- CLI 기반의 이더리움 네트워크를 제공함.

### 이더리움 네트워크
1. main 네트워크 : '진짜' 이더리움 (비싼 이더를 구매해야 함..)
2. 사설 네트워크 : 이더리움 네트워크를 개인이 운영하는 것.
- 개인이 운영하기 위해 서버 / 계좌.. 등등의 리소스가 필요함
3. test 네트워크 : 연습용 네트워크
- 미리 만들어둔 사설 네트워크

이 중 사설 네트워크를 구축하기 위해 Geth를 사용할 예정.

### Geth 설치 방법

홈페이지 다운
- https://geth.ethereum.org/downloads

(mac os) brew 이용
```zsh
% brew tap ethereum/ethereum
% brew install ethereum
```

## 트러블 슈팅

### Failed to register the Ethereum service

![img](/assets/img/2024-12-13-install-geth/0.png){: w="700" }

```
Fatal: Failed to register the Ethereum service: only PoS networks are supported, please transition old ones with Geth v1.13.x
```

brew 명령어를 사용하고 `geth`를 실행하였는데 다음과 같은 오류가 발생하였다.

따라서 uninstall 후 책과 동일한 버전을 사용하기 위해 1.8.13 버전을 홈페이지에서 수동으로 다운 받아주었다. (실행 파일은 /user/local/bin/ 위치로 옮겨주어야 한다.)

```zsh
% brew uninstall ethereum
```

만약 포트 중복 에러가 발생한다면 다음 명령어를 통해 열린 포트 목록을 확인하고, 직접 닫아주면 된다.

```zsh
% sudo lsof -PiTCP -sTCP:LISTEN
% sudo kill -9 {PID}
```
144 changes: 144 additions & 0 deletions _posts/2024-12-13-private-ethereum-network.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
---
title: 사설 Ethereum 네트워크 생성하기
date: 2024-12-13 18:40:00 +/-TTTT
categories: [Security, Blockchain]
tags: [security, blockchain, geth, ethereum]
math: true
---


### 계좌 만들기

```shell
% geth --datadir {경로} account new
```

### 만들어진 계좌 확인하기

```shell
% geth --datadir {경로} account list
```

![img](/assets/img/2024-12-13-private-ethereum-network/0.png){: w="700" }


### Genesis Block을 위한 설정

```shell
% puppeth
```

이를 실행하면 여러 옵션을 선택해야 한다.

```shell
jisoo@jisooui-MacBookPro ~ % puppeth
+-----------------------------------------------------------+
| Welcome to puppeth, your Ethereum private network manager |
| |
| This tool lets you create a new Ethereum network down to |
| the genesis block, bootnodes, miners and ethstats servers |
| without the hassle that it would normally entail. |
| |
| Puppeth uses SSH to dial in to remote servers, and builds |
| its network components out of Docker containers using the |
| docker-compose toolset. |
+-----------------------------------------------------------+

// 네트워크 이름 설정

Please specify a network name to administer (no spaces or hyphens, please)
> hello

Sweet, you can set this via --network=hello next time!

INFO [12-13|18:52:30.925] Administering Ethereum network name=hello
WARN [12-13|18:52:30.933] No previous configurations found path=/Users/jisoo/.puppeth/hello

// 새로운 genesis 파일 생성

What would you like to do? (default = stats)
1. Show network stats
2. Configure new genesis
3. Track new remote server
4. Deploy network components
> 2

// POW 합의 알고리즘 선택

Which consensus engine to use? (default = clique)
1. Ethash - proof-of-work
2. Clique - proof-of-authority
> 1

// 선입금 계정 설정 - 그냥 enter 누르면 기본 설정.

Which accounts should be pre-funded? (advisable at least one)
> 0x

// 체인 / 네트워크 id 설정 - 그냥 enter 눌러 기본 설정.

Specify your chain/network ID if you want an explicit one (default = random)
>
INFO [12-13|18:57:01.828] Configured new genesis block

// genesis 파일 관리 (2번) 선택

What would you like to do? (default = stats)
1. Show network stats
2. Manage existing genesis
3. Track new remote server
4. Deploy network components
> 2

// 생성한 genesis 파일 내보내기

1. Modify existing fork rules
2. Export genesis configuration
3. Remove genesis configuration
> 2

// 기본 그대로 enter 누름.

Which file to save the genesis into? (default = hello.json)
>
INFO [12-13|19:00:41.038] Exported existing genesis block

```
이렇게 실행하면 hello.json 파일이 생성됨.
<br>
```shell
%mv hello.json firstgeth
```
위 명령어를 통해 json파일을 데이터폴더로 이동시켜주자.
> 최신 버전의 geth를 사용하는 경우 중간에 폴더 선택하는 과정이 존재한다. <br>
> 버전에 따라 선택 과정이 상이한 것 같으니 유의하자!
{: .prompt-tip}
### Genesis Block 생성하기
```shell
% geth --datadir {경로} init {json 파일 위치}
```
### Ethereum 실행하기
```shell
% geth --datadir {경로} console
```
콘솔을 실행하면 명령어를 입력할 수 있다.
- 보통의 명령어는 `eth.`로 시작한다.
```shell
> eth.accounts
```
![img](/assets/img/2024-12-13-private-ethereum-network/1.png){: w="500" }{: .shadow }
Binary file added assets/img/2024-12-13-install-geth/0.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 24cdffb

Please sign in to comment.