데이터 계층

외부 소유 어카운트(EOA) : 개인키를 사용하여 전자 서명 트랜잭션 생성, EOA 컨트랙트 어카운트에 

  메시지를 보낼 있음

 

컨트랙스 어카운트(CA) : EOA CA 메세지를 받은 내부의 스마트 컨트랙트 코드를 실행한 새로운 컨트랙트를

                                생성 or 다른 메시지 읽기 or 보내기

      직접 운영체제를 조작하는 API 호출X, 오직 EOA 컨트랙트 코드에 의해서만 작동

 

어카운트 - 코드해시 : 해당 어카운트의 스마트 컨트랙트 바이트 코드의 해시

   비어있으면 EOA

 

트랜잭션 : 다른 어카운트나 컨트랙트에 보낼 데이터 구조체로서, 전자 서명으로 암호화

 

블록 : 블록 헤더, 엉클블록, 트랜잭션, 마이닝 작업 난이도

 

제네시스 블록 : 블록체인에서 번째에 위치한 최초 블록

 

엉클 블록 : 블록 생성에 성공하였고 검증에 오류가 없어서 이더리움 네트워크를 통해 다른

  노드에 브로드캐스팅은 되었으나 다른 마이너가 생성한 다른 블록에 비해 난이도          

   낮아 블록체인에는 등록되지 못한 블록


고스트 알고리즘 : 블록 생성 정상 블록에 최대 2개의 엉클 블록까지 추가하고 보상

 

비밀 암호화 : 암호화와 복호화 시에 하나의 공통 비밀 키만 사용 - 대칭 암호화

 

공개 암호화 : 암호화와 복호화 시에 서로 다른 2개의 키를 사용 - 비대칭 암호화

   공개키로 암호화 - 공개 암호화 방식

   개인키로 암호화 - 전자 서명 ex) 공인인증서


합의계층

작업 증명(PoW) : 복잡한 계산 문제의 해답을 가장 빨리 찾은 마이너의 블록을 체인에 등록하고

  이에 대한 수행 결과로 보상을 한다.

 

하드 포크(Hark Fork) : 모든 마이너와 사용자가 반드시 업그레이드 해야 하는 경우

 

소프트 포크(Sort Fork) : 이전 버전과 신규 버전의 블록체인이 호환되기 때문에 사용자는 반드시

    업그레이드를 할필요가 없지만 미아너들은 업그레이드를 해여 한다.

 

이대시(Ethash) : 메모리 기반의 이더리움 PoW 합의 엔진, 메모리를 쓰는 방식, DAG알고리즘 사용

 

DAG : Geth 클라이언트에서 마이닝을 구동시키면 즉시 디스크 IO 발생하며, 디렉터리의 디스크 사용량

  2G가량 증가하는데 이는 캐시 영역을 확보하기 위해 시드 해시를 생성하는 것이다.

 시드 해시로 생성된 2G 정도의 캐시 데이터 집합을 DAG파일이라고 한다.



실행계층

스마트 컨트랙트 : 특정 계약을 스스로 수립, 검증, 이행하기 위한 컴퓨터 프로토콜

   블록 헤더의 데이터뿐만 아니라 특정 값이나 발신자 수신되는

   데이터를 조작하는 이더리움의 상태 변화와 데이터 저장 등이 가능

 

컨트랙트 메시지 : 컨트랙트 간의 호출은 메시지라는 특별한 구조체를 사용하여 호출된다.

   메시지는 EOA 아닌 CA 의해서만 생성된다.

   메시지는 가상 객체이기 때문에 별도 저장할 필요가 없다.

 

 

EVM : 32바이트 스택 기반의 실행 환경으로 스택의 최대 크기는 1024바이트이다.

  프로그램 코드를 ROM 저장하고 특별한 명령어를 통해서만 접근할 있다.



공통계층

노드 디스커버리 프로토콜 : UDP 기반의 RPC 프로토콜로 네트워크에 연결된 RLPx 노드를 찾는데 이용

 ping, pong, findnode, neighnors라는 네가지 패킷 타입으로 다른 노드를 탐색

 

 

부트스트랩 노드 : 블록체인 정보는 저장하지 않고 네트워크상의 피어 노드들을 찾는 사용되며,

   일정 시간 동안 연결되어 있는 노드의 목록을 유지한다.

   1. 새로운 피어 노드가 이더리움 네트워크에 최초 접속할 부트스트랩 노드에 접속

   2. 지난 일정 시간 내에 접속했던 피어들의 목록을 공유

   3. 공유받은 목록으로 피어 노드들에 연결한 후에 부트스트랩 노드와의 연결은 끊음

 

노드 디스커버리 패킷 : 일반 노드들은 부트스트랩 노드를 통해 초기 연결할 노드의 목록을 받은

   노드 디스커버리 프로토콜을 사용하여 노드들과의 연결을 시작한 부트스트랩

   노드와의 접속을 중단한다

 

*이더리움은 ethdb 패키지를 통해 상태트리, 트랜잭션 머클 트리, 리시트 머클 트리, EVM 비휘발성 저장소  

   이더리움에서 스토리지에 저장될 필요가 있는 모든 정보가 레벨DB 저장된다.

 

레벨DB : SQL 지원하지 않고 [키와 ] 형태로 데이터를 저장하고 조회 갱신, 커서 조작함수 제공

     인덱스와 멀티태스킹은 지원하지 않으며, 구글의 압축 알고리즘인 스내피를 사용하여 효율적

 

RLP(Recursive Length Prefix) 인코딩 : 이더리움 내부에서 중첩된 바이너리 배열을 인코딩하기 위해 구현

   인코딩 과정이 아주 단순하여 인코딩 크기를 줄이고 바이트 단위의 일관성을 확보하기 위해 직접 구현함.


응용 계층

Dapp(Decentralized App) : 스마트 컨트랙트 기반의 서비스

   스마트 컨트랙트를 개발한 블록체인에 배포하면

   스마트 컨트랙트의 어카운트 주소와 ABI등이 생성된다

 

휘스퍼 : 이더리움의 P2P 네트워크를 기반으로 추적 불가능한 P2P 메시징 서비스

 

스웜(Swarm) : 인센티브 방식으로 운영되는 P2P 파일 시스템이자 기본 CDN 유사한 콘텐츠 전달 채널


References

박재현,오재훈,박혜영. "코어 이더리움 프로그래밍" 


'Ethereum' 카테고리의 다른 글

Private Network 구축하기  (0) 2018.07.28
스마트 컨트랙트  (0) 2018.07.28

+ Recent posts