목차
- 이더리움
- 이더리움 클라이언트
- 이더리움의 계정
- EVM 개념
- Web3
1. 이더리움
1-1. 이더리움이란?
- 이더리움은 스마트 컨트랙트(smart contract)를 실행시키는 탈중앙화된 플랫폼이다.
- 검열, 위조 또는 제 3자의 개입, 다운타임의 가능성 없이 정확히 프로그래밍한대로 코드가 실행되도록 하는 어플리케이션
1-2. 이더리움 적용의 예
- Decentralized finance(DeFi)
- Non-fungible tokens(NFT)
- Decentralized autonomous organizations(DAOs)
1-3. 비트코인과 이더리움의 차이는?
대표적으로
- EVM
- Transaction 내용
- account(EOA/CA)
가 차이가 나며 그 차이의 이유는 스마트 컨트랙트 때문이다.
1-4. 이더리움의 state(상태)는?
- 모든 계정과 잔액들 뿐만 아니라 머신 상태(machine state) 또한 가지고 있는 거대한 데이터 구조
- 머신 상태(machine state)는 임의의 머신 코드를 실행할 수 있으며,
- 사전에 정의된 일련의 규칙들에 따라 블록 간의 상태를 변화시킬 수 있다.
- 그리고 이러한 블록들 간의 상태를 변화시키는 구체적인 규칙들은 EVM에 의해 정의된다.
2. 이더리움 클라이언트(Ethereum Clients)는?
- 이더리움 블록체인 네트워크를 구성하는 개별 클라이언트 노드(node)
- 이더리움은 중앙 집중형 서버 프로그램이 따로 존재하지 않으며 오로지 클라이언트 프로그램만 존재함
- 이더리움 클라이언트는 멀티 플랫폼 환경을 지원하기 위해 다양한 프로그래밍 언어로 개발됨
2-1. 대표적인 이더리움 클라이언트
- 게스(geth)
- 이더리움 재단(Ethereum Foundation)이 제공하는 공식 클라이언트 소프트웨어
- 고(Go) 언어로 개발
- 패리티(Parity)
- 패리티(Parity)는 이더리움 프로토콜의 또 다른 구현체
- 러스트(Rust) 프로그래밍 언어로 개발
- 현재 Parity Inc. 라는 기업에서 운영
3. 이더리움의 계정(account) 개념
3-1. 계정의 종류
EOA(Externally owned account) | CA(Contract account) |
계정 생성 시 비용 발생하지 않음 Transaction을 발생시킬 수 있음 EOA 간의 Tx는 ETH/token 전송만 가능함 CA 계정을소유하는 계정 돈의 입출금에 관련된 계정 |
네트워크 storage 사용하기 때문에 contract 생성 시 비용 발생 Tx 수신의 응답으로만 Tx 전송 가능 EOA로부터CA까지 Tx 코드를 (토큰을 전달하거나 새로운 contract 생성 하는 것과 같은) 다양한 actions를 실행시킬 수 있는 코드 작동 가능 Tx 발생 시의 리턴값 |
개인키를 가진 이에 의해 관리됨 | EVM 코드에 의해 관리되며 네트워크에 의해 사용되는 스마트 컨트랙트 |
개인키> 공개키 > (해시화) > address | 발신인 address + nonce > (RLP, KEC) > address |
ETH와 토큰을 수신, 보유, 전송할 수 있음 스마트 컨트랙트와 상호작용함 |
3-2. 계정의 4가지 필드
필드 | 설명 |
nonce | 계정에서 보내진 Tx의 횟수를 나타냄(EVM 동작 횟수) Tx가 오직 한번만 처리되었음을 확인 CA에서 nonce는 계정에 의해 생성된 contract의 수를 나타냄 |
balance | 해당 address가 소유하고 있는 wei의 수 |
codeHash | EVM에 있는 계정의 코드를 나타내는 해시 CA는 다양한 옵션들을 수행할 수 있는 코드 조각들을 가지고 있음 이러한 코드 조각들은 상응하는 해시에 의해 state 데이터베이스에 존재함 모든 코드 조각들은 이후의 검색을 위해 상응하는 해시값 아래에, state 데이터베이스 안에 포함됨 EOA 계정에서의 codeHash의 필드는 빈 문자열의 해시값 |
storageRoot | 스토리지 해시로도 알려져 있음 계정의 스토리지 내용을 인코딩하는 머클 패트리샤 트리의 root노드의 256 bit 해시값 트리는 해당 계정의 스토리지 내용에 대한 해시를 인코딩함(디폴트는 null) |
4. EVM
프로그래밍 언어 중 하나인 JAVA에는 JVM이라는 개념이 있다.
JVM은(Java Virtual Machine)의 약어로, 자바 코드를 해석할 수 있는 컴퓨터를 의미한다.
가상머신이 코드를 해석해서 결과를 던져준다는 것이며 즉, JVM만 동일하면 어떤 컴퓨터든 동일한 결과를 얻을 수 있다.
(단, 단점으로 가볍지 않다는 단점이 있음, 어떤 OS 든 동일하게 돌아가지만 퍼포먼스가 좋지는 않다)
즉 범용성에 치중되어 있다
빌드를 했던 OS마다 코드를 실행하는 방식이 다르다(장점이 될 수도, 단점이 될 수도 있음)
내가 빌드한 OS에 최적화된 빌드를 하기 때문에 자원낭비가 없다.
이와 같이 이더리움에도 자바의 JVM과 같은 개념이 있다.
4-1. EVM(Ethereum Virtual Machine )이란?
- 이더리움에서 스마트 컨트랙트를 실행하는 환경(runtime environment for smart contracts)
- Tx 내용을 리액트의 state처럼 관리함
- 코드 해석기(contract를 바이트로 바꿔서 Tx 계산 후 리턴해 줌)
4-2. EVM의 실행
- 코드 작성
- 바이트 코드로 컴파일함(0101010로 바이트 코드가 됨)
- 바이트 코드를 evm에 던짐
- evm이 바이트 코드를 해석해줌
컴파일만 진행되면 어떤 언어로든 스마트 컨트랙트 구현 가능하다.
5. web3
지갑 서버와 이더리움 클라이언트(노드)간의 http 방식의 통식을 하기 위해web3라는 라이브러리를 만듦
web3를 잘 다룰 수록 이더리움을 잘 다룬다고 할 수 있음
스마트 컨트랙트와 web3를 잘 다루면 Dapp을 만드는 데 전혀 무리가 없다(nft마켓...디파이..)
추후 배울 내용 :
meta 마스크 통해서
geth(블록체인 이더리움 네트워크) 에서
1. 이더리움생태계(1주짜리 프로젝트)의 내용과 네트워크의 구성
메타마스크는 크롬 확장 서버에 연결되어있음
프론트 서버는 메타마스크랑 통신함
버튼 누르면 메타마스크에 요청 보내서 창 띄워줌
메타에서 버튼 클릭 시 블록체인 네트워크(게스)에 통신함
퍼블릭/프라이빗 ,메인넷/테스트넷을 직접 눈으로 보고 개념을 익히자
테스트넷은 이미 돌아가져 있는 코드를 요청해서 가져오는 것(카카오 api 쓰는 것과 같다)
2. 스마트 컨트랙트.
즉, erc-20과 erc-721을 가지고 다른 기획....
투표앱을 만들면서 스마트 컨트랙트 개념을 익힘
proxy 컨트랙트 등
스마트 컨트랙트 작성 후 네트워크 배포..어렵다.
컨트랙트 한번 등록 시 수정이 거의 불가 >> 그래서 jest 사용해서 테스트를 해본 것
- 스마트 컨트랙트 작성을 쉽게 해주는 프레임 워크
- 트러플-타입스크립트 지원은 안 해줌
- 하드햇
선행 원한다면 크립토좀비 시도해볼 것
'블록체인' 카테고리의 다른 글
puppeth 명령어를 통한 genesis.json 생성하기 (0) | 2022.07.01 |
---|---|
이더리움3. web3 라이브러리 (0) | 2022.06.28 |
transaction 생성 (0) | 2022.06.22 |
P2P 통신을 통해 노드 간 체인 주고받기[수정중] (0) | 2022.06.20 |
채굴(mining) (0) | 2022.06.20 |
댓글