데이터 계층
외부 소유 어카운트(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 |