전에는 서버에서 단순 Parity 작동에 대해서 알아봤는데 이번에는 그 서버를 노드로 삼고, 인터넷이 안되는 망에서 그 노드에 접근하여 sync정보를 가져오는 것을 알아본다.

 

노드 서버는 인터넷이 되므로 해킹위험이 있어 노드에 슬레이브 서버를 연결해서 많이 사용한다.

 

앞서 노드 서버에서는 아래 명령어를 가동하여 작동시켰다. 

$./parity --no-warp --no-ws --no-jsonrpc --no-ipc --port=30301 --chain=ethereum --base-path=/WALLETDATAS/ethereum --db-path=/WALLETDATAS/ethereum/chains > /WALLETDATAS/ethereum/debug.log --log-file=/var/log/ethereum/parity.log 2>&1

개인적으로 --no-warp를 적어주는 것이 좋다. 아니면 아래처럼 스냅샷찍다가 멈춰버리는 경우가 잦다.

 

 

노드서버의 아이피와 포트는 172.16.0.131:30301로 둔다.

 

그리고 슬레이브 서버 아이피는 10.26.10.118로 둔다.

 

1. TOML파일 설정

basepath 안에 eth-config.toml 파일에 아래와 같이 값을 입력한다.

 

author를 공란으로 두면 에러가 뜨므로 자신의 아이피를 적는다.

# 뒤에 것들은 적용되지 않는 코드이므로 무시해도 된다.

 

eth-config.toml

# This config should be placed in following path:
#   %UserProfile%\AppData\Roaming\Parity\Ethereum\config.toml

[parity]
# Local Development Chain
#chain = "mainnet"
# Blockchain and settings will be stored in D:\blocks/Parity\Ethereum.
#base_path = "D:\\blocks/Parity\\Ethereum"
# Parity databases will be stored in D:\blocks\Parity\Ethereum\chains.
#db_path = "D:\\blocks\\Parity\\Ethereum\\chains"

#[ui]
# Wallet will be accessible on port 8181.
#port = 8180

[account]
# From: [conco,test] you'll be able to send tranasactions without password.
#unlock = [0x6E27B320EdAae409438BDB05AC636f51fc920BA4, " "]

[network]
# Parity will listen for connections on port 30301.
#reserved_only = true
#reserved_peers = "./myPrivateNetwork.txt"
port = 30301

[rpc]
port = 10110
interface = "0.0.0.0"
hosts = ["all"]
apis = ["web3", "eth", "net", "parity", "traces", "rpc", "parity_accounts","personal"]

[websockets]
# UI won't work and WebSockets server will be not available.
#웹소켓을 안쓰니 안적어도 무방
port = 11010
#disable = true

[ipc]
# You won't be able to use IPC to interact with Parity.
#disable = true
#path = "D:\\blocks\\Parity\\Ethereum\\chains\\jsonrpc.ipc"
# Only selected APIs will be exposed over this interface.
#apis = ["web3", "eth", "net", "parity", "parity_accounts", "traces", "rpc"]

#[footprint]
# Increase performance on HDD.
#db_compaction = "hdd"

[mining]
#아래 지갑주소는 본인의 주소로 입력한다.
author = "0x00e3F02bb8aaE3927Fcd4fa89caD35730aEE0E58" 

[misc]
#log_file = "C:\\ETHLOG\\Ethereum.log"

위를 요약하면 노드의 30301포트 네트워크로 접속하여 10110포트로 쏴준다는 뜻이다.

따라서 지갑에 접속할 때 10.26.10.118 Host의 10110 port로 접속하면 된다.

 

2. enode 설정

노드에 연결을 하려면 enode 값이 필요하다.

노드서버를 실행시키면 나오는 enode값을 저장해두고 basepath에 txt 문서를 하나 만들어 enode값을 입력한다.

여기서 myPrivateNetwork.txt 파일을 만들어 그안에 아래 코드를 저장한다.

enode://ef2d9aaea37b14746688fedf9695cda53ef4ffdd123f74a0022610e93a00e7ce03564fca51b10befad86dff2ebc5d7b704a2537a51a9322a401127adef35072f@172.26.10.130:30301

 

3. 패리티 실행

아래처럼 입력하여 슬레이브를 실행한다.

--reserved-peers 명령어를 통해서 프라이빗한 네트워크를 생성한다.

그리고 -c 를 붙여 toml파일에 설정값을 적용시킨다. -c가 아닌 --config로 써도 된다.

 

$./parity --no-persistent-txqueue --no-warp --port=30301 --chain=ethereum --base-path=/WALLETDATAS/ethereum --db-path=/WALLETDATAS/ethereum/chains > /WALLETDATAS/ethereum/debug.log --reserved-peers ./myPrivateNetwork.txt --reserved-only -c /WALLETDATAS/ethereum/eth-config.toml

 

이렇게 sync가 맞춰진다면 성공이다.

 

sync 완료 후 10.26.10.118:10110 으로 통신을 하여 이더리움 작업을 할 수 있다.

 

만약 노드없이 하나의 HOST에서만 실행하려고 한다면 위에 프라이빗 네트워크 부분을 빼면된다.

패리티는 러스트 언어 기반의 이더리움 계열 지갑이다.

 

Geth와는 달리 빌드업이 필요없기 때문에 업데이트가 매우 간편하다.

 

따라서 블록체인 회사들에서 쓰고 있다.

 

리눅스던 윈도우던 parity.exe를 입력하면 알아서 블록싱크를 맞춰주지만 db나 base path, 로그 등을 기록하려면 좀더 자세한 명령어가 들어가야 한다.

 

자세한 사항은 TOML파일에 기록하지만 여기선 단순 명령어에 대해서 설명을 해보겠다.

 

보통 리눅스에서는 명령어를 직접 치는 것보단 sh파일을 만들어서 그안에 명령어를 저장 하여 실행하는 것을 추천한다.

 

우선 많이 사용 하는 명령어는 아래와 같다.

 

$./parity --no-ws --no-jsonrpc --no-ipc --port=30301 --chain=ethereum --base-path=/WALLETDATAS/ethereum --db-path=/WALLETDATAS/ethereum/chains > /WALLETDATAS/ethereum/debug.log --log-file=/var/log/ethereum/parity.log 2>&1

 

그 뜻을 하나하나 살펴 보면

 

1. --no-ws

WebSocket JSON_RPC를 쓰지 않겠다는 뜻이다.

만약 172.16.0.1234:9001의 웹소켓을 쓴다면 아래를 넣어주면 된다.

--ws-port=9001 --ws-interface=172.16.0.1234

 

2. --no-jsonrpc

jsonrpc를 사용하지 않겠다는 뜻이다.

만약 Node서버가 아닌 Slave라면 위 명령어를 넣으면 안된다.

만약 위 명령어를 안넣었다면 아래 명령어를 넣는다. 디폴트 PORT는 8545다.

--jsonrpc-port=[PORT] --jsonrpc-interface=[IP]

 

3. --no-ipc

프로세스간 통신인 ipc를 사용하지 않겠다는 뜻이다.

 

4. --port

어떤 포트를 열 것인지 쓴다. 

 

5. --chain

어떤 코인을 이용할 것인지 쓴다. default는 이더리움이다.

예를들어 익스펜스는 expanse, 이더리움클래식은 classic으로 쓰면 된다.

 

6. --base-path

코인지갑을 저장해 놓는 경로를 설정한다.

 

7. --db-path

코인 씽크 db를 저장해놓는 곳이다. 용량이 몇백G 되므로 여유가 있는 디스크로 지정해놓는다.

 

8. --log-file=

지갑 로그가 쌓이는 곳이다. debug.log를 지정해놓으면 필요가 없지만 debug.log만 지정해놓으면 실행하면 그 터미널에서 바로 로그가 쭉 쌓이지만 --log-file 명령어를 쓰면 해당 로그파일에서만 로그를 열람할 수 있다.

이더리움 계열의 코인은 대표적으로 이더리움, 이더리움 클래식, 익스팬스 등이 있다.

RPC연결을 하여 월렛을 컨트롤 하기 위해서는 코어에 접근해서 블록을 syncing 해줘야한다.

 

그런 것을 지원해주는 것은 대표적으로 Go-ethereum(geth)과 Parity이다.

 

Geth

Geth는 이더리움 재단(Ethereum Foundation)이 제공하는 공식 클라이언트 소프트웨어로써, Go언어로 개발되었다.

Geth를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다.

 

Geth는 블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있다. 그리고 RPC를 통해 상호작용할 수 있는 API를 노출하여 서버 역할을 하기도 한다.

 

Parity

패리티(Parity)는 이더리움 프로토콜의 또 다른 구현체이며, 러스트(Rust) 프로그래밍 언어로 개발되었다. 현재 Parity Inc. 라는 기업에서 운영하고 있다.

이더리움 네트워크에 접속할 수 있는 클라이언트 소프트웨어를 개발하는 길은 누구에게나 열려 있으며, C++, 파이썬 및 다른 언어로 작성된 클라이언트도 있다.

 

 

위 2개의 이더리움 프로토콜에 대해서 개발자의 측면에서 설치하고 통신하는 법을 설명해보겠다. (리눅스 기반)

 

코인거래소에서 일해본 개발자라면 알듯이 코인을 상장하려면 아래의 과정을 따라야 한다.

 

1. 해당 코인의 RPC API를 지원하는 소프트웨어를 확인하고 그것을 서버 PC에 설치

2. 그 소프트웨어를 알맞은 명령어를 입력하여 실행하여, 지갑 저장 디렉토리, 체인 db 디렉토리를 설정

 (실행 명령어는 보통 bitcoind, parity, geth 등 simple함.)

3. 블록 syncing이 정상적으로 완료되면, 직접 코딩하거나 RPC 라이브러리를 활용하여 서버 PC의 해당 port에 연결

4. 정상적으로 통신이 되면 Web3j같은 RPC 라이브러리에서 제공하는 명령어를 통하여 입출금, 잔액 조회 등의  행동을 함

 

다음화에서는 Geth에 대해서 설치하고 API연결하는 법을 알아본다.

 

 

+ Recent posts