세션1. block chain as a platform

60
Blockchain as a next platform 박재현 [email protected] wisefree.tistory.com ethereum 연구회

Upload: jay-jh-park

Post on 22-Jan-2018

3.691 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 세션1. block chain as a platform

Blockchain as a next platform

박재현[email protected]

wisefree.tistory.com

ethereum 연구회

Page 2: 세션1. block chain as a platform

목차

1. 컴퓨팅 플랫폼

2. 이더리움 블록체인 플랫폼

- 작동 과정 이해- Single State Transition Model- 이더리움 참조 모델- 각 계층 이해

3. 해결 과제들과 노력들

ethereum 연구회

Page 3: 세션1. block chain as a platform

1. 컴퓨팅 플랫폼

ethereum 연구회

Page 4: 세션1. block chain as a platform

컴퓨팅 플랫폼

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 연구회

Page 5: 세션1. block chain as a platform

컴퓨팅 플랫폼의 변천 과정

5*Ajax : asynchronous JavaScript and XML

메인 프레임웹 서버/

씬 클라이언트클라우드컴퓨팅

클라이언트/서버컴퓨팅

웹 서버/리치 클라이언트

다운사이징

1990년대 2000년대 2010년대

Web Ajax 가상화 블록체인

블록체인P2P 컴퓨팅

SAP(Single Page App)

ethereum 연구회

Page 6: 세션1. block chain as a platform

• 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 연구회

Page 7: 세션1. block chain as a platform

이더리움 컴퓨팅 플랫폼

이더리움 플랫폼은 컨트랙과 비중앙화앱 (Dapp)을 개발하고 이를 이더리움

네트웍상의 블록체인과 전용 브라우져를 통해 배포하고 활용함.

• P2P 네트웍 노드상의 EVM 운영체제

• 스마크 컨트랙 개발언어와 비중앙화 앱(Dapp, Decentralized Applications)

• 전용 브라우져와 각종 관리 및 유틸리티 서비스

• 블록체인을 통한 데이터와 코드 배포

• 암호화폐와 운영 토큰에 의한 생태계 운영 메카니즘 제공

7ethereum 연구회

Page 8: 세션1. block chain as a platform

2. 이더리움 플랫폼“이더리움은 정확히 프로그래밍 한대로 동작하는

스마트 컨트랙트를 동작시키는 분산된 플랫폼이다.”– https://ethereum.org/

ethereum 연구회

Page 9: 세션1. block chain as a platform

이더리움 작동 과정

(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 연구회

Page 10: 세션1. block chain as a platform

이더리움ICO

(1)프론티어(Frontier)

(2)홈스테드(Homestead)

(3)메트로폴리스

(Metropolis)

(4)세레니티(Serenity)

2016- 3- 142015-7-30

DAO attack2016-7-8

1920000 블록번호2016-7-20 DAO 포크

비잔티움(Byzantium)

10

2014-08-06

컨스탄티노블(Constantinople)

이더리움 로드맵

2017- 104,370,000 블록번호

ethereum 연구회

Page 11: 세션1. block chain as a platform

go-ethereum 핵심 패키지 호출 관계

11

실행계층

ethdb

leveldb

common logevent

eth contracteth

데이타계층

공통계층

crypto

rlp

rpcP2P

node

trie

core

account

동의계층miner

consensus

lightethclient wisper swarm Smartcontract

응용계층 mobile

ethereum 연구회

Page 12: 세션1. block chain as a platform

이더리움 플랫폼 참조 모델

응용계층

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 연구회

Page 13: 세션1. block chain as a platform

데이타 계층

ethereum 연구회

Page 14: 세션1. block chain as a platform

Single State Transition Model APPLY(S) = S’[S:현재 상태] à (APPLY: 상태변이 함수) à (S’: 변이된 상태 또는 실패)

최초상태

상태1

상태2

상태N

.....

상태변이함수

상태변이함수 상태변이

함수

입력 입력 입력출력 출력

.....

트랜잭션 트랜잭션 트랜잭션

제네시스블록

블록1 블록2 블록N

ethereum 연구회

Page 15: 세션1. block chain as a platform

어카운트(Account)데이타 계층

외부 소유어카운트(EOA)

트랜잭션컨트랙

어카운트(CA)

외부 소유어카운트(EOA) 트랜잭션

외부 소유어카운트(EOA)

EOA에 의해서작동이 됨

컨트랙어카운트

메시지

CA에 의해서만작동이 됨

ethereum 연구회

Page 16: 세션1. block chain as a platform

어카운트(Account)

//소스 위치 : package statetype Account struct {Nonce uint64Balance *big.IntRoot common.Hash // merkle root of the storage trieCodeHash []byte}

필드 설명

NONCE 외부 트랙잭션의갯수를 의미하며 0으로 시작, 각 거래가 오직 한번만처리되게 하는 일종의 카운터

BALANCE 어카운트의 이더 잔고(Wei)

Root trie 저장소의 루트

CodeHash 스마트 컨트랙 코드가 저장 공간

데이타 계층

ethereum 연구회

Page 17: 세션1. block chain as a platform

어카운트 주소 생성

• 공개키 = ECDSA (개인키) => 계정 번호 = BASE58Check(SHA3-256(공개키))

임의의32바이트 개인키

ECDSA(secp256k1)

공개키

Keccak-256

최종값

Base58Check 후마지막 20바이트

0x064C998923e7170D698dB010ca9F53479fff6BF6

데이타 계층

ECDSA(Elliptic Curve Digital Signature Algorithm), 타원형곡선 전자서명Keccak-256 != NIST표준(FIPS 202) SHA3Base58Check 인코딩 , 256비트를 사람이 읽을 수 있는 64자리 Hex문자열로 변환

ethereum 연구회

Page 18: 세션1. block chain as a platform

상태(Status)

• 어카운트들이 모인 것을 상태(Status)라고 함.• 어카운트에 접근하여 상태를 변경하려면 stateObject 를 통해 접근한 후 상태를 변경

할 수 있다. 변경된 어카운트는 CommitTrie를 호출하여변경된 Trie를 ethdb 패키지를통해 LevelDB 데이타베이스에 업데이트함.

//소스 위치 : package statetype stateObject struct {address common.Address // 어드레스addrHash common.Hash // 어카운트 주소의 Keccak256Hashdata Account // 이더리움 어카운트db *StateDB // 상태를저장할DBMS에대한 포인터

// Write caches.trie Trie // Trie저장소code Code // 컨트렉의바이트코드

…….}

데이타 계층

ethereum 연구회

Page 19: 세션1. block chain as a platform

트랜잭션(Transaction)다른 어카운트나 컨트랙에 전달할 전자서명된 메시지로서 어카운트의 상태 변화를 이끔.

필드 설명

AccountNonce 외부 트랙잭션의 갯수를 의미하며 0으로 시작한다.

Recipient 거래를 받을 수신처

Amount 발신처가 수신처로 보내는 이더의 양

Payload 옵션으로 임의의 메세지, 함수호출, 계약 생성 코드

GasLimit 거래가 실행시 수행되도록 허용된 최대 트랜젝션 수행 횟수

Price 계산 단계마다 발신처가 지불하는 수수료

type Transaction struct {data txdata// cacheshash atomic.ValueSize atomic.Valuefrom 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 creationAmount *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 연구회

Page 20: 세션1. block chain as a platform

트랜잭션 리시이트(Receipt)

• 트랜잭션의 실행 결과. • 이더리움은 트랜잭션과 관련된 실행 환경과 검색을 위한 인덱싱 등 블록내에 정상 등

록된 모든 트랜젝션들에 대한 정보를 리시이트에 저장

데이타 계층

//소스 위치 : package typestype 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"`ContractAddress common.Address `json:"contractAddress"`GasUsed *big.Int `json:"gasUsed" gencodec:"required"`

}

ethereum 연구회

Page 21: 세션1. block chain as a platform

type Block struct {header *Headeruncles []*Headertransactions Transactionstd *big.Int

}

type Header struct {ParentHash common.HashUncleHash 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 연구회

Page 22: 세션1. block chain as a platform

블록체인

• 블록들이 시간순으로 마치 체인처럼 연결됨

앞에 블록의 내용이 변경되면 뒤에 것도 모두 변경해야 함, 조작이 어려운 불가역 데이터

• 블록체인은 분산된 공유 원장.

모든 사용자가 모든 거래를 기록한 원장을 공유하기 때문에 새로운 블록이 체인에 추가되려면

거래의 타당성을 검증받아야 한다.(부당 거래 방지, 거래의 투명성)

데이타 계층

.....

트랜잭션 트랜잭션 트랜잭션

제네시스블록

블록1 블록2 블록N

ethereum 연구회

Page 23: 세션1. block chain as a platform

데이타 계층

Block N

uncles []*Headertransactions Transactionstd *big.Int // total difficulty }

Header {ParentHash Coinbase UncleHashBloom Difficulty NumberGasLimit GasUsed Time Extra MixDigest Nonce BlockNonceRoot TxHash ReceiptHash }

Block N + 1

uncles []*Headertransactions Transactionstd *big.Int // total difficulty }

Header {ParentHash Coinbase UncleHashBloom Difficulty NumberGasLimit GasUsed Time Extra MixDigest Nonce BlockNonceRoot TxHash ReceiptHash }

리시이트 머클Trie

트랜잭션 머클Trie

머클-패트리시아상태 Trie

KECCAK256 해쉬

리시이트 머클Trie

트랜잭션 머클Trie

머클-패트리시아상태 Trie

블록체인

ethereum 연구회

Page 24: 세션1. block chain as a platform

머클 트리(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

TX2

a3f9

c3f9

해시

해시

a3f9 c3f9해시

c8f8

코어

이더리움

ethereum 연구회

Page 25: 세션1. block chain as a platform

머클 패트리시아트리(Trie)데이타 계층

머클 트리의 한계

- 상태 정보는 [키와 값]의 Map 구조

키 : 어카운트 주소

값 : 이더 잔액 , 넌스, 컨트랙일 경우 컨트랙 소스 , 스토리지 등

- 상태정보는 가변적이라 변경이 생길때 마다 전체 머클트리를 재계산해야 함.

개선 포인트

- 트리의 깊이를 한정지음 => 깊이가 무한대로 내려가 성능 저하가 되는 것을 방지

- 머클 루트를 값에 한정되도록 함 => 상태정보가 변경되더라도 머클루트는 변경이 안됨

- 노드에 값까지의 경로를 명시할 수 있는 페트리시아 트리를 도입

ethereum 연구회

Page 26: 세션1. block chain as a platform

머클 패트리시아트리(Trie)블록헤더의 Merkle root는 트랜젝션들의 거래 내용이 변조되었는지를 증명해준다.

데이타 계층

[a7:next node]

[d3:next node]

LevelDB

ethereum 연구회

Page 27: 세션1. block chain as a platform

wei: 1kwei: 1.000ada: 1.000femtoether: 1.000mwei: 1.000.000babbage: 1.000.000picoether: 1.000.000gwei: 1.000.000.000 ( 1e-9 )shannon: 1.000.000.000nanoether: 1.000.000.000nano: 1.000.000.000szabo: 1.000.000.000.000microether: 1.000.000.000.000micro: 1.000.000.000.000finney: 1.000.000.000.000.000milliether: 1.000.000.000.000.000milli: 1.000.000.000.000.000ether: 1.000.000.000.000.000.000(1e-18)kether: 1.000.000.000.000.000.000.000grand: 1.000.000.000.000.000.000.000einstein: 1.000.000.000.000.000.000.000mether: 1.000.000.000.000.000.000.000.000gether: 1.000.000.000.000.000.000.000.000.000tether: 1.000.000.000.000.000.000.000.000.000.000

https://converter.murkin.me/

암호화폐 - 이더(Ether)

• EVM 연산 대가를 지불하는 데사용.

• 변동성이 있기 때문에 트랜잭션 비용으로 직접 사용하지 않고 GAS를 통해 사용

27

동의 계층

이더리움에서 사용하는 화폐 단위.

ethereum 연구회

Page 28: 세션1. block chain as a platform

운용토큰 : GAS

• 최대 트랜잭션 실행 비용 = gasLimit * gasPricegasLimit : 해당 트렌젝션 수행에 소비되는 총 가스추정치gasPrice : 1가스당 지불할 가격

28

http://ethgasstation.info/

동의 계층

가스는 이더리움의 운영토큰으로 트랜잭션의 수행 비용

사용자A

트랜잭션시작

트랜잭션완료

사용자B

채굴자+100 가스

작업수행 작업수행

250 가스

가스 50사용

가스 50사용

200 가스 1500 가스

남은 가스 1500시작 가스

ethereum 연구회

Page 29: 세션1. block chain as a platform

블록 생성 – 트랜잭션 전자 서명 처리 과정

A는 트랜잭션 내역과 B의 공개 키를 가져와서 암호해

싱을 한다. 그리고 자신(A)의 개인키를 사용해서 전자

서명(Sign, ECDSA)을 한다.

서명된 트랜잭션을 현재 연결되어 있는 전체 노드에 브

로드캐스팅힘.

마이너는 A의 공개키로 개인키를 해제하여 전자서명

검증 등 트랜잭션의 유효성을 검증하고 이상이 없을시

트랜잭션 풀에 이를 등록함.

이후 마이너는 트랜잭션풀에서 가장 비싼 수행대가의

트랜잭션을 꺼내서 EVM을 생성하여 실행하고 블록 생

성 후 마이닝 작업을 하여 블록체인에 추가함.

사용자A가 사용자B에게 송금시 전자 서명 후 트랜잭션 처리

데이타 계층

마이너(채굴자)

사용자A 사용자B

트랜잭션

B의 공개키

Keccat256

ECDSA

A의 개인키

A의 공개키

1

1

2

3

트랜잭션풀

(GlbalSlots 4096)

3

44

전자서명

트랜잭션 검증

실행

브로드캐스트2

전자서명 검증

(문법,전자서명,넌스,거래비용)

sendTransaction()

signTx()

ethereum 연구회

Page 30: 세션1. block chain as a platform

BlockChain Sync

• Full Sync : 비트코인 네트워크에서 각 블록의 모든 정보를 저장하고 처리하는 노드

: 전체 블록체인의 내용을 저장 , 많은 디스크 공간을 필요로 함

: 트랜잭션의 유효성 검증시 제네니스 블록이하 모든 블록과 트랜젝션을 참조 (Confirmation)

• Fast Sync : 최근의 상태, 트랜잭션, 리시이트 등을 포함하고 있는 블록헤더만을 동기화함.

: 이전 히스터리를 알 수 없기 때문에 항목의 유효성을 검증할 수는 없다. 가령, 어카운트 A가 20 이더

를 갖고 있는 상태를 알 수는 있으나 어떤 거래 과정을 통해 해당 상태가 되었는지는 알 수 없다.

• Light Sync : 블록의 블록헤더를 다운로드후 작업 증명 여부를 검증하는 노드

: 전체 블록체인을 저장하지 않고, 블록의 헤더만을 저장 후 증명시 전체 블록과 특정 트랙젝션에 대

해 Merkle root를 통해 유효성 검증함

데이타 계층

ethereum 연구회

Page 31: 세션1. block chain as a platform

동의 계층

ethereum 연구회

Page 32: 세션1. block chain as a platform

동의 수단이 필요한 이유

• 중앙에서 이상유무를 확인해 주는 주체가 없기 때문에 참여자들은 해당 블록이나 트랜잭션에 문제가 없다는 것을 서로 검토하고 동의를 해야 함.

• 네트웍 지연이나 미도달 등의 문제로 인해 중복 송신되거나 때로는 해커에 의해 변조되거나 잘못된 정보들이 전달될 수 있다. 따라서 전달된 정보가 문제가 없다는 것을 참여자들이 스스로 검증하고 그 유효성을 판단해야 함.

• 이더리움 네트워크에 연결되어 있는 모든 노드들은 블록체인을 로컬에 노드상에 복제하여 공유하기 때문에 특정 노드가 임의로 블록체인을 조작하지 못하도록 해야 하고 , 블록과 트랜잭션 등의 유효성 여부를 검증할 수 있는 방법이 필요함.

• 블록을 체인에 등록할 때 만약 두 개 이상의 유효한 블록체인이 동시에 존재한다면 이 중이중 하나를 선택할 수 있는 규칙도 있어야 함.

동의 계층

누구를 믿을 것인가?

ethereum 연구회

Page 33: 세션1. block chain as a platform

작업에의한 증명 방식(PoW)

블록 헤더 N

이전 블록헤더의해시값

넌스(Nonce)

머클 트리의 루트

블록 헤더 N+1

이전 블록헤더의

해시값

넌스

머클 트리의 루트(3)넌스

(2)머클트리의

루트

(1)이전 블록헤더의 해시값

암호해시

암호해시

트랜잭션1

트랜잭션2

트랜잭션3

머클 트리의 루트

암호해시 작거나 같으면

해당 넌스값을블록에 추가하고네트워크에

전파함.

크면넌스값을

재조정하여재계산

타임스탬프

작업증명

동의 계층

암호해시

블록헤더의 해시값이 난이도 목표에 제시된 값보다 작은 값이 나오게 하는 넌스 값 을 찾는 과정

목표값과 암호해시

값을와 비교

(목표값 = (2^256)/난이도)

ethereum 연구회

Page 34: 세션1. block chain as a platform

블록 전파와충돌

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 연구회

Page 35: 세션1. block chain as a platform

이더리움 동의 엔진, 이대시(Ethash)

• PoW의 문제점

- 많은 컴퓨팅 자원 및 처리 속도

- 마이닝 파워의 집중화(Centralization)

• 이대시

- 수정된 작업증명 (PoW) 방법 , 과거 대거-해시모토 ( Dagger - Hashmoto )라 불림

- 컴퓨터 메모리상의 일정 양의 데이터를 읽은 후 이를 넌스와 함께 해시 계산을 함으로써 메모리

IO 중심의 작업 증명

- 약 12초에 하나의 블록을 생성하는 것이 알고리즘의 궁극적인 목표, 현재 10~15초 마다 생성

- 메모리 계산을 위해 2차원 배열 데이터의 DAG(Directed acyclic graph) 파일이 사용됨

- 각 에포크(Epoch)마다 새로 생성됨( 에포크는 30,000블록/ 100시간을 말함 )

동의 계층

이대시는 컴퓨터 메모리상의 일정 양의 데이터를 읽은 후 이를 넌스와 함께 해시 계산하는 방식

ethereum 연구회

Page 36: 세션1. block chain as a platform

실행 계층

ethereum 연구회

Page 37: 세션1. block chain as a platform

스마트 컨트랙(Smart Contract)

• 1994년 닉 사제보(Nick Szabo), 신뢰할 수 없는 컴퓨터 인터넷 환경에서 고도로 발달

된 계약을 준수하도록 하는 프로토콜로서 최초 만들어 짐.

• 스마트 컨트랙의 목적(1) 기존의 컨트랙 법률보다 우수한 보안성을 제공하는 것.(2) 기존의 컨트랙 보다 저렴한 처리 비용.

• 비트코인에는 스크립트(Script) 라고 불리는 단순한 실행 프로그램만 지원하고 채굴자

(Miner)들의 거래 검증 알고리즘으로 사용( output과 input 공개키의 해시 연산 결과를

비교한 후 최종 CHECKSIG를 통해 개인키 검증을 통한 거래 검증 )

• 이더리움에서는 이를 발전시켜 상태 변경과 데이타 저장 등을 통해 상태전이가 가능한

튜링 컴플리트(Turing Complete) 코드로 발전시킴.

실행 계층

특정 계약을 스스로 수립,검증, 이행 하기 위한 컴퓨터 프로토콜 - 위키피디아

https://www.youtube.com/watch?v=vXCOfTteQAo

ethereum 연구회

Page 38: 세션1. block chain as a platform

컨트랙 메세지(Message)

• (외부 어카운트가 아니라)컨트랙에 의해서만 생성되며 다른 컨트랙에게 전달됨.

: EVM의 Call/CallCode/DelegatecallCall/StaticCall opcode 호출시 생성됨.

• 메세지는 트랜잭션과 다르게 가상 객체이기 때문에 별도 저장할 필요가 없으며 EVM 실행환

경내에서만 존재

필드 설명

발신자 주소(from) 메시지를 전송한 발신처

수신처주소(to) 메시지를 수신할수신처

가스총량(GasLimit) 트랜잭션 수행에소비될총가스량에대한 추정치

가격가격(Price) 가스당 트랜잭션을요청한 사람이 지불할 가격.

이더(amount) 메시지와함께전달되는 이더 (wei)

데이터(optional) 데이터필드

넌스(nonce) 거래가 실행시 수행되도록허용된최대트랜젝션수행횟수

실행 계층

ethereum 연구회

Page 39: 세션1. block chain as a platform

스마트 컨트랙 작동 과정

39

실행 계층

• 컨트랙이 배포가되면 컨트랙 주소가 생성됨.

• 해당 컨트랙 주소에입력값과 GAS 비용을 지

불하고 트랜잭션을발생하면 실행됨

개발자

1

2

3

솔리디티로스마트 컨트랙코드 작성

solc 컴파일

바이트코드

N+1

N

N-1

N-2

.......

블록체인

배포이더리움 클라이언트(Geth)

배포

EVM

0xC2Af7e46B2aA24cF9501c4c85251Fa6d9eF246C6

콘솔

브라우져Web3.js

명령실행

Json-RPC

주소,ABI

ethereum 연구회

Page 40: 세션1. block chain as a platform

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 연구회

Page 41: 세션1. block chain as a platform

EVM 실행

41

실행 계층

1+2 = 3

데이터

데이터

데이터 데이터

푸시 팝

1 1

2

PUSH1 PUSH1

3

ADD

ethereum 연구회

Page 42: 세션1. block chain as a platform

EVM 실행

6001600201 => 0x60(push1) 0x01(1) 0x60(push1) 0x02(2) 0x01(add)$ evm --debug --code 6001600201 run

42

실행 계층

1+2 = 3

ethereum 연구회

Page 43: 세션1. block chain as a platform

공통 계층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 연구회

Page 44: 세션1. block chain as a platform

이더리움 P2P 네트워크(DevP2P)

44

공통 계층

• 일반 전송과 어플리케이션간의 통신을 위해 RLPx 라는 암호화된 피어간 네트워크프로토콜을 사용(분산 해시 테이블인 Kadelima 프로토콜을 기반)

• RLPx에는 피어간의 노드를 탐색하기 위한 기능과 타원형 곡선 방정식으로 서명된UDP 프로토콜과 암호화되고 인증된 TCP 등 이더리움 전반에서 사용되는 P2P 네트워크 기능이 모두 포함

ethereum 연구회

Page 45: 세션1. block chain as a platform

이더리움 P2P 네트워크

45

공통 계층

• 노드의 주소 , enode

enode://2e9ed6a5e6eb264f58b77564a46bdaafb1ff0bbb078e36e22b0f8aaa809a179f0fee79ac8a9142dff891583fb30ce84a4a638459b927cec60e91103f4a00ef86@10.7.77.5:30303?discport=30301

노드의 ID - ECDSA를 사용하여 프라이빗 키로 서명된 512 비트 공개키, 16진수 값@ - 구분자10.7.77.5 - 호스트의 IP주소 (DNS를 사용할 수 없음)30303 - TCP포트 값Discport - UDP포트 값

ethereum 연구회

Page 46: 세션1. block chain as a platform

• 다른 노드와의 연결 프로세스

ü 미리 하드코딩된 bootstrap node 목록을참조하여 연결을 시도.

ü geth 기동시 노드 지정.

$ geth --bootnodes 찾고자 자는 노드의 enode URL ( 여러 개일 경우 , 콤마로 구분함)

ü Geth 콘솔상에서 admin.addPeer(..)를 사용하여연결하고자 하는 노드를 직접 지정하여 연결.

>admin.addPeer("enode://2e9ed6a5e6eb264f58b77564a46bdaafb1ff0bbb078e36e22b0f8aaa809a179f0fee79ac8a

[email protected]:30303?discport=30301")

ü 정적 노드 기능 - geth가 구동할 때 항상 특정 노드와 연결함. geth가설치되어 있는 디렉토리 하에 static-nodes.json파일을 생성.

[ "enode://2e9ed6a5e6eb264f58b77564a46bdaafb1ff0bbb078e36e22b0f8aaa809a179f0fee79ac8a9142dff891583fb30ce84a4a638459b927cec60e91103f4a00ef86@10.7.77.5:30303?discport=30301", "enode://공개키@ip주소:포트" ]

이더리움 P2P 네트워크

46

공통 계층

ethereum 연구회

Page 47: 세션1. block chain as a platform

• 노드 디스커버 프로토콜

ü 다른 일반 노드는 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 연구회

Page 48: 세션1. block chain as a platform

48

이더리움 P2P 네트워크공통 계층

https://ethernodes.org/

ethereum 연구회

Page 49: 세션1. block chain as a platform

49

• 이더리움은 기본 저장소로 키와 값 저장소로 Go언어로 개발된 LevelDB 라이브러리를 ethdb 라는 패키지를 통해 사용하고 있다.

• 실제 어카운트를 비롯하여 머클트리의 트랜잭션과 리시이트 정보 , 그리고머클 패트리시아 트리내의 모든 상태 정보가 ethdb를 패키지를 통해LevelDB에 저장된다

이더리움 스토리지공통 계층

ethereum 연구회

Page 50: 세션1. block chain as a platform

응용 계층

ethereum 연구회

Page 51: 세션1. block chain as a platform

댑(Dapp, Decentralized app) • 스마트 컨트랙 기반의 웹서비스

51

응용 계층

Dapp개발자

블록1

블록0

블록2

블록N

……..

트랜젝션과컨트랙들

스마트 컨트랙 주소+ ABI* + 넌스**

*ABI(Application Binary Interface)**넌스: 트랜잭션의중복호출 방지

사용자

Web3.jsjson-rpc

Dapp 전용 브라우져(Mist,Crome+metamask,.. )

HTML/CSS/자바스크립트

ethereum 연구회

Page 52: 세션1. block chain as a platform

Dapp as a web3.0• Dapp은 정보의 인터넷을 가치의 인터넷으로 진화 과정이다.

52

응용 계층

데이터&컨텐트

기존의 웹 앱(정보의 인터넷)

웹 브라우져

웹 서비스

이더리움 기반 댑(Dapp, 가치의 인터넷)

분산프로세싱

댑가능 브라우져

Web3 API

+(분산파일)

(분산메세징)

ethereum 연구회

Page 53: 세션1. block chain as a platform

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 연구회

Page 54: 세션1. block chain as a platform

• 스윔은 블록체인 데이터 뿐만 아니라 댑의 코드와 데이터 , 컨텐트 같은 이더리움의 공용 데이타를 비중앙화로 저장하고 해당 컨텐트를 전달해 줌

• 기존 토렌토(Torrent)같은 P2P 파일 시스템은 다운로드 시작시 소요 시간이 많이 걸리고 지속적으로 운영해야 할 인센티브가 없기 때문에 이를 직접 이용할 수 없다.

54

Swarm응용 계층

인센티브 방식으로 운영되는 P2P파일 시스템이자 컨텐트 전달 채널

• SWAP ( Swarm Accounting Protocol ) 인센티브 시스템

• 컨텐트를 다운로드 받으면 이를 제공한 피어 노드에게 대가를 지불한다.

• 인기많은 컨텐트를 제공하면 해당 컨텐트를 이용한 피어들로 부터 대가를 받는다.

ethereum 연구회

Page 55: 세션1. block chain as a platform

A B

Create secret lineSymmetric 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 연구회

Page 56: 세션1. block chain as a platform

이더리움 미래

ethereum 연구회

Page 57: 세션1. block chain as a platform

- PoW

- 많은 컴퓨팅 자원 및 처리 속도

- 마이닝 파워의 집중화(Centralization)

- 블록체인의 데이터 크기 증가

- 네트웍상의 모든 노드들이 데이터를 동기화하는 데 많은 시간과 비용이 듬.

- 성능

- 트랜잭션 처리 시간과 용량 ( 현재 20TPS , 페이팔 193 TPS , 비자 1667 TPS, 비트코인 7TPS )

- 블록 생성 합의 시간과 블록내 트랜잭션 처리 시간 단축( 현재 평균 13분 , 가장 낮은 가스)

- 스마트 컨트랙과 EVM

- 업데이트 지원안 됨 / Too simple & 1024 call stack depth size

- 입력 데이터의 신뢰성확보 방안 필요 => 신뢰할만한 Oracle이나 외부 기관이 필요함.

- ICO 버블

BlockChain Issues

ethereum 연구회

Page 58: 세션1. block chain as a platform

- PoS 캐스퍼

- 샤딩

- 라이덴 네트웍크 & 스테이트 채널

- 플라즈마

BlockChain efforts

ethereum 연구회

Page 59: 세션1. block chain as a platform

Priority matrix for Blockchain 2017

ethereum 연구회

Page 60: 세션1. block chain as a platform

Q&A