마이너, 서비스 제공자, 빠른 시간내에 환전을 목표로 하는 사람들을 위해 만들어졌다. 안정적이고 빠른 스피드의 코어 기반을 제공한다.
쉽게 커스텀마이징을 할 수 있는 코드 베이스와 CLI 기반의 클라이언트 환경을 가지고 있다. 그리고 적은 메모리를 사용한다.
Rust언어를 사용하며 컴파일이 필요하다. Parity Ethereum은 JSON-RPC HTTP서버를 8545 PORT로 사용하고 Web-Socket 서버로는 8546 포트를 쓴다. 이는 몇몇개의 API를 지원하며 구현 가능하다.
Dapp을 만들어도 테스트하기가 쉽지 않다. 그래서 parity-ethereum을 사용해서 이더리움 메인넷을 구축해보기로 하였다. https://github.com/openethereum/parity-ethereum 을 실행시키기로 하였다.
우리는 테스트넷 이더를 얻기가 너무 힘들어서 메인넷을 구축하기로 하였다. 그러면 우리 마음껏 많은 이더를 가지고 테스트를 할 수 있기 때문이다.
우선 도커 이미지를 다운받는다. 여기에 docker를 사용하는 이유는 이 parity-ethereum 자체가 리눅스 환경에서 바로 들어올려졌기 때문이다. 그리고 팀원들끼리 같은 환경에서 작업을 하기 위해 도커를 사용하였다.
$ docker pull ubuntu:20.04
우분투 이미지를 다운받는다.
$ docker run -it --name parity ubuntu /bin/bash
다운 받은 이미지를 기반으로 컨테이너를 실행시키고 -it를 씀으로써 컨테이너 안으로 들어간다.
리눅스에서는 apt-get
을 많이 쓴다. 그렇기에 upadate를 해준다.
# apt-get update -y
그리고 필요한 프로그램들을 설치한다.
# apt-get install -y gcc g++ pkg-config file make cmake git clang libssl-dev curl
parity-ethereum을 클론한다.
# git clone https://github.com/openethereum/parity-ethereum.git
rust를 설치한다.
# curl https://sh.rustup.rs -sSf | sh
yasm 을 깐다.
# apt-get install -y yasm
rust의 버전을 버전을 확인한다.
# rustrc --version
안 나올것이다. 그러면 다음과 같이 환경변수를 세팅해준다.
# source $HOME/.cargo/env
이제 환경세팅이 다 되었다.
# cd parity-ethereum
parity-ethereum 안으로 들어간다.
# rustup override set 1.51.0
버전을 낮춘다.
버전을 낮추지 않으면 다음과 같은 문제가 발생한다.
# cargo build --release --features final
echo $PATH
를 입력한다.
export PATH=/parity-ethereum/target/release:$PATH
을 입력하여 path를 환경세팅해준다.
😱반드시 parity-ethereum폴더 내에서 설정해준다.
이를 하는 이유는 parity-ethereum 사이트에 보면 다음과 같이 실행하라고 나와잇는데 형광펜으로 칠한 부분을 줄이기 위해서이다.
대문자는 오류가 나니 소문자로만 사용하자.
영구적인 방법
# apt-get install vim
위의 명령어를 통해 vim편집기를 깐다.
# vi ~/.bashrc
export PATH=/parity-ethereum/target/release:$PATH
그리고:wq!
를 통해 저장을 해준다.
하고나서# source ~/.bashrc
를 통해서 .bashrc파일의 변경사항을 적용을 해준다.
도커 컨테이너를 이미지화해서 올리기
$ docker commit CONTAINER IMAGE_NAME
의 형식으로 올린다. 즉 이렇게 올리면 된다.
컨테이너 밖에서 쓴다.
$ docker commit parity parity
$ docker login
로그인을 한다.
username으로는 Dockerhub의 아이디를 입력해준다.
$ export DOCKER_ID_USER="nara7875"
도커에 태그를 달아준다.
$ docker tag parity $DOCKER_ID_USER/parity
도커 이미지를 올린다.
$ docker push $DOCKER_ID_USER/parity
https://gptjs409.github.io/infra/2019/11/02/docker-container-command.html
목적
- 컨테이너 생성하기
- volume 쉽게 생성하기 위해서
실행구문
parity --config /parity-ethereum/config.json
필요한 파일
1.docker-comopse.yaml
컨테이너 생성하고 볼륨 생성
2. config.toml
메인넷에 들어갈 환경들을 설정하는 파일
데몬의 기본 설정을 바꿀 수 있는 설정 파일
3. genesis.json
블록에 대한 내용이 담겨져 있다.
흔히들 chain.json으로 많이 씀
4. password
모름...
5. nodes
peer 관련 내용
위와 같이 디렉토리를 만들어준다.
디렉토리를 만들고 이제 파일 하나하나씩 생성을 할 것이다.
account를 만들어야함. parity에서 만들어야 한다.
컨테이너의 이름은 # docker ps
를 하면 나온다.
그러면 도커 컨테이너를 시작한다.
$ docker start elegant_tharp
컨테이너를 시작했으니 그 안으로 들어가자.
$ docker attach elegant_tharp
계정을 하나 생성하자.
# parity account new
나는 12345678로 비밀번호로 했다.
그랬더니 아래와 같은 결과물이 나왔다.
0x2a4f860304d9ad566d521efbe4141153da5d273e
이것이 account address이다.
{
"name": "ethereum",
"engine": {
"authorityRound": {
"params": {
"blockReward": "0x4563918244F40000",
"stepDuration": "1",
"validators": {
"list": [
"0x9E4Bd927441F2E7d0E13a263e6e25488557d6671"
]
}
}
}
},
"params": {
"gasLimitBoundDivisor": "0x400",
"maximumExtraDataSize": "0x20",
"minGasLimit": "0x1388",
"networkID": "0x396",
"eip155Transition": 0,
"validateChainIdTransition": 0,
"eip140Transition": 0,
"eip211Transition": 0,
"eip214Transition": 0,
"eip658Transition": 0
},
"genesis": {
"seal": {
"authorityRound": {
"step": "0x0",
"signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
}
},
"difficulty": "0x10",
"gasLimit": "0x2625A00"
},
"accounts": {
"0x9E4Bd927441F2E7d0E13a263e6e25488557d6671": {
"balance": "10000000000000000000000000"
}
}
}
여기에서 accounts부분하고 validator의 list에 결과물을 값을 넣어준다.
networkID도 chainlist.org에서 포트번호가 다른 걸로 아무거나 설정해서 16진수로 변환해서 넣어준다.(단, 3자리)
나는 내 생일인 0918을 16진수로 변환하였다.
디렉토리에 password라는 파일을 만들고 아까 만든 비밀번호를 입력해준다.
나는 12345678
이 되겠다.
nodes라는 파일을 만든다.
빈 파일이다.
author에는 메타마스크 계정 하나의 공개키값을 넣어준다.
# 데몬 설정
# 패러티 작동에 관한 기본 매개변수
[parity]
chain = "/parity-ethereum/genesis.json"
base_path = "/parity-ethereum/"
# 네트워크 및 피어 관련 설정
# 패러티가 오프라인 모드인 경우 네트워크 사용 불가
[network]
port = 30305
reserved_peers= "/parity-ethereum//nodes"
allow_ips = "all"
# Override the bootnodes from selected chain file.
#bootnodes = ["enode://XXX@localhost:30300", "enode://XXXX@localhost:30301"]
# Enable or disable new peers discovery.
#discovery = false[rpc]
#HTTP를 통해 JSON_RPC API노출
# JSON_RPC는 모든 로컬에서 연결을 수신 대기합니다.
[rpc]
port = 8547
apis = ["web3", "eth", "net", "personal", "parity", "parity_set", "traces" ,"rpc", "parity_accounts"]
interface = "all"
cors = ["all"]
[account]
password = ["/parity-ethereum/password"]
# 값이 있으면 채굴 노드... 풀노드... 보상 받을 주소를 넣어주는 것임
# 가스 목표
[mining]
author = "0x9E4Bd927441F2E7d0E13a263e6e25488557d6671"
gas_floor_target = "40000000"
# 로그같은 부분!
# 컬러 쓴다. 기본값이 트루임
[misc]
logging = "own_tx=trace"
log_file = "/parity-ethereum/log.log"
color = true
version: "3"
services:
pos5:
image: "nara7875/ehtnetwork:1"
tty: true
ports:
- 8547:8547
- 30305:30305
environment:
ENV: ETHERNODE1
RPCPORT: 8547
PORT: 30305
volumes:
- ./config1.toml:/parity-ethereum/config.toml
- ./genesis.json:/parity-ethereum/genesis.json
- ./password:/parity-ethereum/password
- ./nodes:/parity-ethereum/nodes
- ./keys1:/parity-ethereum/keys
container_name: pos5
command: >
sh -c "cd ~/
/parity-ethereum/target/release/parity --config /parity-ethereum/config.toml --geth"
working_dir: /parity-ethereum/
여기서 포트번호 8547은 rpc 요청 주고 받을 때 쓰는 포트이고 30305는 블록체인 노드끼리 서로 연결할 때 사용한다.
밑의 환경부분도 포트번호를 똑같이 맞춰준다.
볼륨에 대해서 설명ㅎ마자면 :
을 기점으로 나뉘는 것이다.
앞부분은 현재 docker-compose 파일이 위치한 디렉토리 내에서의 주소를 뜻하는 것이고 :
뒤는 컨테이너 내의 주소를 말하는 것이다. 그리고 컨테이너가 시작될 때 볼륨이 마운트가 되는데, 로컬의 부분을 컨테이너가 참조하는 것이다.
docker-compose.yaml이 있는 파일 디렉토리 내에서 다음과 같은 명령어를 입력하여 docker-compose 파일을 실행시킨다.
$ docker-compose up
그럼 다음과 같이 실행이 된다.
그러면 터미널에 다음과 같이 입력하여서 rpc 통신이 잘 되는지 한 번 확인해보자.
$ curl --data '{"method":"personal_listAccounts","params":[],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST http://localhost:8547
잘 나옴을 확인할 수 있다.
모든 사용자에게 환경변수를 바꾼 것을 적용하고 싶으면 /etc/.bashrc