본문 바로가기
정보공유

세션1. block chain as a platform

by 날고싶은커피향 2018. 11. 29.

block chain as a platform


세션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 연구회
3. 1. 컴퓨팅 플랫폼 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 연구회
13. 데이타 계층 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 연구회
31. 동의 계층 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 연구회
36. 실행 계층 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 연구회
50. 응용 계층 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 연구회
56. 이더리움 미래 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


반응형