SlideShare a Scribd company logo
1 of 60
Download to read offline
Blockchain as a next platform
박재현
Jaehynpark.kr@gmail.com
wisefree.tistory.com
ethereum 연구회
목차
1. 컴퓨팅 플랫폼
2. 이더리움 블록체인 플랫폼
- 작동 과정 이해
- Single State Transition Model
- 이더리움 참조 모델
- 각 계층 이해
3. 해결 과제들과 노력들
ethereum 연구회
1. 컴퓨팅 플랫폼
ethereum 연구회
컴퓨팅 플랫폼
4
In computing, a platform describes some sort of framework, either in
hardware or software, which allows software to run. Typical platforms
include a computer's architecture, operating system, or programming
languages and their runtime libraries --
http://en.wikipedia.org/wiki/Platform_(computing)
ethereum 연구회
컴퓨팅 플랫폼의 변천 과정
5*Ajax : asynchronous JavaScript and XML
메인 프레임
웹 서버/
씬 클라이언트
클라우드
컴퓨팅
클라이언트/서버
컴퓨팅
웹 서버/
리치 클라이언트
다운사이징
1990년대 2000년대 2010년대
Web Ajax 가상화 블록체인
블록체인
P2P 컴퓨팅
SAP(Single Page App)
ethereum 연구회
• Web platform is consist of Web browser, Web Server , Web
development language with library , and other Web(Open API)
• Web as the computing platform
• Web as the delivery platform
• Web as the management platform
Web Computing Platform
6ethereum 연구회
이더리움 컴퓨팅 플랫폼
이더리움 플랫폼은 컨트랙과 비중앙화앱 (Dapp)을 개발하고 이를 이더리움
네트웍상의 블록체인과 전용 브라우져를 통해 배포하고 활용함.
• P2P 네트웍 노드상의 EVM 운영체제
• 스마크 컨트랙 개발언어와 비중앙화 앱(Dapp, Decentralized Applications)
• 전용 브라우져와 각종 관리 및 유틸리티 서비스
• 블록체인을 통한 데이터와 코드 배포
• 암호화폐와 운영 토큰에 의한 생태계 운영 메카니즘 제공
7ethereum 연구회
2. 이더리움 플랫폼
“이더리움은 정확히 프로그래밍 한대로 동작하는
스마트 컨트랙트를 동작시키는 분산된 플랫폼이다.”
– https://ethereum.org/
ethereum 연구회
이더리움 작동 과정
(3)이더
송금/수신
(1)이더리움 지갑 및 계정 생성
이더리움
플랫폼 개발자
사용자B
댑 개발자
사업주
댑(Dapp)
서비스
채굴자
블록1
블록0
블록2
블록N
……..
트랜젝션과
컨트랙들
(4)상품구매/
이더 결제
(5)상품판매
이더수취
계정주소+전자서명
0x064C998923e7170D698dB010ca9F53479fff6BF6
(6-2)신규블럭추가
& 브로드캐스팅
(2)매매/환전
(7)이더리움
플랫폼 개발
(8)컨트랙 기반
응용 서비스 개발
(6-1)블록 N-1헤더
해슁 계산 (Proof of Work)
스마트
컨트랙
거래소
트랜잭션1
블록 헤더
이전 블록헤더의
해시값
넌스
머클트리루트
트랜잭션2
트랜잭션3
:
타임스탬프
거래소
ethereum 연구회
이더리움
ICO
(1)프론티어
(Frontier)
(2)홈스테드
(Homestead)
(3)메트로폴리
스
(Metropolis)
(4)세레니티
(Serenity)
2016- 3- 142015-7-30
DAO attack
2016-7-8
1920000 블록번호
2016-7-20 DAO 포크
비잔티움
(Byzantium)
10
2014-08-06
컨스탄티노블(
Constantinople)
이더리움 로드맵
2017- 10
4,370,000 블록번호
ethereum 연구회
go-ethereum 핵심 패키지 호출 관계
11
실행계층
ethdb
leveldb
common logevent
eth contracteth
데이타계층
공통계층
crypto
rlp
rpcP2P
node
trie
core
account
동의계층
miner
consensus
lightethclient wisper swarm Smart
contract
응용계층 mobile
ethereum 연구회
이더리움 플랫폼 참조 모델
응용계층
Dapp & Smart Contract, Whisper, Swarm
( 관련 패키지 : swarm, whisper, ethclient, mobile )
동의 계층
합의 엔진 , 마이닝, 가스 ,
이더
( 관련 패키지: consensus,
consensus/ethash, miner )
실행 계층
EVM , 컨트랙
( 관련 패키지: console, contract,
core/vm, event, internal,,
rpc , eth, les, light,)
데이타 계층
블록 , 블록체인 , 머클트리 ,
계정, 트렌젝션, 메세지 등
( 관련 패키지 : account, core, cor
e/state, core/types, node,
trie )
공통 계층 - P2P 네트웍, DBMS, 전자서명, 인코딩, 암호 해쉬
( 관련 패키지 : P2p, ethdb , trie ,rlp crypt0 , kaccet 256 , ethstats ..)
ethereum 연구회
데이타 계층
ethereum 연구회
Single State Transition Model
APPLY(S) = S’[S:현재 상태] à (APPLY: 상태변이 함수) à (S’: 변이된 상태 또는 실패)
최초
상태
상태
1
상태
2
상태
N
.....
상태변이
함수
상태변이
함수
상태변이
함수
입력 입력 입력출력 출력
.....
트랜잭션 트랜잭션 트랜잭션
제네시스
블록
블록1 블록2 블록N
ethereum 연구회
어카운트(Account)
데이타 계층
외부 소유
어카운트(EOA)
트랜잭션
컨트랙
어카운트(CA)
외부 소유
어카운트(EOA) 트랜잭션
외부 소유
어카운트(EOA)
EOA에 의해서
작동이 됨
컨트랙
어카운트
메시지
CA에 의해서만
작동이 됨
ethereum 연구회
어카운트(Account)
//소스 위치 : package state
type Account struct {
Nonce uint64
Balance *big.Int
Root common.Hash // merkle root of the storage trie
CodeHash []byte
}
필드 설명
NONCE
외부 트랙잭션의 갯수를 의미하며 0으로 시작, 각 거래가 오직 한번만
처리되게 하는 일종의 카운터
BALANCE 어카운트의 이더 잔고(Wei)
Root trie 저장소의 루트
CodeHash 스마트 컨트랙 코드가 저장 공간
데이타 계층
ethereum 연구회
어카운트 주소 생성
• 공개키 = ECDSA (개인키) => 계정 번호 = BASE58Check(SHA3-256(공개키))
임의의
32바이트 개인키
ECDSA(secp256k1)
공개키
Keccak-256
최종값
Base58Check 후
마지막 20바이트
0x064C998923e7170D698dB010ca9F53479fff6BF6
데이타 계층
ECDSA(Elliptic Curve Digital Signature Algorithm), 타원형 곡선 전자서명
Keccak-256 != NIST표준(FIPS 202) SHA3
Base58Check 인코딩 , 256비트를 사람이 읽을 수 있는 64자리 Hex문자열로 변환
ethereum 연구회
상태(Status)
• 어카운트들이 모인 것을 상태(Status)라고 함.
• 어카운트에 접근하여 상태를 변경하려면 stateObject 를 통해 접근한 후 상태를 변경
할 수 있다. 변경된 어카운트는 CommitTrie를 호출하여 변경된 Trie를 ethdb 패키지를
통해 LevelDB 데이타베이스에 업데이트함.
//소스 위치 : package state
type stateObject struct {
address common.Address // 어드레스
addrHash common.Hash // 어카운트 주소의 Keccak256Hash
data Account // 이더리움 어카운트
db *StateDB // 상태를 저장할 DBMS에 대한 포인터
// Write caches.
trie Trie // Trie 저장소
code Code // 컨트렉의 바이트 코드
…….
}
데이타 계층
ethereum 연구회
트랜잭션(Transaction)
다른 어카운트나 컨트랙에 전달할 전자서명된 메시지로서 어카운트의 상태 변화를 이끔.
필드 설명
AccountNonce 외부 트랙잭션의 갯수를 의미하며 0으로 시작한다.
Recipient 거래를 받을 수신처
Amount 발신처가 수신처로 보내는 이더의 양
Payload 옵션으로 임의의 메세지, 함수호출, 계약 생성 코드
GasLimit 거래가 실행시 수행되도록 허용된 최대 트랜젝션 수행 횟수
Price 계산 단계마다 발신처가 지불하는 수수료
type Transaction struct {
data txdata
// caches
hash atomic.Value
Size atomic.Value
from atomic.Value
}
type txdata struct {
AccountNonce uint64 `json:"nonce" gencodec:"required"`
Price *big.Int `json:"gasPrice" gencodec:"required"`
GasLimit *big.Int `json:"gas" gencodec:"required"`
Recipient *common.Address `json:"to" rlp:"nil"` // nil means contract creation
Amount *big.Int `json:"value" gencodec:"required"`
Payload []byte `json:"input" gencodec:"required"`
// This is only used when marshaling to JSON.
Hash *common.Hash `json:"hash" rlp:"-"`
}
데이타 계층
ethereum 연구회
트랜잭션 리시이트(Receipt)
• 트랜잭션의 실행 결과.
• 이더리움은 트랜잭션과 관련된 실행 환경과 검색을 위한 인덱싱 등 블록내에 정상 등
록된 모든 트랜젝션들에 대한 정보를 리시이트에 저장
데이타 계층
//소스 위치 : package types
type Receipt struct {
PostState []byte `json:"root"`
Failed bool `json:"failed"`
CumulativeGasUsed *big.Int `json:"cumulativeGasUsed" gencodec:"required"`
Bloom Bloom `json:"logsBloom" gencodec:"required"`
Logs []*Log `json:"logs" gencodec:"required"`
// Implementation fields (don't reorder!)
TxHash common.Hash `json:"transactionHash" gencodec:"required"`
ContractAddresscommon.Address `json:"contractAddress"`
GasUsed *big.Int `json:"gasUsed" gencodec:"required"`
}
ethereum 연구회
type Block struct {
header *Header
uncles []*Header
transactions Transactions
td *big.Int
}
type Header struct {
ParentHash common.Hash
UncleHash common.Hash `json:"sha3Uncles" gencodec:"required"`
Coinbase common.Address `json:"miner" gencodec:"required"`
Root common.Hash `json:"stateRoot" gencodec:"required"`
TxHash common.Hash `json:"transactionsRoot" gencodec:"required"`
ReceiptHash common.Hash `json:"receiptsRoot" gencodec:"required"`
Bloom Bloom `json:"logsBloom" gencodec:"required"`
Difficulty *big.Int `json:"difficulty" gencodec:"required"`
Number *big.Int `json:"number" gencodec:"required"`
GasLimit *big.Int `json:"gasLimit" gencodec:"required"`
GasUsed *big.Int `json:"gasUsed" gencodec:"required"`
Time *big.Int `json:"timestamp" gencodec:"required"`
Extra []byte `json:"extraData" gencodec:"required"`
MixDigest common.Hash `json:"mixHash" gencodec:"required"`
Nonce BlockNonce `json:"nonce" gencodec:"required"`
}
데이타 계층
블록
• 이더리움의 기본 정보 저장 단위
ethereum 연구회
블록체인
• 블록들이 시간순으로 마치 체인처럼 연결됨
앞에 블록의 내용이 변경되면 뒤에 것도 모두 변경해야 함, 조작이 어려운 불가역 데이터
• 블록체인은 분산된 공유 원장.
모든 사용자가 모든 거래를 기록한 원장을 공유하기 때문에 새로운 블록이 체인에 추가되려면
거래의 타당성을 검증받아야 한다.(부당 거래 방지, 거래의 투명성)
데이타 계층
.....
트랜잭션 트랜잭션 트랜잭션
제네시스
블록
블록1 블록2 블록N
ethereum 연구회
데이타 계층
Block N
uncles []*Header
transactions Transactions
td *big.Int // total difficulty
}
Header {
ParentHash Coinbase UncleHash
Bloom Difficulty Number
GasLimit GasUsed Time Extra
MixDigest Nonce BlockNonce
Root TxHash ReceiptHash }
Block N + 1
uncles []*Header
transactions Transactions
td *big.Int // total difficulty
}
Header {
ParentHash Coinbase UncleHash
Bloom Difficulty Number
GasLimit GasUsed Time Extra
MixDigest Nonce BlockNonce
Root TxHash ReceiptHash }
리시이트 머클
Trie
트랜잭션 머클
Trie
머클-패트리시아
상태 Trie
KECCAK256 해쉬
리시이트 머클
Trie
트랜잭션 머클
Trie
머클-패트리시아
상태 Trie
블록체인
ethereum 연구회
머클 트리(Merkle Tree)
블록헤더의 Merkle root는 트랜젝션들의 거래 내용이 변조되었는지를 증명.
데이타 계층
노란별의 내용이 변경되었거나 변조가
의심시 붉은 원의 해시값만 재계산
1 2 3 4 5 6 7 8
a3f9 c3f9 63f9 e3f9 f3f9 a4f9 k3f6 r3f5
c8f8 e5f6 d309 k3f7
43a9 f3f5
53k3
머클루트
Tx1
TX
2
a3f9
c3f9
해시
해시
a3f9 c3f9
해시
c8f8
코어
이더리움
ethereum 연구회
머클 패트리시아 트리(Trie)
데이타 계층
머클 트리의 한계
- 상태 정보는 [키와 값]의 Map 구조
키 : 어카운트 주소
값 : 이더 잔액 , 넌스, 컨트랙일 경우 컨트랙 소스 , 스토리지 등
- 상태정보는 가변적이라 변경이 생길때 마다 전체 머클트리를 재계산해야 함.
개선 포인트
- 트리의 깊이를 한정지음 => 깊이가 무한대로 내려가 성능 저하가 되는 것을 방지
- 머클 루트를 값에 한정되도록 함 => 상태정보가 변경되더라도 머클루트는 변경이 안됨
- 노드에 값까지의 경로를 명시할 수 있는 페트리시아 트리를 도입
ethereum 연구회
머클 패트리시아 트리(Trie)
블록헤더의 Merkle root는 트랜젝션들의 거래 내용이 변조되었는지를 증명해준다.
데이타 계층
[a7:next node]
[d3:next node]
LevelDB
ethereum 연구회
wei: 1
kwei: 1.000
ada: 1.000
femtoether: 1.000
mwei: 1.000.000
babbage: 1.000.000
picoether: 1.000.000
gwei: 1.000.000.000 ( 1e-9 )
shannon: 1.000.000.000
nanoether: 1.000.000.000
nano: 1.000.000.000
szabo: 1.000.000.000.000
microether: 1.000.000.000.000
micro: 1.000.000.000.000
finney: 1.000.000.000.000.000
milliether: 1.000.000.000.000.000
milli: 1.000.000.000.000.000
ether: 1.000.000.000.000.000.000(1e-18)
kether: 1.000.000.000.000.000.000.000
grand: 1.000.000.000.000.000.000.000
einstein: 1.000.000.000.000.000.000.000
mether: 1.000.000.000.000.000.000.000.000
gether: 1.000.000.000.000.000.000.000.000.000
tether: 1.000.000.000.000.000.000.000.000.000.000
https://converter.murkin.me/
암호화폐 - 이더(Ether)
• EVM 연산 대가를 지불하는 데
사용.
• 변동성이 있기 때문에 트랜잭
션 비용으로 직접 사용하지 않
고 GAS를 통해 사용
27
동의 계층
이더리움에서 사용하는 화폐 단위.
ethereum 연구회
운용토큰 : GAS
• 최대 트랜잭션 실행 비용 = gasLimit * gasPrice
gasLimit : 해당 트렌젝션 수행에 소비되는 총 가스추정치
gasPrice : 1가스당 지불할 가격
28
http://ethgasstation.info/
동의 계층
가스는 이더리움의 운영토큰으로 트랜잭션의 수행 비용
사용자A
트랜잭션
시작
트랜잭션
완료
사용자B
채굴자
+100 가스
작업수행 작업수행
250 가스
가스 50
사용
가스 50
사용
200 가스 1500 가스
남은 가스 1500시작 가스
ethereum 연구회
블록 생성 – 트랜잭션 전자 서명 처리 과정
A는 트랜잭션 내역과 B의 공개 키를 가져와서 암호해
싱을 한다. 그리고 자신(A)의 개인키를 사용해서 전자
서명(Sign, ECDSA)을 한다.
서명된 트랜잭션을 현재 연결되어 있는 전체 노드에 브
로드캐스팅힘.
마이너는 A의 공개키로 개인키를 해제하여 전자서명
검증 등 트랜잭션의 유효성을 검증하고 이상이 없을시
트랜잭션 풀에 이를 등록함.
이후 마이너는 트랜잭션풀에서 가장 비싼 수행대가의
트랜잭션을 꺼내서 EVM을 생성하여 실행하고 블록 생
성 후 마이닝 작업을 하여 블록체인에 추가함.
사용자A가 사용자B에게 송금시 전자 서명 후 트랜잭션 처리
데이타 계층
마이너(채굴자)
사용자A 사용자B
트랜잭션
B의 공개키
Keccat256
ECDSA
A의 개인키
A의 공개키
1
1
2
3
트랜잭션풀
(GlbalSlots 4096)
3
4
4
전자서명
트랜잭션 검증
실행
브로드캐스트2
전자서명 검증
(문법,전자서명,넌스,거래비용)
sendTransaction()
signTx()
ethereum 연구회
BlockChain Sync
• Full Sync : 비트코인 네트워크에서 각 블록의 모든 정보를 저장하고 처리하는 노드
: 전체 블록체인의 내용을 저장 , 많은 디스크 공간을 필요로 함
: 트랜잭션의 유효성 검증시 제네니스 블록이하 모든 블록과 트랜젝션을 참조 (Confirmation)
• Fast Sync : 최근의 상태, 트랜잭션, 리시이트 등을 포함하고 있는 블록헤더만을 동기화함.
: 이전 히스터리를 알 수 없기 때문에 항목의 유효성을 검증할 수는 없다. 가령, 어카운트 A가 20 이더
를 갖고 있는 상태를 알 수는 있으나 어떤 거래 과정을 통해 해당 상태가 되었는지는 알 수 없다.
• Light Sync : 블록의 블록헤더를 다운로드후 작업 증명 여부를 검증하는 노드
: 전체 블록체인을 저장하지 않고, 블록의 헤더만을 저장 후 증명시 전체 블록과 특정 트랙젝션에 대
해 Merkle root를 통해 유효성 검증함
데이타 계층
ethereum 연구회
동의 계층
ethereum 연구회
동의 수단이 필요한 이유
• 중앙에서 이상유무를 확인해 주는 주체가 없기 때문에 참여자들은 해당 블록이나 트랜잭
션에 문제가 없다는 것을 서로 검토하고 동의를 해야 함.
• 네트웍 지연이나 미도달 등의 문제로 인해 중복 송신되거나 때로는 해커에 의해 변조되거
나 잘못된 정보들이 전달될 수 있다. 따라서 전달된 정보가 문제가 없다는 것을 참여자들
이 스스로 검증하고 그 유효성을 판단해야 함.
• 이더리움 네트워크에 연결되어 있는 모든 노드들은 블록체인을 로컬에 노드상에 복제
하여 공유하기 때문에 특정 노드가 임의로 블록체인을 조작하지 못하도록 해야 하고 , 블
록과 트랜잭션 등의 유효성 여부를 검증할 수 있는 방법이 필요함.
• 블록을 체인에 등록할 때 만약 두 개 이상의 유효한 블록체인이 동시에 존재한다면 이 중
이중 하나를 선택할 수 있는 규칙도 있어야 함.
동의 계층
누구를 믿을 것인가?
ethereum 연구회
작업에 의한 증명 방식(PoW)
블록 헤더 N
이전 블록헤더의
해시값
넌스(Nonce)
머클 트리의 루트
블록 헤더 N+1
이전 블록헤더의
해시값
넌스
머클 트리의 루트(3)넌스
(2)머클트리의
루트
(1)이전 블록
헤더의 해시값
암호
해시
암호
해시
트랜잭션1
트랜잭션2
트랜잭션3
머클 트리의 루트
암호
해시
작거나 같으면
해당 넌스값을
블록에 추가하고
네트워크에
전파함.
크면
넌스값을
재조정하여
재계산
타임스탬프
작업증명
동의 계층
암호
해시
블록헤더의 해시값이 난이도 목표에 제시된 값보다 작은 값이 나오게 하는 넌스 값 을 찾는 과정
목표값과 암호해시
값을와 비교
(목표값 = (2^256)/난이도)
ethereum 연구회
블록 전파와 충돌
N-1 N
N+1
N+1 N+2
X
동의 계층
사용자
마이너 1
마이너 2
마이너 3
마이너 4
마이닝
마이닝
마이닝
마이닝
마이닝
마이닝
마이닝
마이닝
마이닝
마이닝
마이닝
마이닝
트랜잭션1
브로드캐스팅
해쉬 계산 후
마이너1이 가장
먼저 블록생성
트랜잭션 2
브로드캐스팅
해쉬 계산 후
마이너2,3이 동시에
N+1생성하여 분기됨
트랜잭션 3
브로드캐스팅
해쉬 계산 후
마이너4가 발견하여
마이너3의 N+1블록뒤에 추가
같은 시점에 N+1블록이 각기 생성되어 N 블록에 연결됨
난이도가 높고 높이가
높은 쪽이 선택되고
버림받은 N+1노드는
엉클 블록이 됨.
ethereum 연구회
이더리움 동의 엔진, 이대시(Ethash)
• PoW의 문제점
- 많은 컴퓨팅 자원 및 처리 속도
- 마이닝 파워의 집중화(Centralization)
• 이대시
- 수정된 작업증명 (PoW) 방법 , 과거 대거-해시모토 ( Dagger - Hashmoto )라 불림
- 컴퓨터 메모리상의 일정 양의 데이터를 읽은 후 이를 넌스와 함께 해시 계산을 함으로써 메모리
IO 중심의 작업 증명
- 약 12초에 하나의 블록을 생성하는 것이 알고리즘의 궁극적인 목표, 현재 10~15초 마다 생성
- 메모리 계산을 위해 2차원 배열 데이터의 DAG(Directed acyclic graph) 파일이 사용됨
- 각 에포크(Epoch)마다 새로 생성됨( 에포크는 30,000블록/ 100시간을 말함 )
동의 계층
이대시는 컴퓨터 메모리상의 일정 양의 데이터를 읽은 후 이를 넌스와 함께 해시 계산하는 방식
ethereum 연구회
실행 계층
ethereum 연구회
스마트 컨트랙(Smart Contract)
• 1994년 닉 사제보(Nick Szabo), 신뢰할 수 없는 컴퓨터 인터넷 환경에서 고도로 발달
된 계약을 준수하도록 하는 프로토콜로서 최초 만들어 짐.
• 스마트 컨트랙의 목적
(1) 기존의 컨트랙 법률보다 우수한 보안성을 제공하는 것.
(2) 기존의 컨트랙 보다 저렴한 처리 비용.
• 비트코인에는 스크립트(Script) 라고 불리는 단순한 실행 프로그램만 지원하고 채굴자
(Miner)들의 거래 검증 알고리즘으로 사용( output과 input 공개키의 해시 연산 결과를
비교한 후 최종 CHECKSIG를 통해 개인키 검증을 통한 거래 검증 )
• 이더리움에서는 이를 발전시켜 상태 변경과 데이타 저장 등을 통해 상태전이가 가능한
튜링 컴플리트(Turing Complete) 코드로 발전시킴.
실행 계층
특정 계약을 스스로 수립,검증, 이행 하기 위한 컴퓨터 프로토콜 - 위키피디아
https://www.youtube.
com/watch?v=vXCOf
TteQAo
ethereum 연구회
컨트랙 메세지(Message)
• (외부 어카운트가 아니라)컨트랙에 의해서만 생성되며 다른 컨트랙에게 전달됨.
: EVM의 Call/CallCode/DelegatecallCall/StaticCall opcode 호출시 생성됨.
• 메세지는 트랜잭션과 다르게 가상 객체이기 때문에 별도 저장할 필요가 없으며 EVM 실행환
경내에서만 존재
필드 설명
발신자 주소(from) 메시지를 전송한 발신처
수신처 주소(to) 메시지를 수신할 수신처
가스 총량(GasLimit) 트랜잭션 수행에 소비될 총가스량에 대한 추정치
가격 가격(Price) 가스당 트랜잭션을 요청한 사람이 지불할 가격.
이더(amount) 메시지와 함께 전달되는 이더 (wei)
데이터(optional) 데이터 필드
넌스(nonce) 거래가 실행시 수행되도록 허용된 최대트랜젝션수행 횟수
실행 계층
ethereum 연구회
스마트 컨트랙 작동 과정
39
실행 계층
• 컨트랙이 배포가 되면 컨트랙 주소가 생성됨.
• 해당 컨트랙 주소에 입력값과 GAS 비용을 지
불하고 트랜잭션을 발생하면 실행됨
개발자
1
2
3
솔리디티로
스마트 컨트랙
코드 작성
solc 컴파일
바이트코드
N+1
N
N-1
N-2
.......
블록체인
배포
이더리움 클라이언트(Geth)
배포
EVM
0xC2Af7e46B2aA24cF9501c4c85251Fa6d9eF246C6
콘솔
브라우져
Web3.js
명령실행
Json-
RPC
주소,ABI
ethereum 연구회
EVM(Ethereum Virtual Machine)
40
실행 계층
스마트 컨트랙의 바이트코드를 을 실행하는 32 바이트 스택 기반의 실행 환경
• 코드 실행은 0부터 시작하는 프로그램 카운터를 증가시키며 반복적으로
연산(loop)을 수행한다. 코드는 종료 조건이 만족했을 때 실행을 멈춘다
: 오류, STOP 명령어,RETURN 명령어,실행 완료
• 연산 수행을 위해서는 세가지 타입의 공간에 접근이 가능해야 함.
· 스택 : LIFO(Last-In-First-Out) 컨테이너에 값(Value)를 푸시(push) 하거
나 팝(pop)함.
· 메모리 : 무한대로 확장 가능한 바이트 배열
· 저장소 : 키(Key)/값(value) 저장소(ethdb 패키지 -> simpleDB).
계산이 끝나면 리셋되는 스택이나 메모리와는 달리 저장소는 영속적으
로 유지됨
휘발성
비휘발성
ROM RAM
메모리스택
파라
메터
RAM
스토리지
ROM
코드
ethereum 연구회
EVM 실행
41
실행 계층
1+2 = 3
데이터
데이터
데이터 데이터
푸시 팝
1 1
2
PUSH1 PUSH1
3
ADD
ethereum 연구회
EVM 실행
6001600201 => 0x60(push1) 0x01(1) 0x60(push1) 0x02(2) 0x01(add)
$ evm --debug --code 6001600201 run
42
실행 계층
1+2 = 3
ethereum 연구회
공통 계층
In computer networking, a wire
protocol refers to a way of
getting data from point to point: A wire
protocol is needed if more than one
application has to interoperate.
ethereum 연구회
이더리움 P2P 네트워크(DevP2P)
44
공통 계층
• 일반 전송과 어플리케이션간의 통신을 위해 RLPx 라는 암호화된 피어간 네트워크
프로토콜을 사용(분산 해시 테이블인 Kadelima 프로토콜을 기반)
• RLPx에는 피어간의 노드를 탐색하기 위한 기능과 타원형 곡선 방정식으로 서명된
UDP 프로토콜과 암호화되고 인증된 TCP 등 이더리움 전반에서 사용되는 P2P 네트
워크 기능이 모두 포함
ethereum 연구회
이더리움 P2P 네트워크
45
공통 계층
• 노드의 주소 , enode
enode://2e9ed6a5e6eb264f58b77564a46bdaafb1ff0bbb078e36e22b0f8aaa809a179f0fee79ac8a91
42dff891583fb30ce84a4a638459b927cec60e91103f4a00ef86@10.7.77.5:30303?discport=30301
노드의 ID - ECDSA를 사용하여 프라이빗 키로 서명된 512 비트 공개키, 16진수 값
@ - 구분자
10.7.77.5 - 호스트의 IP주소 (DNS를 사용할 수 없음)
30303 - TCP포트 값
Discport - UDP포트 값
ethereum 연구회
• 다른 노드와의 연결 프로세스
ü 미리 하드코딩된 bootstrap node 목록을 참조하여 연결을 시도.
ü geth 기동시 노드 지정.
$ geth --bootnodes 찾고자 자는 노드의 enode URL ( 여러 개일 경우 , 콤마로 구분함)
ü Geth 콘솔상에서 admin.addPeer(..)를 사용하여 연결하고자 하는 노드를 직접 지정하여 연결.
>admin.addPeer("enode://2e9ed6a5e6eb264f58b77564a46bdaafb1ff0bbb078e36e22b0f8aaa809a179f0fee79ac8a
9142dff891583fb30ce84a4a638459b927cec60e91103f4a00ef86@10.7.77.5:30303?discport=30301")
ü 정적 노드 기능 - geth가 구동할 때 항상 특정 노드와 연결함. geth가 설치되어 있는 디렉토리 하
에 static-nodes.json 파일을 생성.
[ "enode://2e9ed6a5e6eb264f58b77564a46bdaafb1ff0bbb078e36e22b0f8aaa809a179f0fee79ac8a
9142dff891583fb30ce84a4a638459b927cec60e91103f4a00ef86@10.7.77.5:30303?discport=30301
", "enode://공개키@ip주소:포트"
]
이더리움 P2P 네트워크
46
공통 계층
ethereum 연구회
• 노드 디스커버 프로토콜
ü 다른 일반 노드는 Node discovery protocol을 사용하여 발견.연결한다.
ü UDP 기반의 RPC 프로토콜, 4 가지 패킷 타입 : ping, pong, findnode , neighbors
이더리움 P2P 네트워크
47
공통 계층
패킷 타입 패킷 타입 값 설명
ping 1 노드가 온라인 상태인지를 확인한다. Ping 을 받은 노드는 Pong 패킷을 보내 응
답하고 연결되어 있는 피어 노드 중 첫번째 노드에게 자신의 Ping을 보낸다.
pong 2 ping에 대한 응답 패킷
findnode 3 목표 노드의 주변에 위치한 피어 노드들에게 전달된다. 수신자는 해당 목표 노드
주변에 위치한 노드들을 알고 있다면 해당 노드들의 목록을 Neighbors 패킷에 포
함하여 반환한다.
neighbours 4 Find Node에 대한 응답 패킷으로 요청된 목표 노드의 인접한 노드들을 포함하여
반환한다.
ethereum 연구회
48
이더리움 P2P 네트워크
공통 계층
https://ethernodes.org/
ethereum 연구회
49
• 이더리움은 기본 저장소로 키와 값 저장소로 Go언어로 개발된 LevelDB 라
이브러리를 ethdb 라는 패키지를 통해 사용하고 있다.
• 실제 어카운트를 비롯하여 머클트리의 트랜잭션과 리시이트 정보 , 그리고
머클 패트리시아 트리내의 모든 상태 정보가 ethdb를 패키지를 통해
LevelDB에 저장된다
이더리움 스토리지
공통 계층
ethereum 연구회
응용 계층
ethereum 연구회
댑(Dapp, Decentralized app)
• 스마트 컨트랙 기반의 웹서비스
51
응용 계층
Dapp
개발자
댑
블록1
블록0
블록2
블록N
……..
트랜젝션과
컨트랙들
스마트 컨트랙 주소
+ ABI* + 넌스**
*ABI(Application Binary Interface)
**넌스: 트랜잭션의 중복호출 방지
사용자
Web3.js
json-rpc
Dapp 전용 브라우져
(Mist,Crome+metamask,.. )
HTML/CSS/
자바스크립트
ethereum 연구회
Dapp as a web3.0
• Dapp은 정보의 인터넷을 가치의 인터넷으로 진화 과정이다.
52
응용 계층
데이터&컨텐트
기존의 웹 앱(정보의 인터넷)
웹 브라우져
웹 서비스
이더리움 기반 댑(Dapp, 가치의 인터넷)
분산
프로세싱
댑가능 브라우져
댑
Web3 API
+
(분산파일)
(분산메세징)
ethereum 연구회
Dapp 현황
• 금융 DApps: 자산을 블록체인 위에 올리고 스마트 컨트랙트의 대상으로 사용
: 채권, 주식, 파생상품, 보험, 복권, 도박 등
• 준/비금융 DApps: 토큰, 쿠폰, 네임코인, 투표 등
• 탈중앙화 조직/회사: 회사나 조직을 블록체인 상에 올려서 운영
: 월급지급, 금전거래, 회계장부기록, 지분표시 등
• 탈중앙화 자율조직/회사 (DAO/DAC): 블록체인 상의 알고리즘으로 의사를 결정하여 영업, 회
계, 구매, 판매 및 수익 분배 등을 실현
• Dapps 목록 : https://docs.google.com/spreadsheets/d/1VdRMFENPzjL2V-vZhcc_aa5-ysf243t5vXlxC2b054g/htmlview?pli=1
• State of the Dapps : https://www.stateofthedapps.com/
응용 계층
ethereum 연구회
• 스윔은 블록체인 데이터 뿐만 아니라 댑의 코드와 데이터 , 컨텐트 같은 이더리움의 공
용 데이타를 비중앙화로 저장하고 해당 컨텐트를 전달해 줌
• 기존 토렌토(Torrent)같은 P2P 파일 시스템은 다운로드 시작시 소요 시간이 많이 걸리
고 지속적으로 운영해야 할 인센티브가 없기 때문에 이를 직접 이용할 수 없다.
54
Swarm
응용 계층
인센티브 방식으로 운영되는 P2P파일 시스템이자 컨텐트 전달 채널
• SWAP ( Swarm Accounting Protocol ) 인센티브 시스템
• 컨텐트를 다운로드 받으면 이를 제공한 피어 노드에게 대가를 지불한다.
• 인기많은 컨텐트를 제공하면 해당 컨텐트를 이용한 피어들로 부터 대가를 받는다.
ethereum 연구회
A B
Create secret line
Symmetric Key(2),Topic(2), pow requirement(2)
Public Key
Symmetric Key(2),Topic(2),pow requirement(2) (without topic)
Message(/w symmetric key1)
Message(/w symmetric key2)
• 추적불가능한 P2P 메세징 프로토콜
Multi-casting , broadcasting , M-to-M 등 다양한 노드간 메세징 지원
55
Whisper
응용 계층
ethereum 연구회
이더리움 미래
ethereum 연구회
- PoW
- 많은 컴퓨팅 자원 및 처리 속도
- 마이닝 파워의 집중화(Centralization)
- 블록체인의 데이터 크기 증가
- 네트웍상의 모든 노드들이 데이터를 동기화하는 데 많은 시간과 비용이 듬.
- 성능
- 트랜잭션 처리 시간과 용량 ( 현재 20TPS , 페이팔 193 TPS , 비자 1667 TPS, 비트코인 7TPS )
- 블록 생성 합의 시간과 블록내 트랜잭션 처리 시간 단축( 현재 평균 13분 , 가장 낮은 가스)
- 스마트 컨트랙과 EVM
- 업데이트 지원안 됨 / Too simple & 1024 call stack depth size
- 입력 데이터의 신뢰성확보 방안 필요 => 신뢰할만한 Oracle이나 외부 기관이 필요함.
- ICO 버블
BlockChain Issues
ethereum 연구회
- PoS 캐스퍼
- 샤딩
- 라이덴 네트웍크 & 스테이트 채널
- 플라즈마
BlockChain efforts
ethereum 연구회
Priority matrix for Blockchain 2017
ethereum 연구회
Q&A

More Related Content

What's hot

Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programmingihpark92
 
Blockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractBlockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractFermat Jade
 
Blockchain 2nd ethereum_core
Blockchain 2nd ethereum_coreBlockchain 2nd ethereum_core
Blockchain 2nd ethereum_coreihpark92
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingihpark92
 
Blockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreBlockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreihpark92
 
Dapp시연 150214
Dapp시연 150214Dapp시연 150214
Dapp시연 150214Jihong Shim
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)Colin Chae
 
Block chain introduction slideshare
Block chain introduction   slideshareBlock chain introduction   slideshare
Block chain introduction slidesharewonyong hwang
 
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)경록 박
 
Blockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSBlockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSFermat Jade
 
Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2Soobok Jin
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)제호 송
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System상현 조
 
Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안TIMEGATE
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group SystemGCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server SampleGCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample상현 조
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료TIMEGATE
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조Logpresso
 

What's hot (20)

Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programming
 
Blockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractBlockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart Contract
 
Blockchain 2nd ethereum_core
Blockchain 2nd ethereum_coreBlockchain 2nd ethereum_core
Blockchain 2nd ethereum_core
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programming
 
Blockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreBlockchain 1st bitcoin_core
Blockchain 1st bitcoin_core
 
Dapp시연 150214
Dapp시연 150214Dapp시연 150214
Dapp시연 150214
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
 
Block chain introduction slideshare
Block chain introduction   slideshareBlock chain introduction   slideshare
Block chain introduction slideshare
 
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
 
Blockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POSBlockchain Study(2) - POW&POS
Blockchain Study(2) - POW&POS
 
Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
 
Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
 
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group SystemGCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
 
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server SampleGCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
GCGC- CGCII 서버 엔진에 적용된 기술 (6) - CGCII Server Sample
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조
 

Viewers also liked

java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰Sungchul Park
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Wooseung Kim
 
141022 핀테크 미니 컨퍼런스 유영석 코빗 대표
141022 핀테크 미니 컨퍼런스 유영석 코빗 대표141022 핀테크 미니 컨퍼런스 유영석 코빗 대표
141022 핀테크 미니 컨퍼런스 유영석 코빗 대표StartupAlliance
 
비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주Seok-ju Yun
 
비트코인과 디지털통화 - 이주영
비트코인과 디지털통화 - 이주영비트코인과 디지털통화 - 이주영
비트코인과 디지털통화 - 이주영00heights
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013beom kyun choi
 
암호화폐의 미래에 관한 브리핑
암호화폐의 미래에 관한 브리핑암호화폐의 미래에 관한 브리핑
암호화폐의 미래에 관한 브리핑Charles Pyo
 
테마키보드 매체소개서
테마키보드 매체소개서테마키보드 매체소개서
테마키보드 매체소개서Charles Pyo
 
블록체인 개요
블록체인 개요블록체인 개요
블록체인 개요Jeff Paik
 
간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기beom kyun choi
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나beom kyun choi
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면Byeongsu Kang
 
알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1Byeongsu Kang
 
Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Byeongsu Kang
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드도형 임
 

Viewers also liked (20)

java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰java 8 람다식 소개와 의미 고찰
java 8 람다식 소개와 의미 고찰
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)
 
141022 핀테크 미니 컨퍼런스 유영석 코빗 대표
141022 핀테크 미니 컨퍼런스 유영석 코빗 대표141022 핀테크 미니 컨퍼런스 유영석 코빗 대표
141022 핀테크 미니 컨퍼런스 유영석 코빗 대표
 
비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주비트코인 네트워크 기술 소개 - 임석의, 윤석주
비트코인 네트워크 기술 소개 - 임석의, 윤석주
 
비트코인과 디지털통화 - 이주영
비트코인과 디지털통화 - 이주영비트코인과 디지털통화 - 이주영
비트코인과 디지털통화 - 이주영
 
Bitcoin
BitcoinBitcoin
Bitcoin
 
Tdd live spring camp 2013
Tdd live spring camp 2013Tdd live spring camp 2013
Tdd live spring camp 2013
 
암호화폐의 미래에 관한 브리핑
암호화폐의 미래에 관한 브리핑암호화폐의 미래에 관한 브리핑
암호화폐의 미래에 관한 브리핑
 
테마키보드 매체소개서
테마키보드 매체소개서테마키보드 매체소개서
테마키보드 매체소개서
 
블록체인 개요
블록체인 개요블록체인 개요
블록체인 개요
 
간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기간단 Ip 필터 구현 이야기
간단 Ip 필터 구현 이야기
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면
 
알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1알고리즘 문제해결전략 #1
알고리즘 문제해결전략 #1
 
알고리즘2
알고리즘2알고리즘2
알고리즘2
 
Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
 

Similar to 세션1. block chain as a platform

동기화, 스케줄링
동기화, 스케줄링동기화, 스케줄링
동기화, 스케줄링xxbdxx
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본ssuser0c2478
 
Windows via c++ chapter6
Windows via c++   chapter6Windows via c++   chapter6
Windows via c++ chapter6Shin heemin
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계Chiwon Song
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안Lee Ji Eun
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GDG Korea
 
HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템박 민규
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdfSeokju Hong
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 
중급 소켓프로그래밍
중급 소켓프로그래밍중급 소켓프로그래밍
중급 소켓프로그래밍quxn6
 
if kakao dev 2019_Ground X_Session 02
if kakao dev 2019_Ground X_Session 02if kakao dev 2019_Ground X_Session 02
if kakao dev 2019_Ground X_Session 02Klaytn
 
2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summitTae Young Lee
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js연웅 조
 

Similar to 세션1. block chain as a platform (20)

Blockchain
BlockchainBlockchain
Blockchain
 
동기화, 스케줄링
동기화, 스케줄링동기화, 스케줄링
동기화, 스케줄링
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 
Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본Windows via C/C++ 06 스레드의 기본
Windows via C/C++ 06 스레드의 기본
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
Windows via c++ chapter6
Windows via c++   chapter6Windows via c++   chapter6
Windows via c++ chapter6
 
Mem cached
Mem cachedMem cached
Mem cached
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
 
ice_grad
ice_gradice_grad
ice_grad
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템HTTP 완벽가이드- 19장 배포시스템
HTTP 완벽가이드- 19장 배포시스템
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
중급 소켓프로그래밍
중급 소켓프로그래밍중급 소켓프로그래밍
중급 소켓프로그래밍
 
if kakao dev 2019_Ground X_Session 02
if kakao dev 2019_Ground X_Session 02if kakao dev 2019_Ground X_Session 02
if kakao dev 2019_Ground X_Session 02
 
2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summit
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 

More from Jay JH Park

20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig Economy20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig EconomyJay JH Park
 
Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )Jay JH Park
 
Hidden 서비스 소개
Hidden 서비스 소개 Hidden 서비스 소개
Hidden 서비스 소개 Jay JH Park
 
Samsung Pay, The future of Pay
Samsung Pay, The future of PaySamsung Pay, The future of Pay
Samsung Pay, The future of PayJay JH Park
 
클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatONJay JH Park
 
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 Jay JH Park
 

More from Jay JH Park (6)

20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig Economy20170322-Postech Seminar-Gig Economy
20170322-Postech Seminar-Gig Economy
 
Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )Hidden 서비스 소개 - 티스테이지강연(201061125 )
Hidden 서비스 소개 - 티스테이지강연(201061125 )
 
Hidden 서비스 소개
Hidden 서비스 소개 Hidden 서비스 소개
Hidden 서비스 소개
 
Samsung Pay, The future of Pay
Samsung Pay, The future of PaySamsung Pay, The future of Pay
Samsung Pay, The future of Pay
 
클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON클라우드 인프라 기반 서비스 개발 - ChatON
클라우드 인프라 기반 서비스 개발 - ChatON
 
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발 모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
모바일 네트워크 친화적인 글로벌 메시징 서비스 - ChatON 개발
 

세션1. block chain as a platform

  • 1. Blockchain as a next platform 박재현 Jaehynpark.kr@gmail.com wisefree.tistory.com ethereum 연구회
  • 2. 목차 1. 컴퓨팅 플랫폼 2. 이더리움 블록체인 플랫폼 - 작동 과정 이해 - Single State Transition Model - 이더리움 참조 모델 - 각 계층 이해 3. 해결 과제들과 노력들 ethereum 연구회
  • 4. 컴퓨팅 플랫폼 4 In computing, a platform describes some sort of framework, either in hardware or software, which allows software to run. Typical platforms include a computer's architecture, operating system, or programming languages and their runtime libraries -- http://en.wikipedia.org/wiki/Platform_(computing) ethereum 연구회
  • 5. 컴퓨팅 플랫폼의 변천 과정 5*Ajax : asynchronous JavaScript and XML 메인 프레임 웹 서버/ 씬 클라이언트 클라우드 컴퓨팅 클라이언트/서버 컴퓨팅 웹 서버/ 리치 클라이언트 다운사이징 1990년대 2000년대 2010년대 Web Ajax 가상화 블록체인 블록체인 P2P 컴퓨팅 SAP(Single Page App) ethereum 연구회
  • 6. • Web platform is consist of Web browser, Web Server , Web development language with library , and other Web(Open API) • Web as the computing platform • Web as the delivery platform • Web as the management platform Web Computing Platform 6ethereum 연구회
  • 7. 이더리움 컴퓨팅 플랫폼 이더리움 플랫폼은 컨트랙과 비중앙화앱 (Dapp)을 개발하고 이를 이더리움 네트웍상의 블록체인과 전용 브라우져를 통해 배포하고 활용함. • P2P 네트웍 노드상의 EVM 운영체제 • 스마크 컨트랙 개발언어와 비중앙화 앱(Dapp, Decentralized Applications) • 전용 브라우져와 각종 관리 및 유틸리티 서비스 • 블록체인을 통한 데이터와 코드 배포 • 암호화폐와 운영 토큰에 의한 생태계 운영 메카니즘 제공 7ethereum 연구회
  • 8. 2. 이더리움 플랫폼 “이더리움은 정확히 프로그래밍 한대로 동작하는 스마트 컨트랙트를 동작시키는 분산된 플랫폼이다.” – https://ethereum.org/ ethereum 연구회
  • 9. 이더리움 작동 과정 (3)이더 송금/수신 (1)이더리움 지갑 및 계정 생성 이더리움 플랫폼 개발자 사용자B 댑 개발자 사업주 댑(Dapp) 서비스 채굴자 블록1 블록0 블록2 블록N …….. 트랜젝션과 컨트랙들 (4)상품구매/ 이더 결제 (5)상품판매 이더수취 계정주소+전자서명 0x064C998923e7170D698dB010ca9F53479fff6BF6 (6-2)신규블럭추가 & 브로드캐스팅 (2)매매/환전 (7)이더리움 플랫폼 개발 (8)컨트랙 기반 응용 서비스 개발 (6-1)블록 N-1헤더 해슁 계산 (Proof of Work) 스마트 컨트랙 거래소 트랜잭션1 블록 헤더 이전 블록헤더의 해시값 넌스 머클트리루트 트랜잭션2 트랜잭션3 : 타임스탬프 거래소 ethereum 연구회
  • 10. 이더리움 ICO (1)프론티어 (Frontier) (2)홈스테드 (Homestead) (3)메트로폴리 스 (Metropolis) (4)세레니티 (Serenity) 2016- 3- 142015-7-30 DAO attack 2016-7-8 1920000 블록번호 2016-7-20 DAO 포크 비잔티움 (Byzantium) 10 2014-08-06 컨스탄티노블( Constantinople) 이더리움 로드맵 2017- 10 4,370,000 블록번호 ethereum 연구회
  • 11. go-ethereum 핵심 패키지 호출 관계 11 실행계층 ethdb leveldb common logevent eth contracteth 데이타계층 공통계층 crypto rlp rpcP2P node trie core account 동의계층 miner consensus lightethclient wisper swarm Smart contract 응용계층 mobile ethereum 연구회
  • 12. 이더리움 플랫폼 참조 모델 응용계층 Dapp & Smart Contract, Whisper, Swarm ( 관련 패키지 : swarm, whisper, ethclient, mobile ) 동의 계층 합의 엔진 , 마이닝, 가스 , 이더 ( 관련 패키지: consensus, consensus/ethash, miner ) 실행 계층 EVM , 컨트랙 ( 관련 패키지: console, contract, core/vm, event, internal,, rpc , eth, les, light,) 데이타 계층 블록 , 블록체인 , 머클트리 , 계정, 트렌젝션, 메세지 등 ( 관련 패키지 : account, core, cor e/state, core/types, node, trie ) 공통 계층 - P2P 네트웍, DBMS, 전자서명, 인코딩, 암호 해쉬 ( 관련 패키지 : P2p, ethdb , trie ,rlp crypt0 , kaccet 256 , ethstats ..) ethereum 연구회
  • 14. Single State Transition Model APPLY(S) = S’[S:현재 상태] à (APPLY: 상태변이 함수) à (S’: 변이된 상태 또는 실패) 최초 상태 상태 1 상태 2 상태 N ..... 상태변이 함수 상태변이 함수 상태변이 함수 입력 입력 입력출력 출력 ..... 트랜잭션 트랜잭션 트랜잭션 제네시스 블록 블록1 블록2 블록N ethereum 연구회
  • 15. 어카운트(Account) 데이타 계층 외부 소유 어카운트(EOA) 트랜잭션 컨트랙 어카운트(CA) 외부 소유 어카운트(EOA) 트랜잭션 외부 소유 어카운트(EOA) EOA에 의해서 작동이 됨 컨트랙 어카운트 메시지 CA에 의해서만 작동이 됨 ethereum 연구회
  • 16. 어카운트(Account) //소스 위치 : package state type Account struct { Nonce uint64 Balance *big.Int Root common.Hash // merkle root of the storage trie CodeHash []byte } 필드 설명 NONCE 외부 트랙잭션의 갯수를 의미하며 0으로 시작, 각 거래가 오직 한번만 처리되게 하는 일종의 카운터 BALANCE 어카운트의 이더 잔고(Wei) Root trie 저장소의 루트 CodeHash 스마트 컨트랙 코드가 저장 공간 데이타 계층 ethereum 연구회
  • 17. 어카운트 주소 생성 • 공개키 = ECDSA (개인키) => 계정 번호 = BASE58Check(SHA3-256(공개키)) 임의의 32바이트 개인키 ECDSA(secp256k1) 공개키 Keccak-256 최종값 Base58Check 후 마지막 20바이트 0x064C998923e7170D698dB010ca9F53479fff6BF6 데이타 계층 ECDSA(Elliptic Curve Digital Signature Algorithm), 타원형 곡선 전자서명 Keccak-256 != NIST표준(FIPS 202) SHA3 Base58Check 인코딩 , 256비트를 사람이 읽을 수 있는 64자리 Hex문자열로 변환 ethereum 연구회
  • 18. 상태(Status) • 어카운트들이 모인 것을 상태(Status)라고 함. • 어카운트에 접근하여 상태를 변경하려면 stateObject 를 통해 접근한 후 상태를 변경 할 수 있다. 변경된 어카운트는 CommitTrie를 호출하여 변경된 Trie를 ethdb 패키지를 통해 LevelDB 데이타베이스에 업데이트함. //소스 위치 : package state type stateObject struct { address common.Address // 어드레스 addrHash common.Hash // 어카운트 주소의 Keccak256Hash data Account // 이더리움 어카운트 db *StateDB // 상태를 저장할 DBMS에 대한 포인터 // Write caches. trie Trie // Trie 저장소 code Code // 컨트렉의 바이트 코드 ……. } 데이타 계층 ethereum 연구회
  • 19. 트랜잭션(Transaction) 다른 어카운트나 컨트랙에 전달할 전자서명된 메시지로서 어카운트의 상태 변화를 이끔. 필드 설명 AccountNonce 외부 트랙잭션의 갯수를 의미하며 0으로 시작한다. Recipient 거래를 받을 수신처 Amount 발신처가 수신처로 보내는 이더의 양 Payload 옵션으로 임의의 메세지, 함수호출, 계약 생성 코드 GasLimit 거래가 실행시 수행되도록 허용된 최대 트랜젝션 수행 횟수 Price 계산 단계마다 발신처가 지불하는 수수료 type Transaction struct { data txdata // caches hash atomic.Value Size atomic.Value from atomic.Value } type txdata struct { AccountNonce uint64 `json:"nonce" gencodec:"required"` Price *big.Int `json:"gasPrice" gencodec:"required"` GasLimit *big.Int `json:"gas" gencodec:"required"` Recipient *common.Address `json:"to" rlp:"nil"` // nil means contract creation Amount *big.Int `json:"value" gencodec:"required"` Payload []byte `json:"input" gencodec:"required"` // This is only used when marshaling to JSON. Hash *common.Hash `json:"hash" rlp:"-"` } 데이타 계층 ethereum 연구회
  • 20. 트랜잭션 리시이트(Receipt) • 트랜잭션의 실행 결과. • 이더리움은 트랜잭션과 관련된 실행 환경과 검색을 위한 인덱싱 등 블록내에 정상 등 록된 모든 트랜젝션들에 대한 정보를 리시이트에 저장 데이타 계층 //소스 위치 : package types type Receipt struct { PostState []byte `json:"root"` Failed bool `json:"failed"` CumulativeGasUsed *big.Int `json:"cumulativeGasUsed" gencodec:"required"` Bloom Bloom `json:"logsBloom" gencodec:"required"` Logs []*Log `json:"logs" gencodec:"required"` // Implementation fields (don't reorder!) TxHash common.Hash `json:"transactionHash" gencodec:"required"` ContractAddresscommon.Address `json:"contractAddress"` GasUsed *big.Int `json:"gasUsed" gencodec:"required"` } ethereum 연구회
  • 21. type Block struct { header *Header uncles []*Header transactions Transactions td *big.Int } type Header struct { ParentHash common.Hash UncleHash common.Hash `json:"sha3Uncles" gencodec:"required"` Coinbase common.Address `json:"miner" gencodec:"required"` Root common.Hash `json:"stateRoot" gencodec:"required"` TxHash common.Hash `json:"transactionsRoot" gencodec:"required"` ReceiptHash common.Hash `json:"receiptsRoot" gencodec:"required"` Bloom Bloom `json:"logsBloom" gencodec:"required"` Difficulty *big.Int `json:"difficulty" gencodec:"required"` Number *big.Int `json:"number" gencodec:"required"` GasLimit *big.Int `json:"gasLimit" gencodec:"required"` GasUsed *big.Int `json:"gasUsed" gencodec:"required"` Time *big.Int `json:"timestamp" gencodec:"required"` Extra []byte `json:"extraData" gencodec:"required"` MixDigest common.Hash `json:"mixHash" gencodec:"required"` Nonce BlockNonce `json:"nonce" gencodec:"required"` } 데이타 계층 블록 • 이더리움의 기본 정보 저장 단위 ethereum 연구회
  • 22. 블록체인 • 블록들이 시간순으로 마치 체인처럼 연결됨 앞에 블록의 내용이 변경되면 뒤에 것도 모두 변경해야 함, 조작이 어려운 불가역 데이터 • 블록체인은 분산된 공유 원장. 모든 사용자가 모든 거래를 기록한 원장을 공유하기 때문에 새로운 블록이 체인에 추가되려면 거래의 타당성을 검증받아야 한다.(부당 거래 방지, 거래의 투명성) 데이타 계층 ..... 트랜잭션 트랜잭션 트랜잭션 제네시스 블록 블록1 블록2 블록N ethereum 연구회
  • 23. 데이타 계층 Block N uncles []*Header transactions Transactions td *big.Int // total difficulty } Header { ParentHash Coinbase UncleHash Bloom Difficulty Number GasLimit GasUsed Time Extra MixDigest Nonce BlockNonce Root TxHash ReceiptHash } Block N + 1 uncles []*Header transactions Transactions td *big.Int // total difficulty } Header { ParentHash Coinbase UncleHash Bloom Difficulty Number GasLimit GasUsed Time Extra MixDigest Nonce BlockNonce Root TxHash ReceiptHash } 리시이트 머클 Trie 트랜잭션 머클 Trie 머클-패트리시아 상태 Trie KECCAK256 해쉬 리시이트 머클 Trie 트랜잭션 머클 Trie 머클-패트리시아 상태 Trie 블록체인 ethereum 연구회
  • 24. 머클 트리(Merkle Tree) 블록헤더의 Merkle root는 트랜젝션들의 거래 내용이 변조되었는지를 증명. 데이타 계층 노란별의 내용이 변경되었거나 변조가 의심시 붉은 원의 해시값만 재계산 1 2 3 4 5 6 7 8 a3f9 c3f9 63f9 e3f9 f3f9 a4f9 k3f6 r3f5 c8f8 e5f6 d309 k3f7 43a9 f3f5 53k3 머클루트 Tx1 TX 2 a3f9 c3f9 해시 해시 a3f9 c3f9 해시 c8f8 코어 이더리움 ethereum 연구회
  • 25. 머클 패트리시아 트리(Trie) 데이타 계층 머클 트리의 한계 - 상태 정보는 [키와 값]의 Map 구조 키 : 어카운트 주소 값 : 이더 잔액 , 넌스, 컨트랙일 경우 컨트랙 소스 , 스토리지 등 - 상태정보는 가변적이라 변경이 생길때 마다 전체 머클트리를 재계산해야 함. 개선 포인트 - 트리의 깊이를 한정지음 => 깊이가 무한대로 내려가 성능 저하가 되는 것을 방지 - 머클 루트를 값에 한정되도록 함 => 상태정보가 변경되더라도 머클루트는 변경이 안됨 - 노드에 값까지의 경로를 명시할 수 있는 페트리시아 트리를 도입 ethereum 연구회
  • 26. 머클 패트리시아 트리(Trie) 블록헤더의 Merkle root는 트랜젝션들의 거래 내용이 변조되었는지를 증명해준다. 데이타 계층 [a7:next node] [d3:next node] LevelDB ethereum 연구회
  • 27. wei: 1 kwei: 1.000 ada: 1.000 femtoether: 1.000 mwei: 1.000.000 babbage: 1.000.000 picoether: 1.000.000 gwei: 1.000.000.000 ( 1e-9 ) shannon: 1.000.000.000 nanoether: 1.000.000.000 nano: 1.000.000.000 szabo: 1.000.000.000.000 microether: 1.000.000.000.000 micro: 1.000.000.000.000 finney: 1.000.000.000.000.000 milliether: 1.000.000.000.000.000 milli: 1.000.000.000.000.000 ether: 1.000.000.000.000.000.000(1e-18) kether: 1.000.000.000.000.000.000.000 grand: 1.000.000.000.000.000.000.000 einstein: 1.000.000.000.000.000.000.000 mether: 1.000.000.000.000.000.000.000.000 gether: 1.000.000.000.000.000.000.000.000.000 tether: 1.000.000.000.000.000.000.000.000.000.000 https://converter.murkin.me/ 암호화폐 - 이더(Ether) • EVM 연산 대가를 지불하는 데 사용. • 변동성이 있기 때문에 트랜잭 션 비용으로 직접 사용하지 않 고 GAS를 통해 사용 27 동의 계층 이더리움에서 사용하는 화폐 단위. ethereum 연구회
  • 28. 운용토큰 : GAS • 최대 트랜잭션 실행 비용 = gasLimit * gasPrice gasLimit : 해당 트렌젝션 수행에 소비되는 총 가스추정치 gasPrice : 1가스당 지불할 가격 28 http://ethgasstation.info/ 동의 계층 가스는 이더리움의 운영토큰으로 트랜잭션의 수행 비용 사용자A 트랜잭션 시작 트랜잭션 완료 사용자B 채굴자 +100 가스 작업수행 작업수행 250 가스 가스 50 사용 가스 50 사용 200 가스 1500 가스 남은 가스 1500시작 가스 ethereum 연구회
  • 29. 블록 생성 – 트랜잭션 전자 서명 처리 과정 A는 트랜잭션 내역과 B의 공개 키를 가져와서 암호해 싱을 한다. 그리고 자신(A)의 개인키를 사용해서 전자 서명(Sign, ECDSA)을 한다. 서명된 트랜잭션을 현재 연결되어 있는 전체 노드에 브 로드캐스팅힘. 마이너는 A의 공개키로 개인키를 해제하여 전자서명 검증 등 트랜잭션의 유효성을 검증하고 이상이 없을시 트랜잭션 풀에 이를 등록함. 이후 마이너는 트랜잭션풀에서 가장 비싼 수행대가의 트랜잭션을 꺼내서 EVM을 생성하여 실행하고 블록 생 성 후 마이닝 작업을 하여 블록체인에 추가함. 사용자A가 사용자B에게 송금시 전자 서명 후 트랜잭션 처리 데이타 계층 마이너(채굴자) 사용자A 사용자B 트랜잭션 B의 공개키 Keccat256 ECDSA A의 개인키 A의 공개키 1 1 2 3 트랜잭션풀 (GlbalSlots 4096) 3 4 4 전자서명 트랜잭션 검증 실행 브로드캐스트2 전자서명 검증 (문법,전자서명,넌스,거래비용) sendTransaction() signTx() ethereum 연구회
  • 30. BlockChain Sync • Full Sync : 비트코인 네트워크에서 각 블록의 모든 정보를 저장하고 처리하는 노드 : 전체 블록체인의 내용을 저장 , 많은 디스크 공간을 필요로 함 : 트랜잭션의 유효성 검증시 제네니스 블록이하 모든 블록과 트랜젝션을 참조 (Confirmation) • Fast Sync : 최근의 상태, 트랜잭션, 리시이트 등을 포함하고 있는 블록헤더만을 동기화함. : 이전 히스터리를 알 수 없기 때문에 항목의 유효성을 검증할 수는 없다. 가령, 어카운트 A가 20 이더 를 갖고 있는 상태를 알 수는 있으나 어떤 거래 과정을 통해 해당 상태가 되었는지는 알 수 없다. • Light Sync : 블록의 블록헤더를 다운로드후 작업 증명 여부를 검증하는 노드 : 전체 블록체인을 저장하지 않고, 블록의 헤더만을 저장 후 증명시 전체 블록과 특정 트랙젝션에 대 해 Merkle root를 통해 유효성 검증함 데이타 계층 ethereum 연구회
  • 32. 동의 수단이 필요한 이유 • 중앙에서 이상유무를 확인해 주는 주체가 없기 때문에 참여자들은 해당 블록이나 트랜잭 션에 문제가 없다는 것을 서로 검토하고 동의를 해야 함. • 네트웍 지연이나 미도달 등의 문제로 인해 중복 송신되거나 때로는 해커에 의해 변조되거 나 잘못된 정보들이 전달될 수 있다. 따라서 전달된 정보가 문제가 없다는 것을 참여자들 이 스스로 검증하고 그 유효성을 판단해야 함. • 이더리움 네트워크에 연결되어 있는 모든 노드들은 블록체인을 로컬에 노드상에 복제 하여 공유하기 때문에 특정 노드가 임의로 블록체인을 조작하지 못하도록 해야 하고 , 블 록과 트랜잭션 등의 유효성 여부를 검증할 수 있는 방법이 필요함. • 블록을 체인에 등록할 때 만약 두 개 이상의 유효한 블록체인이 동시에 존재한다면 이 중 이중 하나를 선택할 수 있는 규칙도 있어야 함. 동의 계층 누구를 믿을 것인가? ethereum 연구회
  • 33. 작업에 의한 증명 방식(PoW) 블록 헤더 N 이전 블록헤더의 해시값 넌스(Nonce) 머클 트리의 루트 블록 헤더 N+1 이전 블록헤더의 해시값 넌스 머클 트리의 루트(3)넌스 (2)머클트리의 루트 (1)이전 블록 헤더의 해시값 암호 해시 암호 해시 트랜잭션1 트랜잭션2 트랜잭션3 머클 트리의 루트 암호 해시 작거나 같으면 해당 넌스값을 블록에 추가하고 네트워크에 전파함. 크면 넌스값을 재조정하여 재계산 타임스탬프 작업증명 동의 계층 암호 해시 블록헤더의 해시값이 난이도 목표에 제시된 값보다 작은 값이 나오게 하는 넌스 값 을 찾는 과정 목표값과 암호해시 값을와 비교 (목표값 = (2^256)/난이도) ethereum 연구회
  • 34. 블록 전파와 충돌 N-1 N N+1 N+1 N+2 X 동의 계층 사용자 마이너 1 마이너 2 마이너 3 마이너 4 마이닝 마이닝 마이닝 마이닝 마이닝 마이닝 마이닝 마이닝 마이닝 마이닝 마이닝 마이닝 트랜잭션1 브로드캐스팅 해쉬 계산 후 마이너1이 가장 먼저 블록생성 트랜잭션 2 브로드캐스팅 해쉬 계산 후 마이너2,3이 동시에 N+1생성하여 분기됨 트랜잭션 3 브로드캐스팅 해쉬 계산 후 마이너4가 발견하여 마이너3의 N+1블록뒤에 추가 같은 시점에 N+1블록이 각기 생성되어 N 블록에 연결됨 난이도가 높고 높이가 높은 쪽이 선택되고 버림받은 N+1노드는 엉클 블록이 됨. ethereum 연구회
  • 35. 이더리움 동의 엔진, 이대시(Ethash) • PoW의 문제점 - 많은 컴퓨팅 자원 및 처리 속도 - 마이닝 파워의 집중화(Centralization) • 이대시 - 수정된 작업증명 (PoW) 방법 , 과거 대거-해시모토 ( Dagger - Hashmoto )라 불림 - 컴퓨터 메모리상의 일정 양의 데이터를 읽은 후 이를 넌스와 함께 해시 계산을 함으로써 메모리 IO 중심의 작업 증명 - 약 12초에 하나의 블록을 생성하는 것이 알고리즘의 궁극적인 목표, 현재 10~15초 마다 생성 - 메모리 계산을 위해 2차원 배열 데이터의 DAG(Directed acyclic graph) 파일이 사용됨 - 각 에포크(Epoch)마다 새로 생성됨( 에포크는 30,000블록/ 100시간을 말함 ) 동의 계층 이대시는 컴퓨터 메모리상의 일정 양의 데이터를 읽은 후 이를 넌스와 함께 해시 계산하는 방식 ethereum 연구회
  • 37. 스마트 컨트랙(Smart Contract) • 1994년 닉 사제보(Nick Szabo), 신뢰할 수 없는 컴퓨터 인터넷 환경에서 고도로 발달 된 계약을 준수하도록 하는 프로토콜로서 최초 만들어 짐. • 스마트 컨트랙의 목적 (1) 기존의 컨트랙 법률보다 우수한 보안성을 제공하는 것. (2) 기존의 컨트랙 보다 저렴한 처리 비용. • 비트코인에는 스크립트(Script) 라고 불리는 단순한 실행 프로그램만 지원하고 채굴자 (Miner)들의 거래 검증 알고리즘으로 사용( output과 input 공개키의 해시 연산 결과를 비교한 후 최종 CHECKSIG를 통해 개인키 검증을 통한 거래 검증 ) • 이더리움에서는 이를 발전시켜 상태 변경과 데이타 저장 등을 통해 상태전이가 가능한 튜링 컴플리트(Turing Complete) 코드로 발전시킴. 실행 계층 특정 계약을 스스로 수립,검증, 이행 하기 위한 컴퓨터 프로토콜 - 위키피디아 https://www.youtube. com/watch?v=vXCOf TteQAo ethereum 연구회
  • 38. 컨트랙 메세지(Message) • (외부 어카운트가 아니라)컨트랙에 의해서만 생성되며 다른 컨트랙에게 전달됨. : EVM의 Call/CallCode/DelegatecallCall/StaticCall opcode 호출시 생성됨. • 메세지는 트랜잭션과 다르게 가상 객체이기 때문에 별도 저장할 필요가 없으며 EVM 실행환 경내에서만 존재 필드 설명 발신자 주소(from) 메시지를 전송한 발신처 수신처 주소(to) 메시지를 수신할 수신처 가스 총량(GasLimit) 트랜잭션 수행에 소비될 총가스량에 대한 추정치 가격 가격(Price) 가스당 트랜잭션을 요청한 사람이 지불할 가격. 이더(amount) 메시지와 함께 전달되는 이더 (wei) 데이터(optional) 데이터 필드 넌스(nonce) 거래가 실행시 수행되도록 허용된 최대트랜젝션수행 횟수 실행 계층 ethereum 연구회
  • 39. 스마트 컨트랙 작동 과정 39 실행 계층 • 컨트랙이 배포가 되면 컨트랙 주소가 생성됨. • 해당 컨트랙 주소에 입력값과 GAS 비용을 지 불하고 트랜잭션을 발생하면 실행됨 개발자 1 2 3 솔리디티로 스마트 컨트랙 코드 작성 solc 컴파일 바이트코드 N+1 N N-1 N-2 ....... 블록체인 배포 이더리움 클라이언트(Geth) 배포 EVM 0xC2Af7e46B2aA24cF9501c4c85251Fa6d9eF246C6 콘솔 브라우져 Web3.js 명령실행 Json- RPC 주소,ABI ethereum 연구회
  • 40. EVM(Ethereum Virtual Machine) 40 실행 계층 스마트 컨트랙의 바이트코드를 을 실행하는 32 바이트 스택 기반의 실행 환경 • 코드 실행은 0부터 시작하는 프로그램 카운터를 증가시키며 반복적으로 연산(loop)을 수행한다. 코드는 종료 조건이 만족했을 때 실행을 멈춘다 : 오류, STOP 명령어,RETURN 명령어,실행 완료 • 연산 수행을 위해서는 세가지 타입의 공간에 접근이 가능해야 함. · 스택 : LIFO(Last-In-First-Out) 컨테이너에 값(Value)를 푸시(push) 하거 나 팝(pop)함. · 메모리 : 무한대로 확장 가능한 바이트 배열 · 저장소 : 키(Key)/값(value) 저장소(ethdb 패키지 -> simpleDB). 계산이 끝나면 리셋되는 스택이나 메모리와는 달리 저장소는 영속적으 로 유지됨 휘발성 비휘발성 ROM RAM 메모리스택 파라 메터 RAM 스토리지 ROM 코드 ethereum 연구회
  • 41. EVM 실행 41 실행 계층 1+2 = 3 데이터 데이터 데이터 데이터 푸시 팝 1 1 2 PUSH1 PUSH1 3 ADD ethereum 연구회
  • 42. EVM 실행 6001600201 => 0x60(push1) 0x01(1) 0x60(push1) 0x02(2) 0x01(add) $ evm --debug --code 6001600201 run 42 실행 계층 1+2 = 3 ethereum 연구회
  • 43. 공통 계층 In computer networking, a wire protocol refers to a way of getting data from point to point: A wire protocol is needed if more than one application has to interoperate. ethereum 연구회
  • 44. 이더리움 P2P 네트워크(DevP2P) 44 공통 계층 • 일반 전송과 어플리케이션간의 통신을 위해 RLPx 라는 암호화된 피어간 네트워크 프로토콜을 사용(분산 해시 테이블인 Kadelima 프로토콜을 기반) • RLPx에는 피어간의 노드를 탐색하기 위한 기능과 타원형 곡선 방정식으로 서명된 UDP 프로토콜과 암호화되고 인증된 TCP 등 이더리움 전반에서 사용되는 P2P 네트 워크 기능이 모두 포함 ethereum 연구회
  • 45. 이더리움 P2P 네트워크 45 공통 계층 • 노드의 주소 , enode enode://2e9ed6a5e6eb264f58b77564a46bdaafb1ff0bbb078e36e22b0f8aaa809a179f0fee79ac8a91 42dff891583fb30ce84a4a638459b927cec60e91103f4a00ef86@10.7.77.5:30303?discport=30301 노드의 ID - ECDSA를 사용하여 프라이빗 키로 서명된 512 비트 공개키, 16진수 값 @ - 구분자 10.7.77.5 - 호스트의 IP주소 (DNS를 사용할 수 없음) 30303 - TCP포트 값 Discport - UDP포트 값 ethereum 연구회
  • 46. • 다른 노드와의 연결 프로세스 ü 미리 하드코딩된 bootstrap node 목록을 참조하여 연결을 시도. ü geth 기동시 노드 지정. $ geth --bootnodes 찾고자 자는 노드의 enode URL ( 여러 개일 경우 , 콤마로 구분함) ü Geth 콘솔상에서 admin.addPeer(..)를 사용하여 연결하고자 하는 노드를 직접 지정하여 연결. >admin.addPeer("enode://2e9ed6a5e6eb264f58b77564a46bdaafb1ff0bbb078e36e22b0f8aaa809a179f0fee79ac8a 9142dff891583fb30ce84a4a638459b927cec60e91103f4a00ef86@10.7.77.5:30303?discport=30301") ü 정적 노드 기능 - geth가 구동할 때 항상 특정 노드와 연결함. geth가 설치되어 있는 디렉토리 하 에 static-nodes.json 파일을 생성. [ "enode://2e9ed6a5e6eb264f58b77564a46bdaafb1ff0bbb078e36e22b0f8aaa809a179f0fee79ac8a 9142dff891583fb30ce84a4a638459b927cec60e91103f4a00ef86@10.7.77.5:30303?discport=30301 ", "enode://공개키@ip주소:포트" ] 이더리움 P2P 네트워크 46 공통 계층 ethereum 연구회
  • 47. • 노드 디스커버 프로토콜 ü 다른 일반 노드는 Node discovery protocol을 사용하여 발견.연결한다. ü UDP 기반의 RPC 프로토콜, 4 가지 패킷 타입 : ping, pong, findnode , neighbors 이더리움 P2P 네트워크 47 공통 계층 패킷 타입 패킷 타입 값 설명 ping 1 노드가 온라인 상태인지를 확인한다. Ping 을 받은 노드는 Pong 패킷을 보내 응 답하고 연결되어 있는 피어 노드 중 첫번째 노드에게 자신의 Ping을 보낸다. pong 2 ping에 대한 응답 패킷 findnode 3 목표 노드의 주변에 위치한 피어 노드들에게 전달된다. 수신자는 해당 목표 노드 주변에 위치한 노드들을 알고 있다면 해당 노드들의 목록을 Neighbors 패킷에 포 함하여 반환한다. neighbours 4 Find Node에 대한 응답 패킷으로 요청된 목표 노드의 인접한 노드들을 포함하여 반환한다. ethereum 연구회
  • 48. 48 이더리움 P2P 네트워크 공통 계층 https://ethernodes.org/ ethereum 연구회
  • 49. 49 • 이더리움은 기본 저장소로 키와 값 저장소로 Go언어로 개발된 LevelDB 라 이브러리를 ethdb 라는 패키지를 통해 사용하고 있다. • 실제 어카운트를 비롯하여 머클트리의 트랜잭션과 리시이트 정보 , 그리고 머클 패트리시아 트리내의 모든 상태 정보가 ethdb를 패키지를 통해 LevelDB에 저장된다 이더리움 스토리지 공통 계층 ethereum 연구회
  • 51. 댑(Dapp, Decentralized app) • 스마트 컨트랙 기반의 웹서비스 51 응용 계층 Dapp 개발자 댑 블록1 블록0 블록2 블록N …….. 트랜젝션과 컨트랙들 스마트 컨트랙 주소 + ABI* + 넌스** *ABI(Application Binary Interface) **넌스: 트랜잭션의 중복호출 방지 사용자 Web3.js json-rpc Dapp 전용 브라우져 (Mist,Crome+metamask,.. ) HTML/CSS/ 자바스크립트 ethereum 연구회
  • 52. Dapp as a web3.0 • Dapp은 정보의 인터넷을 가치의 인터넷으로 진화 과정이다. 52 응용 계층 데이터&컨텐트 기존의 웹 앱(정보의 인터넷) 웹 브라우져 웹 서비스 이더리움 기반 댑(Dapp, 가치의 인터넷) 분산 프로세싱 댑가능 브라우져 댑 Web3 API + (분산파일) (분산메세징) ethereum 연구회
  • 53. Dapp 현황 • 금융 DApps: 자산을 블록체인 위에 올리고 스마트 컨트랙트의 대상으로 사용 : 채권, 주식, 파생상품, 보험, 복권, 도박 등 • 준/비금융 DApps: 토큰, 쿠폰, 네임코인, 투표 등 • 탈중앙화 조직/회사: 회사나 조직을 블록체인 상에 올려서 운영 : 월급지급, 금전거래, 회계장부기록, 지분표시 등 • 탈중앙화 자율조직/회사 (DAO/DAC): 블록체인 상의 알고리즘으로 의사를 결정하여 영업, 회 계, 구매, 판매 및 수익 분배 등을 실현 • Dapps 목록 : https://docs.google.com/spreadsheets/d/1VdRMFENPzjL2V-vZhcc_aa5-ysf243t5vXlxC2b054g/htmlview?pli=1 • State of the Dapps : https://www.stateofthedapps.com/ 응용 계층 ethereum 연구회
  • 54. • 스윔은 블록체인 데이터 뿐만 아니라 댑의 코드와 데이터 , 컨텐트 같은 이더리움의 공 용 데이타를 비중앙화로 저장하고 해당 컨텐트를 전달해 줌 • 기존 토렌토(Torrent)같은 P2P 파일 시스템은 다운로드 시작시 소요 시간이 많이 걸리 고 지속적으로 운영해야 할 인센티브가 없기 때문에 이를 직접 이용할 수 없다. 54 Swarm 응용 계층 인센티브 방식으로 운영되는 P2P파일 시스템이자 컨텐트 전달 채널 • SWAP ( Swarm Accounting Protocol ) 인센티브 시스템 • 컨텐트를 다운로드 받으면 이를 제공한 피어 노드에게 대가를 지불한다. • 인기많은 컨텐트를 제공하면 해당 컨텐트를 이용한 피어들로 부터 대가를 받는다. ethereum 연구회
  • 55. A B Create secret line Symmetric Key(2),Topic(2), pow requirement(2) Public Key Symmetric Key(2),Topic(2),pow requirement(2) (without topic) Message(/w symmetric key1) Message(/w symmetric key2) • 추적불가능한 P2P 메세징 프로토콜 Multi-casting , broadcasting , M-to-M 등 다양한 노드간 메세징 지원 55 Whisper 응용 계층 ethereum 연구회
  • 57. - PoW - 많은 컴퓨팅 자원 및 처리 속도 - 마이닝 파워의 집중화(Centralization) - 블록체인의 데이터 크기 증가 - 네트웍상의 모든 노드들이 데이터를 동기화하는 데 많은 시간과 비용이 듬. - 성능 - 트랜잭션 처리 시간과 용량 ( 현재 20TPS , 페이팔 193 TPS , 비자 1667 TPS, 비트코인 7TPS ) - 블록 생성 합의 시간과 블록내 트랜잭션 처리 시간 단축( 현재 평균 13분 , 가장 낮은 가스) - 스마트 컨트랙과 EVM - 업데이트 지원안 됨 / Too simple & 1024 call stack depth size - 입력 데이터의 신뢰성확보 방안 필요 => 신뢰할만한 Oracle이나 외부 기관이 필요함. - ICO 버블 BlockChain Issues ethereum 연구회
  • 58. - PoS 캐스퍼 - 샤딩 - 라이덴 네트웍크 & 스테이트 채널 - 플라즈마 BlockChain efforts ethereum 연구회
  • 59. Priority matrix for Blockchain 2017 ethereum 연구회
  • 60. Q&A