메타마스크와 연결하고 geth, ganache 를 실행하기 위해서 unbuntu 환경에서 개발을 진행한다.
window 기준으로 설치를 진행한다.
0. 우분투 환경 설정
(1) 제어판 -> 프로그램 -> 프로그램 및 기능 -> windows 기능 켜기/끄기 -> Linux용 windows하위 시스템 체크하기
(2) 가상화 사용 설정(구글에 가상화 켜기 검색하고 가상화 켜주기)
(3) cmd창을 관리자 권한으로 실행 후 코드 넣기
- 배포 이미지 서비스 및 관리에 대한 부분
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- Virtual Machine Platform 기능 활성화 부분
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 설치 할수 있는 배포 목록 확인 명령어
wsl -l -o
- 우분투 다운로드
wsl --install -d Ubuntu
- wsl2로 버전업
wsl --set-version Ubuntu 2
1. 기본 설정
Geth를 빌드하는데 필요한 언어기 때문에 go를 설치해야 한다.
Gethe는 go-ethereum의 약자로 Go언어로 만들어진 이더리움 클라이언트 소프트웨어다
터미널은 항상 관리자 모드로 켠다
wsl 을 입력하여 ubuntu에 접속한다.
터미널에 붙여넣기 방법 : 복사 후 마우스 우클릭으로 붙여넣을수 있다.
(1) go 설치
sudo apt update
sudo apt install golang
sudo apt install -y libgmp3-dev tree make build-essential
이미 go가 설치되어있지만 버전이 낮은경우
git clone https://github.com/udhos/update-golang
cd update-golang
sudo ./update-golang.sh
(2) geth 설치
geth를 클론 받을 폴더고 클론 받기
mkdir Ethereum
cd Ethereum
git clone https://github.com/ethereum/go-ethereum
clone 후 go-ethereum 폴더로 이동후 geth를 실행시켜본다.
cd go-ethereum
make geth
geth를 사용할때마다 go-ethereum폴더로 들어가야하기 번거롭기 때문에 pc환경변수를 바꿔 전역적으로 geth를 실행할수 있게 만들어준다.
/Ethereum/go-ethereum/build/bin 경로로 들어간후 절대경로를 복사한다.
사용자가 root인 경우 : /root/Ethereum/go-ethereum/build/bin
root가 아닌 경우 : /home/계정/Ethereum/go-ethereum/build/bin
보통은 위 경로가 절대 경로이다.
vi ~/.bash_profile
입력 후 i 버튼을 눌러 수정모드에 들어간다.
export PATH=$PATH:절대경로
입력 후 :wq! 엔터 로 저장하고 나온다.
source ~/.bash_profile
수정한 bash_profile을 적용시켜주고 경로가 어디서든 geth를 실행시켜보면 실행되는걸 확인할수 있다.
(3) ganache 설치
sudo apt update
sudo apt install nodejs
sudo apt install npm
sudo npm install -g ganache-cli
npm과 nodejs설치 후 gacache를 설치해준다.
npx ganache-cli
ganache 로컬에서 이더리움 블록체인 가상 네트워크를 생성할 수 있게 해주기 때문에 테스트 용도로 활용할수 있다.
ganache로 생성된 네트워크에서는 채굴 기능이 없고 P2P기능도 없다.
오직 블록, 체인, 트랜잭션과 관련된 기능만 있다.
1트랜잭션에 1개의 블록 생성
ganache로 트랜잭션을 발생시키면 실시간 확인이 가능해서 테스트에 용이하다.
2. 스마트 컨트랙트
(1) 비트코인과 이더리움의 차이
비트코인과 이더리움의 차이점은 이더리움은 스마트 컨트랙트를 구현할수 있다는 점이다.
비트코인은 단순 거래라면 이더리움은 스마트 컨트랙트를 사용해서 기능구현이 가능하다.
예를 들어 A-> B -> C 의 물건을 구매하는 상황에서
B에게 A가 상품의 금액을 받아서 C에게 받은 사실을 알려준다.
그러면 C가 A에게 상품을 주고 A가 상품을 확인하면 스마트 컨트랙트가 발동해서 B가 C에게 금액을 준다.
스마트 컨트랙트는 거래에 대해 조건에 충족한 계약 형태의 거래를 가능하게 해준다.
코인을 받고 물건을 전달하는 거래 뿐만이 아니라 조건에 따라 특정한 코드가 실행되서
거래를 할수 있게끔 추가 조건들을 기능으로 구현할 수 있다.
스마트 컨트랙트는 솔리디티를 사용해서 작성할 수 있다.
(2) EVM
스마트 컨트랙트를 구현할때 이더리움 EVM이라는걸 사용한다.
EVM이란 Ethereum Virtual Machine의 약자로 자바의 JVM과 비슷한 개념이다.
스마트 컨트랙트를 실행할 때 분산 네트워크 환경에서 모든 노드들이 스마트 컨트랙트에 의해
특정한 결과를 얻어야 할때 솔리디티 언어로 작성한 코드를 EVM을 통해서 실행시키게 한다.
1. 솔리디티로 컨트랙트 코드 작성
2. 바이트 코드로 컴파일
3. EVM에서 컴파일도니 바이트 코드 실행
이더리움 스마트 컨트랙트라는 프로그램을 실행 할수 있는 플랫폼으로 기능할수 있는 핵심은
EVM이라는 가상 컴퓨터가 있기 때문이다.
우리가 만든 규칙에 따라서 스마트 컨트랙트 코드를 실행하고 그 결과를 업데이트 해준다.
(3) 외부 소유 계정 : EOA (Externally owned Account)
EOA는 개인키로 제어되는 계정으로 코드를 저장하지 않는다.
스마트 컨트랙트에 대한 접근을 제어한다.
EOA로 트랜잭션을 시작 할 수 있다.
EOA는 다른 EOA 또는 CA에 메시지를 보낼수 있으며 이 동작은 개인키를 사용해서 트랜잭션을 만들고
서명하고 두개의 EOA사이에서 발생하는 메시지는 단순히 ETH만을 전송한다.
EOA에서 CA에 보내는 메시지는 CA에 저장된 코드를 활성화 시킨다.
명령 EOA가 전송한 트랜잭션부터 시작된다고 보면 된다.
(4) 계약 계정 : CA(Contract Account)
스마트 컨트랙트의 로직에서 제어를 하고 스마트 컨트랙트 코드를 저장할수 있다.(코드의 해시)
CA는 EOA와 다르게 개인키를 가지고 있지 않고 스스로 트랜잭션을 생성할수도 없다.
CA는 다른 CA 또는 EOA로 부터 받은 트랜잭션에 대한 응답으로만 트랜잭션을 실행한다.
(5) Transaction 속성
이더리움 네트워크에서 트랜잭션은 EOA에 의해서 서명된다.
from : 보내는 계정
to : 받는 계정
nonce : 보내는 계정이 발생시킨 총 트랜잭션 횟수
value : 보내는 금액
gasLimit : 트랜잭션이 사용할수 있는 가스의 최대치
gasPrice : 보내는 사람이 지불할 가스 가격
data : 트랜잭션에 담을 데이터
비트코인 네트워크와 이더리움 네트워크의 차이점은 가스비라는 개념이 있다.
가스는 이더리움 네트워크에서 트랜잭션을 생성할때 보내는 사람이 부담하는 수수료의 개념이다.
'개발 > BlockChain' 카테고리의 다른 글
[BlockChain] React 메타마스크 연결하기 (0) | 2022.11.21 |
---|---|
[BlockChain] RPC web3 테스트 (0) | 2022.11.21 |
[BlockChain] TypeScript로 transaction 만들기 (0) | 2022.11.15 |
[BlockChain] TypeScript로 지갑 만들기 (0) | 2022.11.11 |
[BlockChain] TypeScript로 P2P 구현 (0) | 2022.11.07 |