Skip to content

Commit

Permalink
Add: geth 외부 접속
Browse files Browse the repository at this point in the history
  • Loading branch information
5jisoo committed Dec 17, 2024
1 parent 4236ad0 commit 4aa1f32
Show file tree
Hide file tree
Showing 7 changed files with 114 additions and 3 deletions.
78 changes: 78 additions & 0 deletions _posts/2024-12-17-geth-external-access.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
---
title: 외부 Application에서 Geth에 연결
date: 2024-12-17 11:54:00 +/-TTTT
categories: [Security, Blockchain]
tags: [security, blockchain, geth, ethereum]
math: true
---

## 작업 환경

- masOS M1
- Geth Version: 1.10.17-stable
- Solidity Version: 0.8.19+commit.7dd6d404.Emscripten.clang

## Geth 콘솔 설정하기

콘솔이 아닌 Node.js와 같은 외부 프로그램에서 Geth에 접근할 수 있게 하기 위해 Geth를 실행할 때 다음 옵션들을 추가해야 함.

- `--http` : HTTP-RPC 서버를 활성화 하여, 외부에서 블록체인 서버에 접근 가능하도록 함.
- `--http.addr` :
- `--http.port` : 외부에서 접근하기 위한 포트 번호 지정
- `--http.api` : 외부에서 접근할 수 있는 명령어들을 지정
- `--http.corsdomain`
- `--allow-insecure-unlock` : 외부에서 계좌 잠금 해제를 할 수 있게 하기 위한 명령어

예를 들어 다음과 같이 수행한다.
```shell
% geth --datadir "data" --http --http.addr "0.0.0.0" --http.port "7326" --http.api "web3,eth,personal,net" --http.corsdomain "*" --allow-insecure-unlock --nodiscover console
```

> --http 옵션은 Geth v1.10.0 부터 지원하고 있다!
{: .prompt-tip}

## Node.js로 Geth에 접속

Node.js나 Javascript에서 geth로 접속하기 위해서는 Web3 모듈이 필요하다.

> Web3 최신 버전이 버그로 연결이 잘 되지 않아... 옛날 버전인 0.20.0을 사용해줄 예정.
```shell
% npm install [email protected]
```

Node.js를 사용하여 자바스크립트 코드를 작성하자.

provider를 설정한 뒤, 마지막에 잘 연결되었는지 확인하기 위해 계정의 주소를 로그로 찍도록 설정하였다.

```js
const Web3 = require("web3");
const web3 = new Web3();

web3.setProvider(new web3.providers.HttpProvider("http://127.0.0.1:7326"));

console.log(web3.eth.accounts[0]);
```

> provider 주소는 같은 컴퓨터이기에 localhost인 `127.0.0.1`로, <br>
> 포트 번호는 geth 콘솔을 실행하는 포트와 동일한 `7326`번으로 설정해주어야 한다.
{: .prompt-info}

![img](/assets/img/2024-12-17-geth-external-access/0.png){: w="500" }{: .shadow }
_계정의 주소가 출력된다._

마찬가지로 geth콘솔에서 `eth.accounts[0]`를 통해 계정의 주소를 출력하면 Node.js로 확인했던 동일한 주소를 확인할 수 있다.

![img](/assets/img/2024-12-17-geth-external-access/1.png){: w="600" }
_동일한 account[0] 주소 확인 가능_

다른 명령어(ex 계좌 확인)도 web3를 앞에 붙여 명령어를 확인할 수 있다!

```js
console.log(web3.eth.getBalance(eth.accounts[0]));
```

```shell
% node test.js
Balance: 38000000000000000000
```
39 changes: 36 additions & 3 deletions _posts/2024-12-17-smart-contract-variable-update.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,27 @@ date: 2024-12-17 10:04:00 +/-TTTT
categories: [Security, Blockchain]
tags: [security, blockchain, geth, ethereum, solidity]
math: true
image:
path: /assets/img/2024-12-17-smart-contract-variable-update/1.png
alt: <스마트 컨트랙트 변수 업데이트> 썸네일
---

## 작업 환경

- masOS M1
- Geth Version: 1.10.17-stable
- Solidity Version: 0.8.19+commit.7dd6d404.Emscripten.clang

## 스마트 컨트랙트 작성하기

다음 increase(), showCount() 함수를 작성해보자.
- val을 파라미터로 받아 count에 더해주고, 반환하는 `increase()` 함수
- count를 반환하는 `showCount()` 읽기 (view) 함수

```
// SPDX-License-Identifier : UNLICENSED
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.4.24;
pragma solidity 0.8.19;
contract number {
int8 private count = 0;
Expand Down Expand Up @@ -247,4 +256,28 @@ INFO [12-17|11:14:54.745] Submitted transaction fullhash=0xa2
> miner.stop()
> ni.showCount.call()
12
```
```

![img](/assets/img/2024-12-17-smart-contract-variable-update/0.png){: w="700" }
_변수 변경 완료!_

## 블록 연결 상태 확인하기

만들어진 블록이 블록체인에 연결되었는지 어떻게 확인할까?

먼저 트랜잭션이 실행되고 난 뒤, `eth.getTransaction()`을 통해 트랜잭션 정보를 확인하면?

다음과 같이 `blockHash`값과 `blockNumber`값이 `null`로 표기되어있는 것을 확인할 수 있다.

![img](/assets/img/2024-12-17-smart-contract-variable-update/1.png){: w="700" }

채굴을 진행하고 나면?

```shell
> miner.start()
> miner.stop()
```

다음과 같이 `blockHash`값과 `blockNumber`값을 확인할 수 있고, 또한 increase() 함수가 적용되어 `ni.showCount.call()`를 실행하였을 때 20이 더해진 32가 출력되는 것을 확인할 수 있다.

![img](/assets/img/2024-12-17-smart-contract-variable-update/2.png){: w="700" }
Binary file added assets/img/2024-12-17-geth-external-access/0.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/img/2024-12-17-geth-external-access/1.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.
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 4aa1f32

Please sign in to comment.