211109 미팅 내용 정리

2021. 11. 9. 01:45Blockchain/Project - Coin Swap

목표

 

** 자체 블록체인/도커인터페이스/스캔 등의 개발 환경 구축 필요

* Linux 환경 구성 후 parity-ethereum을 git clone (링크 : https://github.com/openethereum/parity-ethereum)

* docker compose 사용

* 자체 스캔 구축, ethereum classic/explorer (링크 : https://github.com/ethereumclassic/explorer)


ubuntu

 

- 개요

Linux의 여러 배포판(Red Hat, CentOS 등) 중 하나인 Debian에서 파생된 고유한 데스크탑 환경을 사용하는 또 다른 배포판

 

- 특징

* 개인용, 데스크탑 환경에 최적화

대부분의 리눅스 배포판들이 서버용으로 사용되고 있는것에 반해, 개인 사용자와 데스크탑 환경에 최적화 되도록 사용자 편의를 중점으로 개발 됨

* 자유 소프트웨어에 기반

누구나 무료로 다운 받아서 사용할 수 있음

 

- LTS 버전 vs 정규 버전

* LTS(Long Term Support) : 장기적으로 지원하는 버전임을 뜻하며, 안정적인 버전이라고 생각 할 수 있음

2년마다 새로운 버전을 배포하며, 업데이트는 배포일로부터 5년까지

기능의 업데이트는 느리지만 버그나 크래시의 수정이나 보안성 개선 사항 등에 대한 업데이트를 지속적으로 해주기 때문에 서버 환경에서 사용하기 좋음

* 정규 버전 : 6개월 주기로 배포하며, 배포일로부터 9개월 간 업데이트 지원

새로운 기능이 포함되어있기 때문에 신기술을 체험해보고 싶은 사용자에게 좋아 데스크탑 환경에서의 사용에 적합

 

- 그 외

숫자는 배포 된 날짜를 뜻하며, 배포가 수행 된 년/월로 이름을 붙임
20.04.2 = 20년 4월 배포, 20.10 = 20년 10월 배포


Parity Ethereum

 

세계에서 가장 신속하고 작은 이더리움 클라이언트

임의의 노드들이 블록체인, 블록체인에 탑재된 스마트 계약과 기타 관련 사항들을 해석 후 식별하게 하며, 트랜잭션을 이루고 블록을 채굴하는 인터페이스를 제공

러스트(Rust) 프로그래밍 언어로 작성되었으며, 신뢰도/성능/코드 클래러티(code clarity) 등의 측면에서 한 단계 업그레이드되어 있고, Windows의 DOS 상에서도 작동


디폴트 설정 조건 기준, 포트 8545에서 JSON-RPC HTTP 서버를 돌리고, 포트 8546에서 Web-Sockets 서버를 돌림

다수의 API에서 구성과 지원이 가능

 

 

링크 :  https://github.com/openethereum/parity-ethereum


Rust

 

 

모질라가 차세대 웹브라우저 엔진(Servo)를 개발하기 위해 만든 언어로 순수 함수형 프로그래밍, 액터 기반 병렬 프로그래밍, 명령형 프로그래밍, 객체 지향 프로그래밍 스타일을 지원

 

로우 레벨 시스템 프로그래밍을 위한 언어이면서도 강력한 정적 타입 시스템 및 자동 메모리 관리 기능을 제공하기 때문에 블록체인과 같이 성능과 정합성이 모두 중요한 프로젝트에 알맞음

 

이러한 장점 때문에 Parity(이더리움 구현체), Grin(MimbleWimble 구현체), Exnonum(프라이비 블록체인 엔진) 등 여러 블록체인 프로젝트들이 구현 언어로 러스트를 사용 중


Geth(Go Ethereum)

 

이더리움 재단이 제공하는 공식 클라이언트 소프트웨어로써, 프로그래밍 언어인 Go에서 구현된 전체 이더넷 노드를 실행하기 위한 다목적 명령 줄 도구로 명령행 부속 명령 및 옵션, Json-rpc 서버 및 대화식 콘솔의 세 가지 인터페이스를 제공

 

블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신 함

또한 블록 채굴, 블록체인에 트랜잭션 추가, 트랜잭션 실행, 블록의 트랜잭션 검증, 그리고 RPC를 통해 상호작용할 수 있는 API를 노출하여 서버 역할을 하기도 함

※ Geth console이란?

블록체인에 연결할 수 있는 자바스크립트 클라이언트

이더리움 블록체인의 노드 역할을 하며 사용자가 이더(Ether)를 마이닝하고 이더리움 기반의 가상머신에서 실행되는 소프트웨어인 이더리움 가상머신(EVM)을 만들 수 있는 프로그램


GNU Tool Chain

 

※ Tool Chain이란?

소프트웨어 개발에 사용되는 프로그래밍 도구의 집합으로, 대게 크로스 컴파일 환경을 뜻함
간단한 툴체인은 소스 코드 편집을 위한 문서편집기, 소스 코드를 실행 프로그램으로 변환하는 컴파일러, 링커, 그리고 운영체제의 기능을 제공하는 라이브러리로 구성 됨

 

GNU 프로젝트가 만든 프로그래밍 도구의 집합을 가리키는 용어

리눅스 커널, BSD의 개발, 임베디드 시스템용 소프트웨어의 개발에 필수적인 역할을 담당하며, 일부는 Solaris/MacOS/Microsoft Windows 등 다른 플랫폼으로 직접 포팅하는 데에 쓰이기도 함

 

* GNU GCC (compiler collection) : C와 C++ 컴파일러의 집합
* GNU binary utilities : binutils - 어셈블러, loader, 기타 tools
* GNU C libaray : glibc - 컴파일러 구축을 위한 라이브러리 및 일반 라이브러리

 

- 설치 방법

  1. 링크 접속 후 Setup 파일 다운로드
    (링크 : http://gnuwin32.sourceforge.net/packages/coreutils.htm)
  2. Setup 파일 실행하여 설치
    설치 시 별도 설정 없이 Next만 눌러주면 됨

 

- 환경 변수 설정

  1. [내 컴퓨터] 우클릭 - [속성] 선택
  2. [고급 시스템 설정] 클릭
     
  3. [고급] 탭 선택 - [환경 변수] 클릭
  4. 시스템변수에서 새로만들기 했는데 cmd에서 ls가 안됨..
  5. 나중에 다시 해보겠음..

BSC(Binance Smart Chain)

 

바이낸스 스마트 체인(이하 BSC)은 바이낸스 체인과 병렬로 실행되는 블록체인으로, 바이낸스 체인과 달리 스마트 컨트랙트 기능을 보유했고 Ethereum Virtual Machine(EVM)과의 호환이 가능함

BSC의 설계 목표는 바이낸스 체인의 높은 처리량을 그대로 유지하면서 생태계에 스마트 컨트랙트를 도입하는 것

병렬로 작동하고 오프라인이 되더라도 실행 될 수 있는 독립적인 블록체인이며, EVM과 호환되기 때문에 다양한 이더리움 기반의 도구들이나 디앱을 지원함

기존 이더리움 기반의 프로젝트 개발자들은 BSC로 쉽게 프로젝트를 포팅, 사용자들은 간단한 설정 변경으로 메타마스크와 같은 애플리케이션을 BSC에서 사용 가능함


- 자체 블록체인 구축 방법

리눅스 환경 기준

github.com/openethereum/parity-ethereum 사용
docker-compose -f pos.yaml up // yaml 파일을 up하여 한번에 다 실행

nano pos.yaml // 실행 파일
---------------------------------------------------
image: "도커 이미지"
여러 컨테이너를 생성해도 이미지는 1개로만 사용
---------------------------------------------------
Linux에서도 한 머신에서 사용하는 것이기 때문에 포트 번호는 다르게 설정해줘야함
ports:
- 8546:8546 // 다음은 8547:8547
- 30304:30304 // 다음은 30305:30305
---------------------------------------------------
' : ' : 컨테이너를 가리킴
volums:
- ./config1.toml // 디파이란 폴더에 있는 config1.toml을 compose up 할 때 첫번째 도커 컨테이너에 mount
- ./genesis.json // 
---------------------------------------------------
command: >
sh -c "cd ~/
parity --config /etethereum/config.toml --geth"
// 이 내용은 변하지 않음
---------------------------------------------------
nano config1.toml // configuration 파일
---------------------------------------------------
[network]
port = 포트번호
apis = ["geth에서 쓰는 명령어 목록"]
---------------------------------------------------
[account]
password = ["/ethereum/password"] // 이더리움 계정 비밀번호를 특정 파일에 따로 저장하는듯
---------------------------------------------------
[mining] // pos에서는 마이닝을 사이닝이라고 함
engine_signer = "마이닝 할 계정의 address"
---------------------------------------------------
nano genesis.json
---------------------------------------------------
이더리움 계정 생성 방법 관련 내용
공개 키 얻는 방법 : 계정명 클릭
비공개 키 얻는 방법 : 계정 세부 정보 -> 비공개 키 내보내기
---------------------------------------------------
"params": {
...
"networkID": "0xbd9", // 0xbd9의 10진수는 3033, 제네시스 블록의 
25분 경 16진수 -> 10진수, 제네시스 블록과 체인 ID 관련 내용 이해 못함..
---------------------------------------------------



---------------------------------------------------



---------------------------------------------------

 

- 자체 스캔 구축 방법
github.com/ethereumclassic/explorer 사용
아래 내용 중 Local installation 부분에 MongoDB 관련 내용이 있음
hub.docker.com 접속 후 mongodb 검색
mongo (Official Image) 클릭 -> 아무것도 없는 리눅스에 docker pull mongo

몽고디비 사용 이유는.. 블록에 관한 정보가 다 저장되어 ganache처럼 일회성 사용이 아니게 됨
populate the db = db schema 같은 것

 


docker compose 관련 내용 설명...