비트코인 : 개인간전자화폐시스템 사토시나카모토 초록. 순개인과개인간의전자화폐는한집단에서다른곳으로금융기관을거치지않고직접온라인지불을가능하게할것이다. 디지털서명기술이일부해결해주지만, 믿을수있는제 3자가이중지불을방지해

Similar documents
2. 거래우리는전자화폐를디지털서명의연속으로정의한다. 각암호키소유자들은그전까지의거래내역에다음소유자의공개키를덧붙인뒤에자신의비밀키로암호화하는디지털서명을하고넘긴다. 돈을받는사람은서명소유자들의체인과, 서명들을검증할수있다. 문제의과정은돈을받는사람은소유자들중한명이이중지불을하지않았는

POPKET CHAIN Best of breed security! Rest Assured That Your Cryptocurrency Are Securely Stored In The World s Most Trusted Cryptocurrency Wallet We Pr

User interface design

C# Programming Guide - Types

adfasdfasfdasfasfadf

참고 : 더블링크드리스트 노드는데이터와포인터를가지고포인터가다음노드의데이터부분을참조하면서 연결되는자료구조이며, 데이터검색시포인터로연결된노드를검색하여값을찾음 < 더블링크드리스트연결구조 > 구분인덱스 ( 데이터베이스 ) 더블링크드리스트 장점 단점 < 인덱스및더블링크드리스트방

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

말은 많은 Blockchain 2

LTC 라이트코인명세서

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap06-2pointer.ppt

chap 5: Trees

Windows 8에서 BioStar 1 설치하기


Chapter ...

JVM 메모리구조

IP 심화 라우팅프로토콜적용시 라우팅테이블에서 이니셜이있는네트워크를설정하는것 : onnected 직접연결된네트워크를의미한다. 그러므로라우팅은 나는이런네트워크와연결되어있다. 를직접연결된라우터들에게알려주는것 1>en 1#conf t 1(config)#router rip 1

PowerPoint 프레젠테이션

기를감내할수밖에없다는것이현실이다. 이러한비용과의불확실성은실제사람들에의해물리적화폐가사용될때는회피될수있는사항이나, 디지털통신상에서가 일어날때는, 믿을수있는기관이개입되지않는한해결할방법이없다. 신뢰보다는암호학적인증명에기반을둔전자지불시스템이필요하다. 이시스템은의사가있는두당사가가

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

년 2 월 1 1일에 모 스 크 바 에 서 서명된 북 태 평양 소하 성어족자 원보존협약 (이하 협약 이라 한다) 제8조 1항에는 북태평양소하성어류위원회 (이하 위원회 라 한다)를 설립한다고 규정되어 있다. 제8조 16항에는 위원회가 을 채택해야 한다고 규정

chap 5: Trees

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

<3235B0AD20BCF6BFADC0C720B1D8C7D120C2FC20B0C5C1FE20322E687770>

Microsoft Word - src.doc

공정한합의알고리즘 : deb 합의알고리즘 (A fair consensus algorithm : deb consensus algorithm) 목차 1. 개요 2. 합의알고리즘의공정성 3. deb 합의알고리즘 4. 공정한노드의역할및신뢰성검증 5. 성능 6. deb 합의알고


슬라이드 1

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

JAVA PROGRAMMING 실습 08.다형성

OCW_C언어 기초

금오공대 컴퓨터공학전공 강의자료

Chapter 4. LISTS

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

기본소득문답2

Microsoft PowerPoint - 26.pptx

ISP and CodeVisionAVR C Compiler.hwp

View Licenses and Services (customer)

03_queue

Infinity(∞) Strategy

Microsoft PowerPoint - chap06-1Array.ppt

2. 전송 본연구에서전자적코인 (electronic coin) 은디지털서명의체인으로정의된다. 각소유자는앞선전송 (transaction) 및다음소유자의공개키 (public key) 에대한해시에전자서명을추가하고이를코인말단에첨부하여전송한다. 코인을받는측에서는소유권이전을확인하

= " (2014), `` ,'' .." " (2011), `` ,'' (.)"

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

Microsoft PowerPoint - Java7.pptx

Microsoft Word - 08_01_블록체인.docx

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

USC HIPAA AUTHORIZATION FOR

설계란 무엇인가?

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

<B3EDB4DC28B1E8BCAEC7F6292E687770>

게시판 스팸 실시간 차단 시스템

untitled

슬라이드 1

Chap 6: Graphs

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

2. 거래 우리는디지털서명의사슬로써전자적화폐 (electronic coin) 을정의했다. 각소유자는화폐를송금할때먼젓번거래내역및다음소유자공개키의해시값에전자적으로서명을하고이정보를이화폐의끝에첨가한다. 수금자 (payee) 는소유권 (ownership) 의사슬을검증하기위해해당

Visual Basic 반복문

목 차 역사 o 상태변환시스템으로서의 비트코인 o 채굴 o 머클트리 o 블록체인 사용한 다른 사용사례

Microsoft PowerPoint - CSharp-10-예외처리

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

System Recovery 사용자 매뉴얼

슬라이드 1

Chap 6: Graphs

완벽한개념정립 _ 행렬의참, 거짓 수학전문가 NAMU 선생 1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에

PowerPoint Template

Frama-C/JESSIS 사용법 소개

gnu-lee-oop-kor-lec06-3-chap7

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다

C++ Programming

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

슬라이드 1

본 강의에 들어가기 전

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - ch10_회복과 병행 제어.pptx

Microsoft Word - PLC제어응용-2차시.doc

왜 2.0 인가? 비트코인이 아직 발전의 초기단계라면 왜 벌써 이를 뛰어넘는 2.0 플랫폼이 필요한 것일까? 우선 비트코인 기술자체가 완성된 것이 아니고 지속적인 개선과 발전이 필요. 하지만 비트코인은 이미 50억달러가 넘는 경제적 이해관계가 걸려 있는 네트웤. 1차적

제 3강 역함수의 미분과 로피탈의 정리

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

Yggdrash White Paper Kr_ver 0.18

<B3EDB9AEC0DBBCBAB9FD2E687770>

로거 자료실

윈도우즈프로그래밍(1)

<4D F736F F D204B42C1F6BDC4BAF1C5B8B9CE5F FBAF1C6AEC4DAC0CEC0C720C0CCC7D8BFCD20C0FCB8C12E646F63>

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-5 [호환 모드]

Chapter 4. LISTS

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Transcription:

비트클라우드백서

비트코인 : 개인간전자화폐시스템 사토시나카모토 satoshin@gmx.com www.bitcoin.org 초록. 순개인과개인간의전자화폐는한집단에서다른곳으로금융기관을거치지않고직접온라인지불을가능하게할것이다. 디지털서명기술이일부해결해주지만, 믿을수있는제 3자가이중지불을방지해야한다면그주요한장점은사라지게된다. 우리는이논문에서 P2P 네트워크를이용한이중지불문제의해결방법을제안하고자한다. 계속진행되고있는암호화기반작업증명과정의연쇄상에서네트워크시간및거래를암호화하여기록을생성하게되면작업증명과정을되풀이하지않는한바꿀수없게된다. 가장긴체인은각사건순서를입증해주기도하며, 가장많은컴퓨팅파워가입증했다는뜻이기도하다. 노드들에의해제어되는컴퓨터전력의과반수가협력하여네트워크를공격하지않는한, 그들은가장긴체인을생성하며네트워크공격자를능가하게될것이다. 이러한네트워크는최소한의구조를필요로한다. 각노드들은자발적으로그네트워크를떠나거나다시합류할수있고, 어떤일이벌어졌는지에대한입증으로가장긴작업증명체인을받아들이는노드들의메시지가최대한공유된다. 1. 서론인터넷에서의상거래는거의금융기관을제 3자신용기관으로하는전자지불방식에전적으로의존하게되었다. 대부분의거래에시스템은충분히작동하고있지만, 여전히신용기반모델이라는내재적인약점을갖고있다. 완전히취소가능한거래는사실상불가능한데, 금융기관은거래상의분쟁을중재해야하는일을피할수없기때문이다. 이러한중재비용은결국거래수수료를올려, 실질적인최소거래금액을제한하여소액거래의가능성을막는데다가, 회수가불가능한서비스에까지번복불가능한지불을하게만들어더많은비용을발생시킨다. 즉, 지불번복을위해더많은신용을요구하게된다. 상업자들은불필요한더많은정보를요구하여고객을귀찮게만들고경계하게된다. 일정한비율로가짜지불이되는것은불가피한현실이다. 이러한비용과지불의불확실성은사람이직접물리적으로화폐를지불하여피할수있으나, 신용기관없이통신상으로지불하는방법은존재하지않는다. 이러한문제는바로신용보다는암호화기술에기반한전자지불시스템을이용하여자발적인두거래자가제 3자인신용기관없이도직접적인거래를가능하게만든다. 전산적으로번복이불가능한송금은판매자를가짜지불로부터보호할수있으며, 구매자는일반에스크로방식을통해보호받을수있다. 이논문에서우리는거래들의시간순서를전산적으로입증하게만들도록하는 P2P 분산네트워크기반타임스탬프서버를이용하여이중지불문제를방지하는해법을제안하고자한다. 이시스템은악의적으로협력하는노드그룹보다정직한노드들이더많은컴퓨팅파워를총체적으로제어하는한안전하다. 1

2. 거래우리는전자화폐를디지털서명의연속으로정의한다. 각암호키소유자들은그전까지의거래내역에다음소유자의공개키를덧붙인뒤에자신의비밀키로암호화하는디지털서명을하고넘긴다. 돈을받는사람은서명소유자들의체인과, 서명들을검증할수있다. 문제의과정은돈을받는사람은소유자들중한명이이중지불을하지않았는지검증할수가없는상황에서발생한다. 공통적인해법은각거래가이중지불이되었는지신용해주는중앙기관을도입하는것이다. 각거래후에, 그화폐는다시새로운화폐로찍어내기위해중앙기관으로회수되어야하고, 이중지불이아니란걸믿을수있도록중앙기관에서만직접화폐를발행하여쓰도록한다. 이러한방법의문제는화폐시스템전체가바로은행같은중앙기관에모든거래내역이거쳐가도록하는방법에의존하게된다는것이다. 결국돈을받는사람이이전소유자가그전에도어떤거래에도서명을하지않았는지를확인할방법이필요하다. 그러려면가장먼저일어난거래내역을찾기만해도그이후에이중지불을시도했는지확인할필요가없게된다. 거래내역이하나라도비어있는지확인하는유일한방법은모든거래내역을살펴보는것이다. 바로찍어낸화폐를기반으로한모델에서는모든거래를확인하고어느것이먼저이뤄졌는지를결정하면된다. 신용기관을통하지않고도이런방법을가능하게하기위해서는, 모든거래가공개적으로알려져야하고 [1], 참여자들이시간순서에따라단일거래내역으로수용하는시스템이필요하다. 돈을받는사람은매거래시마다, 과반수이상의노드들이최초의거래라고인정해주는시간증명이필요하게된다. 3. 타임스탬프서버우리가제안하는해결방법은타임스탬프서버에서시작된다. 타임스탬프서버는시간내역이기록된항목들의블록해시를취합하고, 신문이나유즈넷포스트처럼그해시를널리발행하는역할을한다 [2~5]. 이러한타임스탬프내역은해시에포함될수있도록그시간에데이터가명백히존재했다는것을입증한다. 각타임스탬프내역은이전타임스탬프로부터받은해시내역을포함시킴으로써보강하는체인을형성한다. 2

4. 작업증명 P2P를기반으로하는분산네트워크타임스탬프서버를구현하기위해서는신문이나유즈넷포스트대신 Adam Back s Hashcash[6] 와비슷한작업증명시스템을이용할필요가있다. 작업증명에는 SHA- 256과같은알고리즘으로다수의 0비트들로시작되는암호화해시값을찾는과정이포함된다. 평균적으로이러한작업에드는시간은연속되는 0비트의요구개수에따라지수적으로증가하며, 암호화해시를한번수행하는것으로확인할수있다. 타임스탬프네트워크에서는작업증명의방법으로블록해시결과가 0비트들을갖도록하는해시값을찾을때까지블록에임시값 (nonce) 을증가시켜가는과정을구현한다. CPU가노력한결과가한번작업증명조건에도달하게되면, 그블록은다시과정을번복하지않는한고정된다. 그다음블록들이체인을형성함으로써, 하나의블록을변경하기위해서는그블록을포함한다음모든블록들에대해작업증명과정을다시수행해야하게된다. 작업증명은또한다수결에의한의사결정과정에서대표자를결정하는문제를해결한다. 다수가한 IP주소당한번의투표를할수있는시스템기반으로결정된다면, IP주소를많이확보하는방법으로누구나시스템을뒤엎어버릴수있다. 그러나작업증명은본질적으로한개의 CPU당한번의투표를하는구조이다. 다수의결정은가장긴체인을나타내며, 이는가장많은작업증명에노력이투입된것이된다. 컴퓨팅파워의과반수가정직한노드들에의해제어되고있다면, 정직한체인이가장빠르게늘어나, 경쟁체인을압도하게될것이다. ( 역자주 : 실제로는 Emin Gün Sirer, Ittay Eyal에의해전체컴퓨팅파워의과반수인 50% 이상이아니라 25% 이상만점유해도된다고밝혀졌는데, 현재전체순위 1~2위의마이닝풀집단은 25% 이상에달하고있습니다.) 과거의블록을수정하기위해서는공격자는수정할블록과그이후에이어진모든블록에대해작업증명과정을번복한다음에이어서다른정직한노드들이이루고있는체인보다더빠른속도로따라잡아추월해야한다. 느린공격자의추격가능성은블록들이이어서추가될수록지수적으로감소하는것에대해뒤에서언급하기로한다. 시간이흐름에따라하드웨어속도증가와노드들의참여도증가율을보상하기위해서, 작업증명의난이도는시간당평균블록생성수를기준으로하는이동평균을타깃으로결정한다. 블록이너무빠르게생성되면난이도는급증한다. 5. 네트워크 네트워크의동작은다음과같은과정으로이루어진다 : 1) 새로운거래내역이모든노드에알려진다. 2) 각노드들은새로운거래내역을블록에취합한다. 3) 각노드들은그블록에대한작업증명을찾는과정을수행한다. 4) 어떤노드가작업증명을성공적으로수행했을때, 모든노드에게그블록을전송한다. 5) 노드들은그블록이모든거래가이전에쓰이지않고유효한경우에만승인한다. 6) 노드들은자신이승인한블록의해시를이전해시로사용하여다음블록을생성하는과정을통해그블록이승인되었다는의사를나타낸다. 노드들은항상가장긴체인을옳은것으로간주하며그체인이계속확장하도록작업을수행한다. 3

만약두개의노드가서로다른버전의다음블록을동시에알리게될경우, 어떤노드들은둘중하나를먼저전달받게된다. 이러한경우각노드들은자신이먼저받은블록에대해작업을수행하지만, 체인의다른갈래도더길어질경우에대비하여저장해둔다. 체인의어느한쪽갈래가더길게생성되는작업증명이알려지면체인갈래의길이는더이상대등하지않게되고, 각노드들은체인이더긴갈래로작업을전환한다. 새로운거래내역알림이꼭모든노드에까지전달될필요는없으며, 많은노드에전달될수록더빨리블록에포함될것이다. 블록알림은또한누락되는경우에도취약하지않다. 만약한노드가블록을받지못했을경우, 다음블록을받고하나가빠졌음을알아차려다시요청해받을것이다. 6. 보상블록의첫번째거래내역은약속에의해최초블록생성자에게새로운돈을소유할수있게해주는특별한거래가된다. 이렇게하면돈을발행하는중앙기관없이도네트워크를구성하는모든노드들에게보상을지급하고, 유통될돈을처음에배분하는방법이된다. 지속적인일정량의새돈을추가하는건금을유통할수있게광부들이자원을쏟는것과유사하다. 이경우에는컴퓨팅자원과전력이소비된다. 보상에는또한거래수수료가될수도있다. 거래내역에서출력되는돈이입력되는돈보다적다면, 그차액은수수료처럼작용하여그거래내역을포함하는블록생성의보상가치로추가된다. 정해진총량의돈이유통된다음부터는, 보상은거래수수료만으로이뤄지며인플레이션으로부터완전히자유롭게된다. 이러한보상시스템은각노드들의정직하게참여를유지할수있도록한다. 욕심을낸공격자가다른정직한전체노드들보다더많은컴퓨팅파워를만들어낼수있다면, 그는아마도다른사람들로부터지불을철회하여돈을사취하거나새로운돈을생성하려해야할것이다. 하지만그런식으로다른사람들이엮이지않고시스템을약화시켜자신의부를축적하는이기적인방법보다는약속대로정직하게시스템에참여하는것이더이득이라는걸알게될것이다. 7. 저장공간재확보최근거래내역에있던돈이충분히많은블록에의해묻히게되면, 지나간거래내역은저장공간확보를위해버려져도된다. 블록해시를다시헤집지않고도이를수월하게하기위해서는, 거래내역은머클트리 (Merkle Tree) 구조로해시가되며 [7][2][5], 머클트리구조의루트부분만블록해시에포함되어야한다. 오래된블록은트리구조에서가지를쳐냄으로써더작아지게되며, 하위해시는저장할필요가없게된다. 4

거래내역이없는블록헤더는약 80바이트정도이다. 매 10분마다블록이생성된다고가정할경우, 80바이트 * 6 * 24 * 365 = 4.2MB가매년소요된다. 2008년기준으로시중에판매되고있는, 2GB 메모리가장착된컴퓨터시스템과, 매년 1.2GB가증가할거라예측한무어의법칙에의하면, 블록헤더가메모리를점유하고있어야하더라도문제가되지않는다. ( 역자주 : 무어의법칙은본문과달리 18개월에두배가된다는예측이다. 즉, 매년약 1.59배로증가 ) 8. 지불입증간소화굳이전체네트워크노드를쓰지않더라고, 돈이지불된사실을입증하는것이가능하다. 사용자는가장긴작업증명체인의블록헤더의사본만갖고있으면, 자신이가장긴체인이라확인할때까지네트워크노드들에게요청하고, 그거래내역이기록된블록에연결된머클트리가지만받아오면된다. 그는스스로거래내역을확인할수는없고, 체인에연결되어네트워크노드가그것을승인했는지, 이후에도계속블록이추가로확증되어승인된지로알수있다. 이렇게정직한노드들에의해네트워크가제어되는한거래인증은신뢰할수있지만, 공격자에의해네트워크가압도당하면취약하다. 네트워크노드들은스스로거래내역을입증할수있지만, 단순히공격자에의해과점된네트워크로거래를조작하고유지함으로써무력화될수있다. 이러한방법을보호하는전략으로는사용자의소프트웨어에서블록전체를다운로드받고모순임이확증된유효하지않은블록을발견했을때네트워크노드들이경고알림을받는것이다. 잦은지불을받는사업자의경우에는아마도자체노드에서독립된보안체계와빠른인증방법을더원할것이다. 9. 금액의결합과분할돈을개별로관리하는것도가능하겠지만, 거래에서작은개별단위까지굳이나누어다루는것은거추장스럽다. 금액을나누고합칠수있도록거래내역은복수의입력과출력으로이뤄진다. 대개는큰금액의단일입력이거나, 소액모금을위한여러입력이거나, 한출력은지불다른출력은거스름돈같은두개의출력방법이될것이다. 5

이를팬아웃이라하며, 거래가여러거래들에기반하고각거래들이다수에의존하는경우더라도여 기서는문제가되지않는다. 거래기록의완전히독립된사본을추출할필요가없다. 10. 개인정보보호기존의은행모델은당사자들과제 3자신용기관에정보접근권한을제한하여개인정보보호가어느정도가능하도록했다. 모든거래를공개적으로알려야하는중요성은이러한것을불가능하게하지만, 공개키를익명으로소유하도록함으로써정보의흐름을차단하고개인정보가유지될수있다. 외부에서는누가다른누군가에게얼마를보냈단사실을볼수는있으나, 그거래당사자들의신분으로연결되지않으면알수가없다. 이는증시에서공개되는, 시간과거래목록만확인가능한거래체결정보공개수준과비슷하다. 추가적인안전장치의일환으로, 매번거래마다새로운공개키-비밀키쌍을사용하여공통의소유자에게연결되도록하면된다. 여러개의입력을갖는거래의경우에는여전히연결고리를남기는것이불가피하게도, 그입력들이동일소유자라는사실을공개된다. 소유자의암호키가공개되면그러한연관성이다른거래내역에서도동일인에의한것이라는게알려지게된다. 11. 계산공격자가다른체인의갈래를빠르게생성하려고시도하여정직한노드들의체인을앞질러가장긴체인을생성할시나리오를간주해보자. 이것이성공한다하더라도, 그렇게가짜금액을만들거나공격자소유였던적이없는돈을사취하더라도, 임의의시스템변화상태로는남겨두지않는다. 노드들은유효하지않은거래를지불로승인하지않을것이며, 정직한노드들은그러한거래내역을포함하는블록을절대받아들이지않을것이다. 공격자는오직최근에지불한돈을도로되찾기위해그의거래내역하나만바꾸려고시도할수있다. 정직한노드들의체인과공격자의체인간의경쟁은이항랜덤워크 (Binomial Random Walk) 로특정지을수있다. 정직한체인이하나의블록을성공적으로생성하는사건이일어나면 +1, 실패하여공격자의체인이블록을하나생성하는사건이일어나면 -1이라한다. 공격자가갖고있지도않은금액으로성공할확률은도박사의파산문제 (Gambler s Ruin problem) 와비슷하다. 무제한의신용을가진도박사가적자상태로시작하여거의무제한의게임을시도하여손익분기점에도달한다가정하자. 그가손익분기점에도달할확률, 즉공격자가정직한체인을따라잡을수있는가능성은다음과같이계산할수있다 [8]: p = 정직한노드가다음블록을찾을확률 q = 공격자의노드가다음블록을찾을확률 qz = z 개의다음블록들을빨리찾을확률 6

p > q 라는가정이주어진다면, 공격자가블록증가를따라잡을수있는확률은블록수에지수적으로감소하게된다. 공격자가먼저달려들어운이좋게성공하지못한다면, 가능성은뒤로갈수록점점희박해진다. 이번에는새로운거래에서돈을받는사람입장에서송금자가거래를바꾸지못할거라는것이충분히확증하려면얼마나기다려야하는지생각해보기로한다. 송금자가받는사람이일시적으로돈을받았다믿게만들고일정시간뒤에다시돈을자기자신에게되돌리게시도하려는공격자라가정하자. 받는사람은그러한일이벌어지면경고알림을받을것이고, 공격자는그게늦기를바랄것이다. 받는사람은새로운암호키쌍을생성하여송금자에게서명하기직전에공개키를넘긴다. 이러한방법은공격자가미리충분한시간전에가짜블록체인생성을준비해두어가짜거래를성립시키는것을방지한다. 송금이이뤄질때, 정직하지않은송금자는은밀히그의다른거래내역을포함하는체인을동시에생성을시작한다. 돈을받는사람은거래가블록에포함되고추가로 z개의추가블록들이연결될때까지기다린다. 그는공격자가얼마나많은작업을진척시켰는지정확히모르지만, 정직한블록들이매평균시간간격마다생성될것이고, 공격자의잠재적진행률은포아송분포의기대값인다음과같을것이다. 공격자가그순간에도여전히따라잡을수있는확률을계산하기위해, 포아송분포를공격자가그 시점에블록체인생성을따라잡을매진행률에각각곱하도록한다. 분포의무한급수를더하지않기위해식을정리하면 이를 C 언어코드로구현하면 #include <math.h> double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; } 7

결과를돌려보면 z 값에따라지수적으로확률이감소함을알수있다. q=0.1 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 p=0.0000006 P 가 0.1% 보다작을경우를풀면 P < 0.001 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340 12. 결론지금까지신용에기반하지않은전자거래시스템을제안하였다. 디지털서명으로이뤄진일반적인화폐구조에서출발했다. 소유권을강력히제어하는방법을제공하지만이중지불을방지할방법이없이는완벽하지가않다. 이러한문제를해결하기위해, 과반수의컴퓨팅파워를정직한노드들이제어한다면계산상으로공격자가빠르게조작할수없이공개적으로거래를기록할수있도록작업증명을수행하는 P2P 네트워크를제안하였다. 네트워크는구조적이지않은단순함에서믿을수있다. 노드들은조직화할필요도없이협력하도록되어있다. 특정위치에메시지가전달되지않더라도최선을기반으로전달되기만하면되기때문에, 정체를확인할필요도없다. 노드들은자발적으로네트워크를떠났다가합류할수있으며, 작업증명체인을그동안에벌어졌던사실에대한증명으로받아들이기만하면된다. 컴퓨팅파워를통해의사결정을하고, 유효한블록에대해서만작업을수행함으로써유효하지않은블록들은거부하게됨으로써거래승인을표시하게된다. 이러한합의메커니즘을위해어떤규칙이나보상이성립될수있다. 8

참고문헌 [1] W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998. [2] H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999. [3] S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. [4] D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. [5] S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997. [6] A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002. [7] R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. [8] W. Feller, "An introduction to probability theory and its applications," 1957. 원문 Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System, http://bitcoin.org/bitcoin.pdf, 2009 번역 - 츄이스 9

차세대스마트컨트랙트와탈중앙화된어플리케이션플랫폼 (A Next-Generation Smart Contract and Decentralized Application Platform) Written by Vitalik Buterin Translated and edited by EthereumKorea 사토시나카모토에의해 2009 년개발된비트코인은종종화폐와통화분야에서매우근본적인혁신으로묘사되어왔는데, 이것은비트코인이어떤담보나내재적인가치를가지지않으며, 중앙화된발행기관이나통제기관도없는디지털자산의첫번째사례였기때문이다. 하지만비트코인실험의더욱중요한측면은비트코인을떠받치고있는분산합의수단으로서의블록체인기술이며, 이에대한관심이급격하게늘어나고있다. 블록체인기술을이용한대안적어플리케이션들에는다음과같은것들이자주거론되고있다. 사용자정의화폐와금융상품을블록체인위에표현하는컬러드코인 ("colored coins"), 물리적대상의소유권을표현하는스마트자산 ("smart property"), 도메인이름과같은비동질적자산을기록하는네임코인 ("Namecoin"), 임의적인계약규칙을구현한코드에의해다지털자산을관리하는좀더복잡한형태의스마트컨트랙트 ("smart contracts"), 더나아가블록체인을기반으로한탈중앙화된자율조직 ("decentralized autonomous organizations", DAOs) 등이다. 이더리움이제공하려는것은완벽한튜링완전 (turing-complete) 프로그래밍언어가심어진블록체인이다. 이프로그래밍언어는, 코딩된규칙에따라 ' 어떤상태 ' 를다르게변환시키는기능 (arbitrary state transition functions) 이포함된 " 계약 (contracts)" 을유저들이작성할수있게함으로써앞서설명한시스템들을구현가능하게할뿐만아니라우리가아직상상하지못한다른많은어플리케이션들도매우쉽게만들수있도록도와줄것이다. 1

목 차 역사 o 상태변환시스템으로서의비트코인 ------------------------ 4 o 채굴 ------------------------ 5 o 머클트리 ------------------------ 7 o 블록체인사용한다른사용사례 ------------------------ 8 o 스크립팅 ------------------------ 9 이더리움 o 이더리움어카운트 ------------------------ 11 o 메시지와트랜잭션 ------------------------ 11 o 이더리움상태변환함수 ------------------------ 13 o 코드실행 ------------------------ 14 o 블록체인과채굴 ------------------------ 15 어플리케이션들 o 토큰시스템 ------------------------ 16 o 금융파생상품 ------------------------ 17 o 신원조회와평판시스템 ------------------------ 18 o 탈중앙화된파일저장공간 ------------------------ 18 o 탈중앙화된자율조직 ------------------------ 19 o 추가적인어플리케이션들 ------------------------ 20 기타이슈들 o 수정된 GHOST 도입 ------------------------ 22 o 수수료 ------------------------ 23 o 연산과튜링완전성 ------------------------ 24 o 통화와발행 ------------------------ 26 o 채굴중앙집중화 ------------------------ 28 o 확장성 ------------------------ 29 결론 ------------------------ 30 참고문헌과추가자료 2

비트코인과기존개념들에대한소개 (Introduction to Bitcoin and Existing Concepts) 역사 (History) 분산화된디지털통화의개념은, 재산등록같은대안어플리케이션과마찬가지로지난수십년간우리주변에있었다. 1980~90 년대의익명 e-cash 프로토콜은주로 Chaumian blinding 으로알려진 로우레벨 Low-level cryptographic 암호알고리즘 (cryptographic primitive) 에기반하였고개인정보를강력하게보호하는화폐를 algorithms frequently used 제공하였으나중앙집권적인중개인에의존했기때문에별다른주목을받지못했다. 1998 년 to build computer security Wei Dai 의 [b-money](http://www.weidai.com/bmoney.txt) 는분산합의와계산퍼즐을 systems 풀게하는방식을통해서화폐를발행하게하는아이디어를최초로제안하였지만분산합의를실제로어떻게구현할지에대한자세한방법은제시하지못했다. 2005 년에 Hall Finney 는 " 재사용가능한작업증명 ([reusable proofs of work](http://www.finney.org/~hal/rpow/))" 개념을소개하였다. 이시스템은 b-money 의아이디어에 Adam Back 의 계산난이도해시캐시퍼즐 (computationally difficult Hashcash puzzles) 을조합한것이었다. 그러나외부의신뢰를필요로하는컴퓨팅 (trusted computing) 을그기반에둠으로써, 이상을구현하는데에는또다시실패했다. 2009 년 ' 사토시나카모토 ' 에의해처음실제적으로구현된탈중앙화된화폐는공개키암호방식을통한소유권관리를위해사용되던기존의알고리즘을 작업증명 (proof of work) 이라고알려진합의알고리즘과결합함으로써가능하게되었다. 작업증명이기반이되는작동방식은매우혁신적인것이었는데, 이것은두가지의문제들을동시에해결하기때문이다. 첫째, 이것은간단하면서도상당히효과적인합의알고리즘을제공해주었다. 즉, 네트워크상에있는모든 ' 노드 (node)' 들이비트코인의장부상태 (state of the Bitcoin ledger) 에일어난표준노드 (Node)- 노드들은블업데이트의집합 (a set of canonical updates) 에공동으로동의할수있도록해주었다는록체인네트워크상에연결것이다. 둘째, 누구나합의프로세스에참여할수있도록허용해줌으로써합의결정권에대한되어있는개개의주체들이정치적문제를해결할수있을뿐만아니라동시에시빌공격 (sybil attacks) 도방어해줄수며, 만일당신이블록체인있는메커니즘을제공했다. 이것은합의프로세스에대한참여의조건으로 특정한리스트에네트워크에참여하게되면등록된주체이어야만한다 라는어떤형식적장벽대신에, 경제적장벽 - 각노드의결정권의하나의노드가된다. 크기를그노드의계산능력에직접적으로비례시키는방식으로대체하는것이었다. 이후로, 지분증명 (proof of stake) 이라는새로운방식의합의알고리즘이등장했는데, 이는각노드가가진계산능력이아니라화폐의보유량에따라각노드의결정권정도를계산해야한다는것이다. 이두방식의상대적인장점들에대한논의는이백서에서는다루지않겠지만, 두방법모두암호화화폐의기반으로서사용될수있다는점은지적해두고자한다. 3

역사 상태변환시스템으로서의비트코인 (Bitcoin As A State Transition System) 기술적인관점에서보았을때, 비트코인과같은암호화화폐의장부는하나의상태변환시스템 (state transition system) 으로생각해볼수있다. 이시스템은, 현재모든비트코인의소유권현황으로이루어진하나의 상태 (state) 와이현재상태와트랜잭션을받아서그결과로써새로운상태를출력해주는 상태변환함수 (state transition function) 로구성되어있다. 표준은행시스템에비유하자면상태는모든계좌잔고표 (balance sheet) 이고트랜잭션은 A 에서 B 로 $X 를송금하라는요청이며, 상태변환함수에의해 A 의계좌에서는 $X 가감소하고 B 의계좌에서는 $X 가증가한다. 만약처음에 A 의계좌에있는금액이 $X 이하인경우에는상태변환함수가에러를리턴한다. 이러한상태변환를비트코인장부에서는다음과같이정의할수있다. APPLY(S,TX) -> S' or ERROR 은행시스템예시에서는다음과같다. APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 } APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR 비트코인에서 " 상태 (state)" 는생성되었지만아직사용되지않은모든코인들의집합 ( 기술적표현으로는 소비되지않은트랜잭션출력, UTXO(Unspent Transaction Outputs)) 이다. 각 UTXO 들에는각자의코인금액이표시되어있고이 UTXO 의소유자 (20byte 의주소로정의되는암호화된공개키 (public key)) 정보가들어있다. 트랜잭션은하나이상의입력 (inputs) 및출력을포함한다. 각입력에는보내는쪽지갑주소에서선택된기존 UTXO 에대한참조정보와, 해당지갑주소에대응되는개인키 (private key) 가생성한암호화된서명을담고있다. 그리고각출력들은상태에추가될새로운 UTXO 정보를가지고있다. 상태변환함수 `APPLY(S,TX) -> S'` 는다음과같이정의할수있다. 1. TX 의각입력에대해 : * 만약참조된 UTXO 가 `S`에없다면, 에러를리턴. * 만약서명이 UTXO 의소유자와매치되지않으면, 에러를리턴. 2. 만약입력에사용된 UTXO 들금액의합이출력 UTXO 들금액의합보다작으면, 에러를리턴. 3. 입력에사용된 UTXO 가삭제되고출력 UTXO 가추가된 `S`를리턴. 4

여기서 1 번의첫번째과정은존재하지않는코인이트랜잭션에사용되는것을막기위한것이고 1 번의두번째과정은다른사람의코인이트랜잭션에사용되는것을막기위한것이다. 위절차를실제비트코인지불과정에적용하면다음과같다. Alice 가 Bob 에게 11.7 BTC 를보내고싶다고가정하자. 먼저 Alice 지갑주소로부터표시된금액의합이적어도 11.7 BTC 이상인 UTXO 의집합을찾는다. 실제대부분의경우에는 11.7 BTC 를정확히바로선택할수없다. Alice 의지갑주소에서각각 6, 4, 2 BTC 가표시된 3 개의 UTXO 를참조할수있다고하자. 이 3 개의 UTXO 가트랜잭션의 input 이되고 2 개의 output 이생성된다. Output 중하나는 11.7 BTC 가표시된새로운 UTXO 이며소유자는 Bob 의지갑주소가된다. 그리고다른하나는 12(6+4+2) - 11.7 = 0.3 BTC 의 " 잔돈 (change)" 이표시된새로운 UTXO 이며소유자는 Alice 자신의지갑주소가된다. 채굴 (Mining) 만일우리가위에서기술한내용을신뢰를기반으로하는중앙집권화된서비스방식으로구현하자면매우간단한일이될텐데, 왜냐하면중앙서버하드드라이브에상태변화의과정을저장만하면되기때문이다. 그러나비트코인에서는, 탈중앙화된통화시스템을구축하고자하는것이며, 이를위해서는모든사람이수긍할수있는트랜잭션순서합의시스템을상태변화시스템과결합해야만한다. 비트코인의분산합의과정은네트워크에 " 블록 (blocks)" 이라불리는트랜잭션패키지를계속적으로생성하고자시도하는노드들을필요로한다. 이네트워크는약 10 분마다하나의블록을생성하도록계획되어있고각블록은타임스탬프, 논스 (nonce), 이전블록에대한참조 ( 이전블록의해시 ), 그리고이전블록이후에발생한모든트랜잭션의목록을포함한다. 이과정을통해서지속적으로성장하는블록체인이생성되게되는데, 비트코인장부의최신상태 (state) 를나타내기위해지속적인업데이트가이루어진다. 이체계에서하나의블록이유효한지아닌지를확인하기위한알고리즘은다음과같다. 1. 이블록에의해참조되는이전블록이존재하는지, 유효한지확인한다. 2. 타임스탬프값이이전블록의타임스탬프값보다크면서 2 시간이내인지확인한다. 3. 작업증명 (proof of work) 이유효한지확인한다. 4. `S[0]`를이전블록의마지막상태 (state) 가되도록설정한다. 5. `TX`를 `n`개의트랜잭션을가지는, 블록의트랜잭션목록으로가정한다. 폐구간 `0...n-1`의모든 i 에대해, `S[i+1] = APPLY(S[i], TX[i])`집합중어느하나라도에러를리턴하면거짓 (false) 을리턴하며종료한다. 6. 참 (true) 을리턴하고, `S[n]`를이블록의마지막상태로등록한다. 5

기본적으로블록의각트랜잭션은유효한상태변환을일으켜야한다. 여기서상태가블록내에어떠한방법으로로기록되지않았다는점에주목해보자. 상태는유효성을검증하는노드가매번계산해서기억해야할완전히추상적것 (abstraction) 인데, 이것은원시상태 (genesis state) 부터해당블록까지의모든트랜잭션을순차적으로적용함으로써계산될수있다. 채굴자가블록에포함시키는트랜잭션의순서에주목해보자. 만약어떤블록에 A 와 B 라는두트랜잭션이있고 B 가 A 의출력 UTXO 를소비한다고하자. 이때 A 가 B 이전의트랜잭션인경우그블록은유효하지만, 그렇지않을경우유효하지않다. 블록유효성검증알고리즘에서특징적인부분은 " 작업증명 (proof of work)" 의조건즉, 256 비트의숫자로표현되는각블록의이중-SHA256 해시값이동적으로조정되는목표값 ( 이더리움영문백서를작성하는시점에서대략 2 192) 보다반드시작아야된다는조건이다. 작업증명의목적은블록생성을계산적으로어렵게만들어서 sybil 공격자들이마음대로전체블록체인을조작하는것을방지하는것이다. SHA256 은전혀예측불가능한유사난수함수 (pseudorandom function) 로설계되었기때문에유효블록을생성하기위한유일한방법은블록헤더의논스 (nonce) 값을계속해서증가시키면서, 생성되는새로운해시값이위의조건을만족하는지확인하는과정을반복하는것뿐이다. 현재목표값인 2 192 하에서하나의유효블록을발견하기위해서평균적으로 2 64 번의시도를해야만한다. 일반적으로이목표값은매 2016 개의블록마다네트워크에의해재조정되어서네트워크의현재노드들이평균적으로 10 분마다새로운블록을생성할수있도록한다. 이러한연산작업에대한보상으로현시점의각블록의채굴자들은 25 BTC 를획득할자격을가진다. 그리고출력금액보다입력금액이큰트랜잭션이있다면그차액을 " 트랜잭션수수료 (transaction fee)" 로얻는다. 이것이 BTC 가발행되는유일한방법이며, 원시상태 (genesis state) 에는아무런코인이포함되지않았다. 채굴목적을더잘이해하기위해서, 악의적인공격자가있을때어떤일이발생하는지알아보자. 비트코인기저를 이루는암호기법은안전한것으로알려져있다. 그러므로공격자는비트코인시스템에서암호기법에의해직접 보호되지않는부분인 트랜잭션순서 를공격목표로잡을것이다. 공격자의전략은매우단순하다. 1. 어떤상품 ( 가급적이면바로전달되는디지털상품 ) 을구매하기위해판매자에게 100 BTC 를지불한다. 2. 상품이전송되기를기다린다. 3. 판매자에게지불한것과같은 100 BTC 를공격자자신에게보내는트랜잭션을생성한다.( 이중지불시도 ) 4. 비트코인네트워크가, 공격자자신에게보내는트랜잭션이판매자에게지불하는트랜잭션보다먼저수행된것으로인식하도록한다. 1 번과정이발생하고몇분후에몇몇채굴자가그트랜잭션을블록에포함할것이다. 이블록번호를 270000 이라하자. 대략 1 시간후에는이블록다음의체인에 5 개의블록들이추가될것이다. 이 5 개의블록들은위 1 번트랜잭션을간접적으로가리킴으로써 " 컨펌 (confirming)" 한다. 이시점에서판매자는지불이완료된것으로판단하고상품을전송할것이다. 디지털상품으로가정했으므로전송은바로끝난다. 이제공격자는판매자에게보낸것과동일한 100 BTC 를공격자자신에게보내는다른트랜잭션을생성한다. 만약공격자가그냥단순하게트랜잭션을시도한다면, 채굴자들이 `APPLY(S,TX)`를실행하고이 `TX`는상태에더이상존재하지않는 UTXO 를소비하려한다는것을알아차리므로이트랜잭션은진행되지않는다. 그러므로대신에, 같은부모블록 269999 을가리키지만판매자에게보낸것을대체하는새로운트랜잭션이포함된다른버전의블록 270000 을채굴함으로서블록체인 " 분기점 (fork)" 을생성한다. 이블록정보는원래것과다르므로작업증명 (proof of work) 이다시수행되어야한다. 그리고공격자의새버전블록 270000 은기존 270000 과다른해시를가지므로원래블록 270001 부터 270005 는 6

공격자의블록을가리키지않는다. 그러므로원래체인과공격자의새로운체인은완전히분리된다. 이러한분기점에서비트코인네트워크의규칙은가장긴블록체인을참으로인식하는것이다. 공격자가자신의체인에서혼자작업을하는동안정당한채굴자들은원래의 270005 체인에서작업할것이기때문에공격자자신의체인을가장길게만들기위해서는네트워크의다른노드들의계산능력조합보다더큰계산능력을가져야한다.( 이를 51% attack 이라한다.) 머클트리 (Merkle Trees) 왼쪽 : Merkle tree( 머클트리 ) 의몇몇노드만보아도곁가지 (branch) 의유효성을입증하기에충분하다. 오른쪽 : Merkle tree 의어떤부분을바꾸려는시도는결국상위해시값어딘가에불일치를만든다. 비트코인의중요한확장기능은블록이여러계층구조 (multi-layer data structure) 에저장된다는것이다. 어떤블록의 " 해시 (hash)" 란사실블록헤더의해시만을의미한다. 이블록헤더에는타임스탬프, 논스 (nonce), 이전블록해시, 그리고블록에포함된모든트랜잭션정보에의해생성되는 Merkle tree 의루트해시가들어있는 200 바이트정도의데이터이다. 머클트리 (Merkle tree) 는이진트리 (binary tree) 의일종으로서트리의최하위에위치하고기저데이터가들어있는수많은잎노드, 자기자신바로하위에있는두자식노드의해시로구성된중간노드, 자기자신바로하위에있는두자식중간노드의해시로구성된트리의 " 최상위 (top)" 에있는하나의루트노드의집합이다. 머클트리 (Merkle tree) 의목적은어떤블록의데이터가분리돼서전달될수있도록하는것이다. 만약에비트코인의어떤노드가한소스로부터블록헤더만을다운로드받고, 이블록헤더와관계된트랜잭션정보는다른소스로부터다운받아도이데이터들이여전히정확하다는것이보장된다. 이것이가능한이유는머클트리 (Merkle tree) 에서하위노드들의해시값이상위노드에영향을주기때문에어떤악의적인유저가머클트리최하위에있는트랜잭션정보를가짜로바꿔치기하면상위부모들의해시값들이변해서결국트리의루트값이바뀌므로, 결과적으로이블록의해시가달라지기때문이다. 이렇게되면이블록은완전히다른블록으로인식되게되며, 이것은유효하지않은작업증명을가지고있게될것이확실시된다. 머클트리프로토콜은비트코인네트워크를장기간지속가능하게만드는기초가된다. 비트코인네트워크에서각 블록의모든정보를저장하고처리하는 " 완전노드 (full node)" 는 2014 년 4 월기준으로거의 15 GB 의디스크공간을 7

필요로하며매달 1 GB 넘게증가하고있다. 현재데스크탑컴퓨터정도에서는수용할수있지만스마트폰에서는불가능하다. 그리고나중에는소수의사업체들이나풀노드를유지할수있을것이다. 반면 " 단순화된지불확인 (simplified payment verification, SPV)" 으로알려진프로토콜은 " 가벼운노드 (light node)" 라고불리는또다른형태의노드를가능하게해준다. 가벼운노드는블록헤더를다운로드하고그블록헤더에서작업증명을검증한다. 그리고관련트랜잭션들에대한 " 곁가지들 (branches)" 만을다운로드한다. 이렇게전체블록체인의매우작은비율만을다운로드함에도불구하고강한안전성을보장하면서도, 임의의트랜잭션의상태및잔고상태를알아낼수있게한다. 블록체인기술을이용한다른응용사례 (Alternative Blockchain Applications) 블록체인의근본아이디어를확장해다른개념으로응용하려는아이디어역시오랜역사를가지고있다. 2005 년 Nick Szabo ) 는 " 소유주권한을통한재산권보장 " 이라는글을발표했다. 그는정주 (homesteading), 불법점유, 지공주의 (Georgism) 등의개념을포함한정교한틀을설계해누가어떤땅을가지고있느냐라는등기문제를블록체인기반시스템으로처리할수있음을보였다. 그는이것이 " 데이터베이스복제기술의새로운발전 " 덕분에가능해졌다고말했다. 하지만, 불행히도그당시에는쓸만한효과적인파일복제시스템이없었다. 그래서 Nick Szabo 의프로토콜은실현되지못했다. 하지만 2009 년이후, 비트코인분권합의시스템이발전하면서, 수많은대안응용사례가빠르게부각되기시작했다. * 네임코인 - 2010 년에만들어진네임코인은 ' 탈중앙화된명칭등록데이터베이스 ' 라고부르는것이가장좋을것이다. 토르, 비트코인, 비트메시지와같은탈중앙화된자율조직프로토콜을이용할때, 사용자는타인과서로교류하기위해각자의계정을구분해내야한다. 하지만현존하는가능한구별방법은 1LW79wp5ZBqaHW1jL5TCiBCrhQYtHagUWy 와같은식의의사난수해쉬를이용하는방식이었다. 이상적으로는, 사용자가 "george" 같은일상적인이름을계정이름으로갖는것이좋을것이다. 하지만이때문제는어떤사용자가 "george" 라는이름을계정을만들수있다면, 다른누구도똑같이 "george" 라는계정을등록해흉내낼수있다는점이다. 유일한해답은선출원주의로, 먼저등록한사람이성공하고두번째등록한사람은실패하도록하는것이다. 이는이미비트코인합의규약에완벽히적용된문제이기도하다. 네임코인은이런아이디어를응용한가장오래되고가장성공적인명칭등록시스템이다. * 컬러드코인- 컬러드코인의목적은누구나비트코인블록체인위에서자신만의고유한디지털화폐를발행할수있는프로토콜역할을하는것이다. 또는 ( 그디지털화폐의발행량이한단위밖에없는단순한경우로볼수있는 ) 자기자신만의디지털토큰을발행하는프로토콜역할을하는것이다. 컬러드코인프로토콜에서, 사용자는특정비트코인 UTXO 에공개적으로색깔을부여함으로써새화폐를 " 발행 " 할수있다. 다른 UTXO 의색깔은이미소비된 ( 혼합색깔입력의경우에는몇몇특별한규칙이적용된다 ) 것으로간주하는거래의입력과같은색깔이되도록재귀적으로정의한다. 이프로토콜은블록체인을처음부터끝까지역추적해그들이받은 UTXO 의색깔을정함으로써, 사용자가특정색깔을가진 UTXO 만지갑에간직하고그코인을보통비트코인처럼여기저기보낼수있게한다. * 메타코인- 메타코인이품고있는아이디어는, 비트코인거래를메타코인거래저장에이용하되, 상태이동함수 APPLY' 를다르게가짐으로써, 비트코인시스템위에서운영되는프로토콜을갖는것이다. 메타코인프로토콜만으로는비트코인블록체인속에무효메타코인거래가나타나는현상을예방수없기때문에, 규칙이하나더해진다. 즉만약 APPLY'(S, TX) 가에러를리턴하면, 프로토콜은 APPLY'(S,TX)=S 로정해진다. 비트코인스스로는내부실행이불가능한, 잠재적으로더발전된성질을가진무작위암호화폐프로토콜을만드는쉬운메커니즘이라고 8

할수있다. 반면이프로토콜의개발비용은적은데왜냐하면채굴과네트워킹의복잡성문제가이미비트코인 프로토콜에의해처리되고있기때문이다. 일반적으로합의프로토콜을건설하는데두가지접근방법이있다. 하나는독립적인네트워크를세우는것이고다른하나는비트코인시스템과연동되는프로토콜을세우는것이다. 전자의접근방법은, 네임코인같은응용사례에서는상당히성공적이었지만, 실제실행하는데어려움이있다 ; 각개별실행주체가모든필요한상태변환과네트워킹코드를건설하고점검해야할뿐만아니라독립적인블록체인을구동시켜야한다. 나아가, 분권합의기술에관한어플리케이션의집합이멱함수분포를따를것으로예상된다. 즉, 대다수어플리케이션은자기자신의블록체인을보장하기에는너무작을것이다. 그리고또거대한클래스의분권화된어플리케이션, 즉서로교류를하기위한분권화된자율기구 (DAO) 가생겨날것이라고예상한다. 후자의접근방법, 즉, 비트코인에기반한접근방법은비트코인의단순지불검증 (SPV) 특징을물려받지못한다는단점이있다. 단순지불검증은비트코인에서는작동한다. 왜냐하면비트코인은블록체인깊이 (depth) 를검증대리수단으로이용할수있기때문이다. 한거래의근원을찾아충분히뒤로돌아가보면, 그상태의정합성을증명하는부분이있었다고말해도무방하다. 반면, 블록체인에기반한메타-프로토콜은무효거래가블록체인에포함되지않도록막을방법이자기자신의프로토콜자체에는없다. 그렇기때문에완전히안전보장이된단순지불검증메타- 프로토콜이라면, 어떤거래가유효한지아닌지를결정하기위해, 항상비트코인블록체인의원점까지돌아가훑어보는작업이필요하다. 현재까지비트코인에기반한메타-프로토콜의모든 " 간단한 "(light) 클라이언트구현은자료를제공하는믿을만한서버에의지하고있는형편이다. 우리가암호화폐를만든가장중요한목적이제 3 의신용기구의필요성을없애는것이었다는걸특히되새겨본다면, 이것은아주분명하게도, 차선의결과가될뿐이다. 스크립팅 (Scripting) 별도의확장없이도비트코인프로토콜은낮은수준의 " 스마트계약 " 의개념을가능하게할수있다. 비트코인의 UTXO 는공개키만으로획득할수있을뿐만아니라, 단순스택-기반프로그래밍언어로표현되는더복잡한스크립트로도획득할수있다. 이런경우에는, UTXO 를지출하는거래는그스크립트를만족하는데이터를제공해야만한다. 사실, 기초적인공개키소유권메커니즘도스크립트를통해실행된다 : 그스크립트는타원곡선서명을 입력 으로받아그거래와 UTXO 를가진주소에대해검증을하고만약검증이성공하면 1 을, 실패하면 0 을 출력 한다. 여러다른다양한사용사례에대해좀더복잡한여러스크립트들이있을수있다. 예를들어, 주어진세개의개인키가운데두개로부터서명을받아야만승인이되도록스크립트를짤수있다. 이런스크립트는회사계정, 보안저축계정, 상업공탁상황등에유용하게쓰일수있다. 스크립트는또한어떤계산문제의답에대한포상금을지불하는데도쓰일수있다. " 만약당신이이액면가의도기코인거래를나에게보냈다는 SPV 증명을제공한다면, 이비트코인 UTXO 는당신것이다 " 라는식으로말하는스크립트를짤수도있다. 즉근본적으로탈중앙화된상호-암호화폐교환을가능하게한다. 하지만비트코인에구현된스크립트언어는몇가지중요한한계가있다. 튜링불완전성 : 비트코인스크립트언어로할수있는작업이많긴하지만, 모든경우의프로그래밍을다지원하지는않는다. 특히 while 이나 for 와같은순환 (loop) 명령카테고리가빠져있다. 순환명령어를없앤이유는거래증명을할때무한순환에빠지는것을막기위해서였다. 이론적으로는이건스크립트프로그래머가극복할수있는장애물이기는하다.. 왜냐하면어떤순환명령이든단순히하위코드를여러 9

차례 if 구문과함께반복함으로써구현이가능하기때문이다. 하지만이것은아주공간비효율적인프로그램이된다. 예를들어대안타원곡선서명알고리즘을실행하려면코드안에있는곱셈을모두개별적으로 256 번반복하는것이필요하다. 가치무지 : UTXO 스크립트만으로는인출액수를세밀하게통제할방법이없다. 예를들어, 신탁계약의강력한실용사례라할수있는헷지계약을살펴보자. A 와 B 가 $1000 어치의 BTC 를공동계좌에입금했다고하자. 시간이지나면비트코인의가격이오를수가있다. 두사람은 30 일후자동으로 A 가 $1000 어치 BTC 를받고 B 는공동계좌의나머지잔액을받는그런계약을맺고싶다. 하지만이계약은 1BTC 가미국달러로얼마인지정해줄제 3 자를필요로한다. 만약이런계약이실현가능하다면지금현존하는완전중앙집권적인금융시스템아래에서도고도로발전된계약형태라고볼수있다. 하지만 UTXO 는인출액전부가송금되거나말거나밖에선택할수가없다. 즉세부작은단위로나눠질가능성을포함할수없는것이다. 위에예를든계약거래를실행할유일한방법은변하는 UTXO 의액면가단위를아주다양하게양산하고 ( 예를들어 1 부터 30 까지의모든자연수 k 에대해 2 의 k 승의 1 UTXO 를만듦 ) A 가 B 에게이중에서필요한금액에맞는것을선택해서보내게하는방식과같이매우비효율적인편법을사용하는길뿐이다. 상태표현제한 : UTXO 가표현할수있는상태는사용되었거나안되거나둘뿐이다. 그렇기때문에이두가지상태이외에다른어떤내부적상태를가지는다중단계계약이나스크립트를만들수가없다. 이점이분산환전거래나이중암호실행프로토콜 ( 계산보상금을보장하기위해필요하다 ) 과같은다중조건계약을어렵게한다. 즉 UTXO 은단순하고 1 회적인계약에만이용될수있을뿐, 분산조직과같은더복잡한 " 상태적 (stateful)" 계약에는이용될수없고메타프로토콜을적용하기어렵게만든다. 블록체인무지 (Blockchain-blindness): UTXO 는논스 (Nonce), 타임스탬프, 이전블록해시같은블록체인자료를해독하지못한다. 이단점으로인해스크랩트언어속에잠재적으로가치있을무작위성이빠지게된다. 그래서도박이나여러다른분야의어플리케이션을만드는데한계를보인다. 정리하자면, 발전된어플리케이션을만드는데 3 가지접근법이있다. 첫번째는독립적인블록체인을만드는것이고두번째는비트코인에이미내재된스크립트를이용하는것이며, 세번째는비트코인상에서작동되는메타-규약을건설하는것이다. 독립적인블록체을쓰면무한히자유로운프로그램을짤수있지만개발기간, 초기셋업작업, 보안등의비용을치뤄야한다. 비트코인에내재된스크립트를이용하면실행이간단하고표준화된다는장점이있지만, 이용범위가제한적이다. 메타규약을쓰는것은간단하긴하지만, 확장성의결함을감수해야한다. 이더리움을통해우리는개발하기도쉽고더강력한라이트클라이언트기능을가지는동시에경제적인개발환경과 블록체인보안을공유하는어플리케이션을만들수있는, 대안프레임워크 (alternative framework) 를건설하려고한다. 이더리움 (Ethereum) 이더리움의목적은분산어플리케이션제작을위한대체프로토콜을만드는것이다. 대규모분산어플리케이션에유용할것이라생각되는다른종류의제작기법을제공하며, 빠른개발시간, 작고드물게사용되는어플리케이션을위한보안, 다른어플리케이션과의효율적인상호작용이중요한상황에특히주안점을두고있다. 이더리움은튜링완전언어를내장하고있는블록체인이라는필수적이고근본적인기반을제공함으로써이목적을이루고자한다. 누구든지이언어를사용하여스마트컨트랙트, 분산어플리케이션을작성하여소유권에대한임의의규칙, 트랜잭션형식 (transaction format), 상태변환함수 (state transition function) 등을생성할수있다. 네임코인의기본적인형태는두줄정도의코드로작성할수있고, 통화나평판시스템관련프로토콜은스무줄내외의코드로만들수 10

있다. 어떤값을저장하고, 특정한조건들을만족했을때만그값을얻을수있게하는일종의암호상자인스마트컨트랙트또한이플랫폼위에만들수있다. 이것은비트코인의스크립팅 (scripting) 이제공하는것보다훨씬강력한기능들이제공되기때문에가능한것으로, 튜링-완전 (Turing-completeness), 가치인지능력 (value-awareness), 블록체인인지능력 (blockchain-awareness), 상태 (state) 개념등이포함된다. 이더리움어카운트 (Ethereum Accounts) 이더리움에서, 상태 (state) 는어카운트 (account) 라고하는오브젝트 (object) 들로구성되어있다. 각각의어카운트는 20 바이트의주소와어카운트간값과정보를직접적으로전달해주는상태변환 (state transition) 을가지고있다. 이더리움어카운트는다음네개의필드를가지고있다. 논스 (nonce): 각트랜잭션이오직한번만처리되게하는일종의카운터 어카운트의현재이더 (ether) 잔고 어카운트의계약코드 ( 존재한다면 ) 어카운트의저장공간 ( 초기설정 (default) 상에서는비어있음 ) 이더는이더리움의기본내부암호-연료 (crypto-fuel) 이고, 트랜잭션수수료를지불하는데사용된다. 보통두가지종류의어카운트가존재하는데, 프라이빗키에의해통제되는외부소유어카운트 (Externally Owned Accounts) 와컨트랙트코드에의해통제되는컨트랙트어카운트 (Contract Accounts) 가있다. 외부소유어카운트는아무런코드도가지고있지않으며, 이어카운트에서메시지를보내기위해서는새로운트랜잭션을하나만들고, 서명 (signing) 을해야한다. 컨트랙트어카운트는메시지를받을때마다, 자신의코드를활성화시키고, 이에따라메시지를읽거나내부저장공간에기록하고, 다른메시지들을보내거나, 컨트랙트들을차례로생성하게된다. 이더리움에서컨트랙트는, 수행되거나컴파일되어야할어떤것이라기보다는, 이더리움의실행환경안에살아있는 일종의자율에이전트 (autonomous agents) 로서, 메시지나트랜잭션이도착하면항상특정한코드를실행하고, 자신의 이더잔고와, 영속적인변수들을추적하기위해자신의키 / 값저장소를직접적으로통제하는역할을한다. 메시지와트랜잭션 (Messages and Transactions) 이더리움에서사용되는트랜잭션 (transaction) 이란용어는외부소유어카운트가보낼메시지를가지고있는서명된 데이터패키지를말한다. 이트랜잭션은다음을포함하고있다. 메시지수신처발신처를확인할수있는서명발신처가수신처로보내는이더의양선택적 (optional) 데이터필드 STARTGAS 값, 트랜잭션실행이수행되도록허용된최대계산단계수 GASPRICE 값, 매계산단계마다발신처가지불하는수수료 처음세항목은암호화폐에서는거의표준처럼사용되는값이다. 데이터필드는초기값으로설정된기능 (function) 은가지고있지않지만, 버추얼머신 (virtual machine) 은컨트랙트가이데이터에접근할때사용할수행코드 (opcode) 를가지고있다. 예를들어, 블록체인위에도메인등록서비스로기능하고있는컨트랙트가있을경우, 이컨트랙트로 11

보내지는데이터는두개의필드를가지고있는것으로해석할수있다. 첫번째필드는등록하고자하는도메인이고, 두번째필드는 IP 주소이다. 컨트랙트는메시지데이터로부터이값들을읽어서저장소내적당한위치에저장한다. STARTGAS 와 GASPRICE 필드는이더리움의앤티-서비스거부 (anti-dos) 모델에있어서매우중요한역할을한다. 코드내의우연적이거나악의적인무한루프, 또는계산낭비를방지하기위해각각의트랜잭션은사용할수있는코드실행의계산단계수를제한하도록설정되어야한다. 계산의기본단위는 gas 이고보통, 계산단계는 1 gas 의비용이소요되나, 어떤연산은더비싼계산비용을치루거나, 상태의일부분으로저장되어야하는데이터의양이많을경우더많은수의 gas 비용이필요하게된다. 또한트랜잭션데이터에있는모든바이트는바이트당 5 gas 의수수료가든다. 이러한수수료시스템의의도는어떤공격자가계산, 밴드위스, 저장소등을포함하여그들이소비하는모든리소스에비례하여강제로수수료를지불하게하는데있다. 따라서, 따라서이런리소스중어떤것이라도상당량을소비하는네트웍과연관된트랜잭션은대략증가분에비례한 gas 수수료를가지고있어야한다. 메시지 (Messages) 컨트랙트는다른컨트랙트에게 메시지 를전달할수있다. 메시지는따로저장될필요가없는이더리움의실행 환경에서만존재하는가상의오브젝트이다. 메시지는다음의것을포함하고있다. ( 암묵적으로 ) 메시지발신처메시지수신처메시지와함께전달되는이더선택적데이터필드 STARTGAS 값 본질적으로, 메시지는외부실행자가아닌컨트랙트에의해생성된다는것을제외하면트랜잭션과유사하다. 현재코드수행을하고있는컨트랙트가메시지를생성하고실행하라는 CALL opcode 를만나게되면메시지를생성한다. 트랜잭션과마찬가지로, 메시지는해당코드를실행하는수신자어카운트에도달하게된다. 따라서, 컨트랙트는외부실행자가하는것과정확히같은방식으로다른컨트랙트와관계를맺을수있다. 트랜잭션이나컨트랙트에의해할당된 gas 허용치는그트랜잭션과모든하위실행에의해소모된총 gas 에적용된다. 예를들어, 외부실행자 A 가 B 에게 1000gas 와함께트랜잭션을보내고, B 는 600 gas 를소모한뒤 C 에게메시지를보내고, C 의내부실행에 300 gas 를소모한후반환하면, B 는 gas 가모두소모되기전에 100 gas 를더사용할수있다. 12

이더리움상태변환함수 (Ethereum State Transition Function) 이더리움상태전이함수 APPLY(S, TX) -> S 은다음처럼정의될수있다. 1. 트랜잭션이형식에제대로맞는지 ( 즉, 올바른개수의값을가지고있는지 ) 체크하고, 서명이유효한지, 논스가발신처어카운트의논스와일치하는지를체크한다. 그렇지않다면오류를반환한다. 2. STARTGAS * GASPRICE 로트랜잭션수수료를계산하고, 서명으로부터발신처주소를결정한다. 발신처어카운트잔고에서이수수료를빼고발신자논스를증가시킨다. 발신처잔고가충분하지않으면오류를반환한다. 3. GAS = STARTGAS 로초기화한후, 트랜잭션에서사용된바이트에대한값을지불하기위해바이트당 gas 의특정양을차감한다. 4. 발신처어카운트에서수신처어카운트로트랜잭션값을보낸다. 수신처어카운트가존재하지않으면새로생성한다. 수신처어카운트가컨트랙트이면, 컨트랙트의코드를끝까지또는 gas 가모두소모될때까지수행한다. 5. 발신처가충분한 돈 ' 을가지고있지못해서값전송이실패하거나, 코드수행시 gas 가부족하면, 모든상태변경을원상태로돌려놓는다. 단, 수수료지불은제외되고, 이수수료는채굴자어카운트에더해지게된다. 6. 그외에는, 모든남아있는모든 gas 에대한수수료를발신처에게돌려주고, 소모된 gas 에지불된수수료를채굴자에게보낸다. 예를들어, 다음과같은컨트랙트코드를가정해보자. if!self.storage[calldataload(0)]: self.storage[calldataload(0)] = calldataload(32) 실제로컨트랙트코드는로우 - 레벨 EVM 코드로작성되나, 이예제는이해하기쉽게하기위해, 이더리움하이 - 레벨 언어중하나인 Serpent 로작성하였다. 이코드는 EVM 코드로컴파일될수있다. 컨트랙트의스토리지는 13

비어있다고가정하고, 트랜잭션이 10 ether, 2000 gas, 0.001ether gasprice, 64 바이트의데이터 (0-31 바이트까지는 숫자 2 를나타내고, 32-63 바이트는 CHARLIE 라는문자열 ) 를보낸다고가정하자. 이경우상태변환함수의 프로세스는다음과같다. 1. 트랜잭션이유효하고형식에제대로맞는지확인한다. 2. 트랜잭션발송처가최소 2000 * 0.001=2 ether 를가지고있는지확인하고, 그럴경우, 발송처의어카운트에서 2 ether 를뺀다. 3. gas=2000 으로초기화한후, 트랜잭션은 170 바이트길이를가지고, 바이트당수수료는 5 라고가정하면, 850 을빼야하고결국 1150 gas 가남게된다. 4. 송신처어카운트에서추가 10 ether 를빼고이것을컨트랙트어카운트에더한다. 5. 코드를실행시킨다. 이경우는간단한데, 컨트랙트의 index 2 에해당하는스토리지가사용되었는지확인하고 ( 이경우, 사용되지않았다.) index 2 에해당하는스토리지값을 CHARLIE 로설정한다. 이작업에 187 gas 가소비됐다고가정하면, 남아있는 gas 의양은 1150-187 = 963 이된다. 6. 963*0.001 = 0.963 ether 를송신처의어카운트로되돌려주고, 결과상태를반환한다. 트랜잭션의수신처에컨트랙트가없으면, 총트랜잭션수수료는제공된 GASPRICE 와트랜잭션의바이트수를곱한 값과같아지고, 트랜잭션과함께보내진데이터는관련이없어지게된다. 메시지는트랜잭션과마찬가지방식으로, 상태를원래상태로되돌린다는것에주목하자. 메시지실행시 gas 가부족하게되면, 그메시지실행과그실행에의해촉발된다른모든실행들은원래대로되돌려지게되지만, 그부모실행은되돌려질필요가없다. 이것은컨트랙트가다른컨트랙트를호출하는것은안전하다는것을의미한다. A 가 G gas 를가지고 B 를호출하면, A 의실행은최대 G gas 만을잃는다는것을보장받게된다. 컨트랙트를생성하는 CREATE 라는 opcode 를보면, 실행방식은대체로 CALL 과유사하나, 실행결과는새로생성된컨트랙트의코드를결정한다는차이가있다. 코드실행 (Code Execution) 이더리움컨트랙트를구성하는코드는 이더리움버추얼머신코드 또는 EVM 코드 로불리는로우-레벨, 스택기반의바이트코드언어로작성된다. 이코드는연속된바이트로구성되어있고, 각각의바이트는연산 (operation) 을나타낸다. 보통, 코드실행은 0 부터시작하는현재프로그램카운터를하나씩증가시키면서반복적으로연산을수행하도록구성된무한루프이고, 코드의마지막에도달하거나오류, STOP, RETURN 명령을만나면실행을멈추게된다. 연산을수행하기위해서는데이터를저장하는세가지타입의공간에접근할수있어야한다. 스택 : last-in-first-out 컨테이너로여기에값들을밀어넣거나 (push) 하거나뺄 (pop) 수있다. 메모리 : 무한대로확장가능한바이트배열 컨트랙트의영속적인 (long-term) 저장소 (storage): 키 / 값저장소. 계산이끝나면리셋되는스택이나메모리와는달리저장소는영속적으로유지된다. 코드는또한블록헤더데이터뿐만아니라특정값이나, 발송자및수신되는메시지의데이터에접근할수있고, 결과값으로데이터의바이트배열을반환할수도있다. EVM 코드의공식실행모델은놀랍도록단순하다. 이더리움버추얼머신이실행되는동안, 모든계산상태는 (block_state, transaction, message, code, memory, stack, pc, gas) 튜플 (tuple) 로정의될수있고, block_state 는 14

모든어카운트를포함하는전역상태 (global state) 로서잔고와저장소 (storage) 를포함한다. 반복되는매코드실행순간의시작시, code 의 pc( 프로그램카운터 ) 번째바이트의현재명령이실행되고, ( pc 가코드의길이보다크면 (pc >= len(code)) pc 는 0), 각각의명령은튜플을어떻게변화시킬지대한그자신의정의를알고있다. 예를들어, ADD 는스택에서두개의아이템을꺼내 (pop), 그합을구한후다시스택에넣고 (push) gas 를 1 만큼감소시키고, pc 는 1 증가시킨다. SSTORE 는스택에서두개의아이템을꺼내이아이템의첫번째값이가리키는컨트랙트저장소인덱스에두번째아이템을넣는다. 이더리움버추얼머신환경을 JIT 컴파일을통해최적화하는많은방법이있지만, 기본적인이더리움은수백줄의코드로구현될수있다. 블록체인과채굴 (Blockchain and Mining) 이더리움블록체인은여러면에서비트코인블록체인과유사하나, 어느정도차이점들이있다. 이더리움과비트코인에서의각블록체인구조에대한주요차이점으로는비트코인과는달리이더리움블록은트랜잭션리스트와가장최근의상태 (state) 복사본을가지고있다는것이다. 그것외에도, 두개의다른값 - 블록넘버와 difficulty - 이또한블록내에저장된다. 기본적인이더리움블록검증알고리즘은다음과같다. 1. 참조하고있는이전블록이존재하는지그리고, 유효한지확인한다. 2. 현재블록의타임스탬프가참조하고있는이전블록의그것보다크면서, 동시에현시점을기준으로 15 분후보다작은값인지확인한다. 3. 블록넘버, difficulty, 트랜잭션루트, 삼촌루트, gas 리미트등 ( 기타다양한이더리움로우레벨개념 ) 이유효한지확인한다. 4. 블록에포함된작업증명이유효한지확인한다. 5. S[0] 이이전블록의마지막상태 (state) 라고가정하자. 6. TX 를현재블록의 n 개의트랜잭션리스트라고하자. 0 부터 n-1 에대해, S[i+1] = APPLY(S[i], TX[i]) 로설정하자. 어플리케이션이오류를반환하거나, 이시점까지블록에서소모된총 gas 가 GASLIMIT 를초과하면오류를반환한다. 7. 채굴자에게지불된보상블록을 S[n] 덧붙인후이것을 S_FINAL 이라하자. 8. 상태 S_FINAL 의머클트리루트가블록헤더가가지고있는최종상태루트와같은지를검증한다. 이값이같으면그블록은유효한블록이며, 다르면유효하지않은것으로판단한다. 이러한접근은언뜻, 모든상태를각블록에저장할필요성때문에매우비효율적인것처럼보이지만, 실제로는효율성의측면에서는비트코인과비교할만하다. 그이유로는상태가트리구조로저장되고, 모든블록후에단지트리의작은부분만이변경되기때문이다. 보통, 인접한두개의블록간에는트리의대부분의내용이같고, 따라서한번데이터가저장되면포인터 ( 서브트리의해쉬 ) 를사용하여참조될수있다. 패트리시아트리 (Patricia tree) 로알려진 15

이러한종류의특별한트리는머클트리개념을수정하여노드를단지수정할뿐만아니라, 효율적으로삽입되거나삭제하여이러한작업을수행할수있도록해준다. 또한, 모든상태정보가마지막블록에포함되어있기때문에, 전체블록체인히스토리를모두저장할필요가없어지게된다. 이방법을비트코인에적용한다면 5-20 배의저장공간절약의효과가생길것이다. 물리적인하드웨어관점에서볼때, 컨트랙트코드는 어디에서 " 실행되는가하는의문이쉽게들수있다. 간단한해답은다음과같다. 컨트랙트코드를실행하는프로세스는상태전환함수정의의한부분이고, 이것은블록검증알고리즘의부분이다. 따라서, 트랜잭션이블록 B 에포함되면그트랜잭션에의해발생할코드의실행은현재또는향후에블록 B 를다운로드하고검증하는모든노드들에의해실행될것이다. 어플리케이션 (Applications) 기본적으로, 이더리움을이용하여총세가지카테고리의어플리케이션을제작할수있다. 첫번째카테고리는돈과직접적으로연관된컨트랙트를계약참여자들로하여금보다강력하게설정-관리하게끔하는금융어플리케이션이다. 이의예는하위화폐 (= 유로 / 달러등의상위화폐와환율이연동된화폐를지칭 ), 파생상품, 헷지컨트랙트, 예금용전자지갑, 유언장, 그리고최종적으로는전면적인고용계약수준의것들까지포함한다. 두번째카테고리는준 ( 準 ) 금융어플리케이션이다. 금전이관여되어있지만, 상당부분비 ( 非 ) 화폐적인면이존재하는계약을위한어플리케이션이이에해당된다. 이의좋은예로는어려운연산문제의솔루션을제공할시자동적으로포상금이지급되는계약이다. 마지막으로, 온라인투표와분권형 ( 分權形 ) 거버넌스 (Governance) 와같이금융과관련성이아예없는어플리케이션이있다. 토큰시스템 (Token Systems) 블록체인토큰시스템 (On-blockchain token system) 은미화 / 금등과연동된하위화폐, 주식과 스마트자산 * (Smart Property: 비트코인의블록체인상에서소유권이컨트롤 / 관리되는자산 ), " 위조불가능한 (secure unforgeable)" 쿠폰, 그리고통상적인가치와연결되어있지않은기타토큰시스템 ( 예, 인센티브부여를위한포인트제도 ) 등에이르기까지다양한형태의거래시스템을네트워크상에서구현하게끔해주는어플리케이션들을갖고있다. 이더리움에서토큰시스템은놀랍도록쉽게구현할수있다. 토큰시스템을이해하는데에핵심은아래와같다. 모든화폐혹은토큰시스템은근본은결국한가지오퍼레이션만을수행하는데이터베이스이다. A 라는주체로부터 X 단위의화폐 / 토큰을차감하고, 차감한 X 단위의화폐 / 토큰을 B 에게지급한다. 단, i. 거래전, A 는최소 X 단위를보유하고있었음 ii. A 가이거래를승인함 이더리움에서유저는바로위의로직을컨트랙트에반영시키기만하면된다. Serpent 에서토큰시스템을실행하는기본적은코드는아래와같다 : def send(to, value): if self.storage[msg.sender] >= value: self.storage[msg.sender] = self.storage[msg.sender] - value self.storage[to] = self.storage[to] + value 16

이는기본적으로본백서에서설명한 은행시스템 의 " 상태변환함수 (state transition function)" 를아무런가공없이그대로적용시킨것이다. 통화의단위를정의하고배급하기위한최초작업을위해서, 또는더나아가여타컨트랙트들이계좌의잔금에대한정보요청을처리하기위한, 몇줄의코드가추가적으로더쓰여져야할수도있다. 하지만, 그정도가토큰시스템을만드는데필요한전부이다. 이론적으로, 이더리움에기반한하위화폐체계로서의토큰시스템은비트코인에기반한메타화폐 (= 비트코인블록체인연동된화폐 ) 가갖고있지않는중요한특성을지니고있을수있다 : 거래비용을거래시사용한화폐로직접지불할수있다는점이그것이다. 다음과같은과정을통하여이특성은발현될수있다 : 컨트랙트을집행하기위해서는발송인에게지불해야하는비용만큼의이더잔고를유지해야한다. 그리고컨트랙트집행시수수료로받는내부화폐 ( 하위화폐 ) 를 ( 상시돌아가고있는내부화폐-이더거래소에서 ) 즉각환전하여이더잔고로충전할수있다. 유저들은그렇게이더로그들의계좌들을 활성화 시켜야하지만각컨트랙트를통해얻어지는만큼의금액을이더로매번환전해주기에, 한번충전된이더는재사용이가능하다고볼수있다. 금융파생상품 (Financial derivatives) 파생상품은 스마트컨트랙트 의가장일반적인어플리케이션이며, 코드로실행할수있는가장간단한형태의어플리케이션중하나다. 금융컨트랙트를실행하는데가장주된어려움은대부분의경우계약에서규정하는자산에대한시세를외부에서참조해야한다는것이다. 예를들어, 금융컨트랙트에매우필요한것은이더 ( 또는기타가상화폐 )-USD 변동성에대해헷지 (hedge) 하는어플리케이션인데, 이헷지컨트랙트를실행하기위해서는 ETH/USD 의환율을제공할수있는컨트랙트가필요하다. 환율을알기위한가장쉬운방법은주식시장의 NASDAQ 과같은특정한제 3 자가실시간으로제공하는 데이터피드 컨트랙트를통해서이고, 관여주체는필요할때마다환율을업데이트할수있어야하며, 여타컨트랙트들과환율에대한메시지를주고받을수있는인터페이스를제공할수있어야한다. 상기핵심요건들을가정하고, 위언급한헷지컨트랙트는다음과같은구조를띌것이다 : 1. A 가 1000 이더를입금할때까지기다린다 2. B 가 1000 이더를입금할때까지기다린다 3. 입금된이더의달러가치를기록하며 ( 환율은 Data feed 컨트랙트로쿼리를보냄으로써계산한다 ), 이를 $X 라한다 4. 30 일이후, 당시의환율을적용한금액을계산하여 A 에게는 $X 를송금하고당시총금액에나머지를 B 에게송금하도록 A 또는 B 가컨트랙트를다시활성화시킬수있게끔한다. 위와같은컨트랙트는가상통화를이용한상거래의향후발전가능성을제시한다. 가상화폐상거래활성화의장애물중하나는가상화폐의높은변동성이다 ; 다수의유저들과상인들은가상화폐혹은블록체인자산이제공하는보안성과편의성에대한니즈가있지만, 단하루만의그들의자산가치가 23% 하락할지도모른다는리스크는피하고싶어한다. 이문제에대한지금까지의가장보편적인솔루션은자산발행자가자산에대한보증을서는것이었다 : 이는곧, 빌헹자가하위화폐를만들어서그를통해서통화량을조절할수있는권한을갖고, 누군가가일정단위의하위화폐를지불하였을때그에상응하는특정한베이스자산 ( 예, USD, 금 ) 으로교환해주는방식을뜻한다. 이방식을본사례에적용한다면, 가상화폐발행자는가상화폐를지불하는자에게그에상응하는베이스자산을제공할것이라고공개적인 17

약속을하는것이다. 이메커니즘은비 ( 非 ) 가상화폐혹은비 ( 非 ) 디지털자산을블록체인자산화 ( 化 ) 자산화시키는결과를낳는다 물론가상화폐발행자를신뢰할수있다면말이다. 다만, 현실적으로는자산발행인을언제나신뢰를할수없으며, 몇몇사례를보면, 우리의금융인프라는자산보증서비스가존재하기에는너무취약하거나, 때로는적대적이기도하다. 파생상품은이에대한대안을제공해준다. 여기서자산을보증하기위한펀드를제공하는역활을하나의자산발행자가하는것이아니라암호화담보자산 (cryptographic reference asset, 예 : 이더 ) 의가격이올라갈것이라는데에베팅을하는투자자들 (speculators) 의탈중앙화된시장이그역할을담당하게된다. 파생상품을통한보증또한완전하게탈중앙화된방법론은아니라는것을주의하기바란다. 비록자산발행자을통한방법보다진입장벽 ( 영업허가증등이필요없음 ) 이없고사기 / 조작가능성이줄어들기는하지만, 신뢰성있는제 3 기관이 USD/ETH 시세또는환율을제공해야하기때문이다. 신원조회 / 평판시스템 (Identity and Reputation Systems) 최초의알트코인 ( 비트코인이후에생겨난가상화폐 ) 인네임코인은비트코인과유사한블록체인을이용하여사용자가공공 DB 에다른데이터와함께본인의이름을등록하는명의등록시스템을만들어냈다. 이의주된사용례는 bitcoin.org 와 (Namecoin 의경우에는 bitcoin.bit ) 도메인명을매핑하는 DNS 시스템이다. 다른사용례에는이메일인증, 그리고보다진일보된평판시스템등이있다. 이더리움에서네임코인과같은명의등록시스템의기본적인컨트랙트는아래와같은형태를띈다 : def register(name, value): if!self.storage[name]: self.storage[name] = value 이컨트랙트는매우단순하게도, 이더리움네트워크안에서저장되어있는, 추가할수는있지만수정하거나지울수없는데이터베이스일뿐이다. 누구든지소량의이더를이용하여본인의명의를등록할수있으며, 한번등록하면영구적으로보존된다. 보다정교한명의등록컨트랙트는다른컨트랙트가보내는쿼리에반응할수있는함수조건이걸려있을것으며, 명의소유자 ( 곧, 최초등록자 ) 가데이터를변경하거나명의소유권을이전할수있는메커니즘이장착되어있을것이다. 혹자는평판이나인터넷신용도기능등을그위에추가할수도있다. 분산형파일저장소 (Decentralized File Storage) 지난몇년동안, 드롭박스와같은웹상에파일을저장시켜주는인기있는스타트업이다수생겨났다 ( 월정액에유저들이하드드라이브를백업시켜놓고백업파일에액세스할수있는비즈니스모델임 ). 그러나, 현시점에서파일저장시장은종종상대적으로비효율적일때가많다 ; 현재존재하는솔루션들의월정액가격을보면 ( 특히무료할당량도기업할인도없는 20-200 기가바이트수준의기업이지불하는월정액 ), 한달만써도전체하드드라이브의비용보다더비쌀정도이다. 이더리움의컨트랙트는분산형파일저장소생태계의발전을가능케한다. 이생태계에서유저개개인은본인의하드드라이브를대여해주는대가로소액의돈을받을수있으며남는하드디스크공간은파일저장의비용을더욱낮추는결과를낳을것이다. 18

분산형파일저장소의핵심기반은, 소위 분산형드롭박스컨트랙트 가될것이다. 이컨트랙트는다음과같이작동한다 : 1) 유저가업로드하려는데이터를블록으로잘라내고, 2) 프라이버시를위해해당데이터를암호화시킨후, 3) 그데이터로머클트리를만든다. 위데이터에대한컨트랙트는아래와같은룰에의해서유지된다 : N 개의블록마다무작위방식으로 ( 컨트랙트코드로접근가능한전블록의해쉬에기반한무작위방식 ) 머클트리의인덱스를뽑는다. 유저가올린파일에해당하는트리의특정인덱스에대하여, 해당데이터를저장해주겠다는첫주체에게 ( 간소화된지불증명이자소유권증명의의미를띄는 ) X 이더를지불한다. 파일을올린유저가다시자신의파일을다운로드하고싶을때에는, 소액결제채널프로토콜 ( 예, 32 킬로바이트에 1 szabo 를지불한다 ) 을사용해서파일을복원할수있다 ; 수수료측면에서가장효율적인접근방법은파일을업로드한유저가저장이끝나는마지막까지파일에대한트랜스액션을공표하지않고, 매 32 킬로바이트마다동일한 Nonce 를갖고있는보다수익성이있는트랜스액션으로바꿔주는방법이있다. 비록이방식은파일을업로드한유저가다수의랜덤한노드들이나의파일을계속저장하고있을것이라고믿어야한다는것을전제하는것처럼보이지만, 실제로는유저는업로드한파일을수많은암호화된조각으로잘라내서여러노드들과공유하고또컨트랙트를통해서외부노드들이내가올린파일을저장하고있다는것을모니터링함으로써내가올린파일에대한분실혹은제 3 자에의한도용이라는리스크를거의 0 에가깝게줄일수있다는것이분산형드롭박스컨트랙트중요한특징이다. 컨트랙트가계속돈을지불하고있다는것은곧네트워크상에서누군가는파일을저장하고있다는것을증명한다. 탈중앙화된자율조직 (Decentralized Autonomous Organization) 탈중앙화된자율조직 의기본적인개념은특정한집합의구성원또는주주들을갖고있는가상독립체 (virtual entity) 가필요한수만큼의구성원의동의하에 ( 예, 67% 다수 ) 조직자금운용권한및코드변경권한을갖는다는것이다. 구성원들은그조직이어떻게운영자금을배분할지를공동으로결정할것이다. DAO 의자금을배분하는방식은포상, 급여형식부터보다색다른내부화폐로보상하는형식까지다양하다. 이것은본질적으로통상적인기업이나비영리재단에서사용하는법적인장치들을그대로따르는것이지만, 그집행의강제 (enforcement) 를위해암호화블록체인기술을사용한다는점이차별점이다. 지금까지의 DAO 에대한논의는주로 " 자본주의적 (capitalist)" 모델인 " 탈중앙화된자율기업 (decentralized autonomous corporation, DAC)" 에관한것이었는데, 이 DAC 는배당을받는주주들과매매가능한지분을가지고있다. 이것에대한대안적인형태로 " 탈중앙화된자율커뮤니티 (decentralized autonomous community)" 같은개념도생각해볼수있는데, 이안에서구성원들은의사결정에있어서모두동일한지분을갖고있으며, 기존구성원의 67% 의표결을통한동의가있을때구성원을충원하거나탈퇴시킬수있을것이다. 그렇다면, 한사람이오직하나의멤버십만을가져야한다는요건이그그룹에의해공동으로시행될필요가있을것이다. DAO 코딩에관한일반적인개요는다음과같다. 가장간단한디자인은단순하게도구성원 2/3 가동의 / 거부하였을시저절로코드가변경되는컨셉이다. 비록이론적으로한번세팅된코드는바뀔수없어도, 별도의코드들을각각다른컨트랙트들로분리시켜서, 이것을변경가능한저장공간에각각넣어둔다음, 이코드들을불러낼수있는주소들을제공함으로써우리는실제적으로코드가변경된것과같은효과를만들수있다. 아주간단한 DAO 컨트랙에는 3 가지종류의트랙잭션들이있을수있는데, 그구분은그트랜잭션이제공하는데이터의종류에따른다 : [0,i,K,V] 는저장공간인덱스 k 에있는주소를 v 값으로바꾸라는인덱스 i 를가진제안을등록 19

[0,i] 는제안 i 에찬성하는투표를등록 [2,i] 는충분한투표가이루어졌을때제안 i 를완결컨트랙트는상기항목들각각에대한 ' 조건절 ' 을갖고있을것이다. 컨트랙트는모든오픈스토리지에일어난변화들과 ' 누가그변화들에대해투표했는가 ' 에대한리스트를보관하고유지하게될것이다. 컨트랙트은또한전체구성원리스트도보관한다. 어떤스토리지변경이던지구성원의 2/3 의투표를받으면, 마지막으로확정시키는트랜잭션이그변경을집행할수있게된다. 이것보다좀더발전된형태는내장투표기능을이용해서트랜잭션을송신하거나, 구성원을충원 / 탈퇴시키거나, 위임민주주의 (Liquid Democracy 또는 Delegative Democracy, http://en.wikipedia.org/wiki/delegative_democracy) 의투표위임등의기능도추가할수있을것이다. 이런투표위임을통해누구에게나자신을위해투표할수있도록위임할수있고, 또이권한은다른사람에게다시전가가될수도있다. A 가 B 에게위임하고, B 는 C 에게위임하면, C 가 A 의투표를결정한다. 이러한설계를통해서, DAO 는탈중앙화된커뮤니티로유기적으로성장할수있으며, 더나아가누가구성원인지아닌지를판단하는기능을전문가들에게위임할수도있도록해줄것이다. ( 물론 " 현행시스템 " 과달리, 각커뮤니티구성원들의의견이바뀜에따라, 그러한전문가들은있을수도 / 없을수도있게된다.) 이것과비교되는다른모델은탈중앙화된기업이라고할수있는데, 여기에서각어카운트는 0 또는그이상의지분을가질수있고, 어떤결정을내리기위해서는지분의 2/3 가필요하다. 그것의가장단순화된핵심골격은자산관리기능, 지분을매매할수있는오퍼를낼수있는능력, 그리고다른오퍼들을수락할수있는 ( 아마도컨트랙트내에있는주문매칭메커니즘을통해 ) 능력들을포함하게될것이다. " 이사회 " 개념을일반화하는유동식민주주의 (Liquid Democracy) 스타일의위임제도또한있게될것이다. 추가적인어플리케이션 (Further Applications) 1. 예금용 ' 전자지갑 ' 펀드를안전하게보관하고싶은 A 가펀드를잃어버리거나누군가에게그녀의 Private key 를해킹당할것을걱정한다고가정해보자. 그녀는이더를 B 라는은행과의컨트랙트에다음과같은방식으로집어넣을것이다 : A 만이하루에그녀가소유하는펀드의최대 1% 를출금할수있다 B 또한하루에 A 가소유하는펀드의최대 1% 를출금할수있지만, A 는그녀의 Private key 를통해트랜스액션을발송함으로써 B 의출금권한을없애버릴수있다 A 와 B 는함께어떤금액도출금할수있다. 일반적으로하루의 1% 라는상한선은 A 에게충분하며, 그이상의금액을출금하고싶을시 A 는 B 에게상한조정허가를요청할수있다. Alice 의 Private key 가해킹당하였을경우, B 에게펀드를새로운컨트랙트로이체시키라고요청할수있다. A 가본인의 Private key 를분실하는경우, B 는오랜시간에걸쳐서라도펀드의금액을출금할수있다. B 가악당인경우에는 A 는 B 의출금권한을정지시킬수있다. 2. 작물보험시세가아닌날씨데이터피드를이용해서파생상품을손쉽게만들수있다. 아이오와주에있는농부가강수량데이터와역비례하게지불금이산출되는파생상품을산다면, 가뭄이있을시농부는자동적으로보상을받을수있을것이다. 이러한어플리케이션은자연재해일반에대한보험상품으로확대될수있을것이다. 20

3. 탈중앙화된데이터피드 쉘링코인 (SchellingCoin) 이라는프로토콜을사용하여, 변량 (Difference) 을다루는금융계약 ( 예, 로또 ) 을탈중앙화된방식으로운용할수있다. 쉘링코인은다음과같이작동한다 : 하나의주어진기준치 ( 예, ETH/USD 시세 ) 에대해 N 명의참여자가각각자신들이맞다고생각하는값을시스템에제공한다. 이러한값들은그값의크기에따라순위가매겨지며, 이때 25 번째퍼센타일과 75 번째퍼센타일사이에있는값을제시한사람은토큰 1 개를보상으로받게된다. 이렇게되면보상을받기위해서모든참가자들은다른사람들이제시했을똑같은값을제시하고자할것이고, 많은다수의참여자가현실적으로동의할수있는유일한값은결국명백한기본값인참값 (truth) 이될것이다. 이것은 ETH/USD 가격, 베를린의온도, 심지어는어려운연산문제의결과값까지도포함하는, 어떤수의값들도이론적으로제공해줄있는탈중앙화된프로토콜을만들수있게해준다. 4. 스마트멀티시그공탁계좌비트코인은멀티시그트랜잭션을만들수있게해주는데, 이는, 가령, 5 개의키중 3 개를갖고서명해야출금을허용하는방식의트랜잭션을지칭한다. 이더리움은보다높은세밀도를제공한다. 예를들어, 5 개중 4 개가있으면기금은전체를사용할수있고, 5 개중 3 개가있으면하루에기금의 10% 을사용할수있고, 2 개가있으면하루에 0.5% 를사용할수있다. 추가적으로, 이더리움의멀티시그는동시에집행해야할필요가없다. 즉, 두주체는다른시기에블록체인에본인의전자서명을등록할수있고최종의전자서명이이루어졌을시자동적으로트랜잭션이네트워크로보내진다. 5. 클라우드컴퓨팅 EVM 기술을사용하여입증가능한컴퓨팅환경을만들수있다. 입증가능한컴퓨팅환경의예시는다음과같다 : 한유저가다른유저에게연산을수행하게한후랜덤한시점에연산을수행한주체에게미리설정된연산체크포인트가올바른지에대한증명을요구할수있다. 이기술은누구든지자신의데스크탑, 노트북, 또는전문화된서버를갖고참여할수있는클라우드컴퓨팅시장을창조하게될것이며, 함께연산의정확성을무작위추출검사를함으로써시스템의신뢰성이더욱강화될것이다 ( 즉, 노드들이이익을내기위해서는유저들을속일수없게된다 ). 물론그러한시스템은모든작업들을수행하는데에적합한것은아니다 ; 예를들어, 높은수준의프로세스간커뮤니케이션이필요한작업같은경우여러개의클라우드노드들로수행하기에는적합하지않다. 하지만그외작업들은보다수월하게병렬진행이가능하다 ; SETI@home, folding@home, 유전자알고리즘같은경우는분산화된클라우드컴퓨팅플랫폼에서쉽게작업할수있는프로젝트들이다. 6. P2P 도박 Frank Stajano 나 Richard Clayton 의 Cyberdice 같은 P2P 도박프로토콜들은모두이더리움의블록체인위에구현될수있다. 가장단순한도박프로토콜은다음블록의해시값의차이에대한컨트랙트이며, 0 에가까운수수료와그누구도사기를칠수없는보다발전된프로토콜이그위에얹혀질수있다. 7. 예측시장오라클 (Oracle) 혹은쉘링코인 (Schelling Coin) 등을갖고, Robin Hanson 이주창한것과같은예측시장도쉽게구현할수있다. 쉘링코인과함께예측시장은분권화된조직들에대한거버넌스프로토콜로서 퓨타키 (Futarchy) 의첫번째주류어플리케이션이될수있다. 퓨타키 (Futarchy)- 8. 블록체인상의탈중앙화된장터정치인들이국가복지에관한정책을정의하고, 예측시장이그신원조회 / 평판시스템을기반으로원활하게돌아가는 P2P 장터를구축할수있다. 정책들중가장긍정적인효과가많을수있는정책을결정하는 21 형식의거버넌스

그밖의이슈 (Miscellanea And Concerns) 수정된 GHOST 도입 (Modified GHOST Implementation) GHOST(Greedy Heaviest Observed Subtree) 프로토콜은 Yonatan Sompolinsky 와 Aviv Zohar 에의해 2013 년 12 월에처음소개된혁신이다. GHOST 의문제의식은, 현재빠른확인시간 (confirmation times) 을가지고있는블록체인들이높은스테일 (stale) 비율로인해보안성저하라는문제를겪고있다는것인데, 이는블록들이네트워크를통해전파되는데일정한시간이걸리기때문이라는것이다. 만일채굴자 A 가하나의블록을채굴했는데, 이블록이채굴자 B 에게전파되기전에채굴자 B 가다른또하나의블록을채굴했다고하면, 채굴자 B 의블록은결국낭비될것이고, 네트워크보안에기여하지못하게될것이다. 중앙집중화 - 게다가중앙집중화 (Centralization) 이슈도있다 ; 만일채굴자 A 가 30% 의해시파워를, 블록생성주기가짧은블록체인그리고 B 가 10% 의해시파워를가지고있다면, A 가 ' 스테일블록 (Staleblock)' 을생산할일수록큰해시파워를가지는풀위험성은매번 70% 가될것이고 ( 왜냐하면다른 30% 의경우에는 A 가마지막블록을에서마이닝을해야효율성이커만들게되었고, 따라서즉각적으로채굴데이터를가지게되기때문이다 ), 반면 B 는매번진다는것이다. 해시파워가적으 90% 의경우에스테일블록을생산하게될위험성을가지고있다. 따라서만일블록면적을수록스테일블록이될주기가스테일비율이높은것에필요한만큼충분히짧다면, A 는단순히크기가가능성이커진다. 따라서전체해크다라는사실자체만으로훨씬더높은효율성을가지게된다. 이러한두가지효과가시파워의상당부분을차지하는결합되어서, 블록주기가짧은블록체인에서는, 높은해시파워점유율을가진단일한풀이독점적인풀이생기게될가능성채굴과정에대한사실상의통제권을가지게될가능성이매우높아진다. 이높다는이슈이다. 'Sompolinsky' 와 'Zohar' 가설명했듯이, GHOST 는어느체인이 가장스테일블록 (Stale block)- 긴 (longest) 것인지계산할때스테일블록도포함으로써위에서제기한첫번째이슈, 즉블록생성에성공하였고, 검증작네트워크보안손실이라는문제를해결한다. 다시말해서어느블록이가장큰전체업시, 오류가없어서네트워크작업증명을가지고있는지계산함에있어서, 그블록의모블록 (parent) 과그를통해전파되었으나, 더빨리조상 (ancestors) 뿐만아니라, 그블록의스테일자손 (stale descendants, 이더리움의전파된다른채굴자에의한블용어로는 삼촌 ) 까지도더한다는것이다. 중앙화라는두번째문제를해결하기위해서록에순위가밀리는바람에주체우리는 Sompolinsky 와 Zohar 가설명한프로토콜을넘어서서, 스테일블록들에인에산입되지못한블록이다. 대해서도블록보상을제공한다. 스테일블록도기본보상의 87.5% 를받게되며, 그이더리움에서는이러한탈락블스테일블록을포함하고있는사촌이나머지 12.5% 를받는다. 하지만수수료는록도여전히주체인블록보상의삼촌들에게는주어지지않는다. 87.5% 만큼의보상을받으며보안성을강화하는역할을수행하이더리움은 7 단계레벨만포함하는단순화된 GHOST 버전을구현한다. 그것은다음과게된다. 같이구체적으로정의된다 ; 하나의블록은반드시하나의모블록을지정해야하며, 0 또는그이상의삼촌을지정해야한다. 블록 B 에포함된삼촌은다음과같은속성들을가지고있어야한다. o B 의 k 번째조상의직접적인자손이어야한다. 여기서 2 <= k <= 7. o B 의조상이어서는안된다. o 유효한블록헤더여야하지만, 이전에확인되었을필요도, 또는심지어유효한블록일필요도없다. o 이전블록들에포함된모든삼촌들, 그리고같은블록에포함된모든다른삼촌들과는달라야한다 ( 중복포함방지 ) 블록 B 에있는각삼촌 U 에대해, B 의채굴자는코인베이스보상에더해추가로 3.125% 를더받고, U 의채굴자는기본코인베이스보상의 93.75% 를받는다. 22

단지최대 7 세대만삼촌을포함할수있는제한된 GHOST 버전을사용하는이유는두가지이다. 첫째, 무제한 GHOST 는하나의블록에대해어떤삼촌이유효한지에대한계산을매우복잡하게만든다.. 둘째, 만일이더리움과같은방식의보상을하면서도무제한 GHOST 를적용하게되면채굴자들이공격자의체인이아니라 ' 주체인 (mainchain)' 에서채굴을할동기를잃게될것이다. 수수료 (Fees) 블록체인에올려지는각트랜잭션은그것을다운로드하고검증하기위한비용을네트워크에부과하기때문에, 남용을방지하는어떠한규제메커니즘, 일반적으로는트랜잭션수수료가필요하게된다. 비트코인에서사용되는기본적인접근방법은순수하게자발적인수수료를징수하면서, 채굴자들이게이트키퍼 (gatekeeper) 로서의역할을하고유동적으로최저액을설정하도록하는것이다. 이런접근방법은비트코인커뮤니티에서매우환영받아왔는데, 그것이 시장-기반 이기때문에, 채굴자와트랜잭션송신자들간의수요와공급이그가격을결정한다는이유에서였다. 하지만이런식의사고방식에는문제가있는데, 트랜잭션처리는시장에서일어나는것이아니라는점이다. 트랜잭션처리를채굴자가송신자에제공하는하나의서비스로해석하는것이직관적으로솔깃해보이기는하지만, 실제적으로는채굴자가포함하는모든트랜잭션들은네트워크의모든노드들에의해처리되어야하고, 따라서트랜잭션처리에필요한대부분의비용은제 3 자가부담하는것이지, 그트랜잭션을포함할지말지를결정하는채굴자들이아니라는것이다. 그러므로공유지의비극 (tragedy-of-the-commons) 문제들이매우일어나기쉽다는것이다. 하지만, 이러한시장기반메커니즘의결함은어떤부정확한단순화전제들이주워졌을때, 마술처럼그결함자체를상쇄하게된다. 그주장은다음과같다. 다음을전제해보자 : 1. 하나의트랜잭션이 k 개의작업들 (operations) 을초래하는데, 이트랜잭션을포함하는채굴자에게 kr 만큼의보상을제공하게된다. 여기서 R 은송신자에의해서설정되고, k 와 R 은 ( 대략적으로 ) 채굴자에게사전에노출된다. 2. 하나의작업은어떤노드에대해서든 C 만큼의처리비용을가진다 ( 즉, 모든노드들은똑같은효율성을가지고있다 ). 3. N 개의채굴노드들이있고, 각각은정확히똑같은처리파워 ( 즉, 전체의 1/N) 를가지고있다. 4. 채굴을하지않는완전노드 (full nodes) 는없다. 채굴자는어떠한트랜잭션이그비용보다기대보상이클경우처리하려고할것이다. 따라서, 기대보상은 kr/n 인데, 왜냐하면채굴자는다음번블록을처리할 1/N 확률을가지고있으며, 이채굴자에게처리비용은단순히 kc 이다. 그러므로채굴자들은 kr/n > kc 이거나, R > NC 일때트랜잭션들을포함하려할것이다. 여기서 R 은송신자에의해제공된단위작업 (pre-operation) 당수수료이고, 따라서이것은송신자가그트랜잭션에서보게될혜택에대한 ' 하한값 ' 이되고, NC 는하나의작업을처리하기위해전체네트워크에부과된비용임을주목하자. 따라서채굴자들은비용보다전체공리적인혜택이큰트랜잭션들만포함하려하는인센티브를갖게된다. 하지만현실에서는이러한가정들이맞지않는몇가지중요한차이들이있다. 23

1. 채굴자는다른검증노드들보다트랜잭션을처리하는데더많은비용을지불하게되는데, 왜냐하면, 추가적인검증시간은블록전파를지연시키고, 따라서블록이스테일되는확률을증가시키기때문이다. 2. 비채굴완전노드 (full note) 들이존재한다. 3. 채굴파워의분포는실제로심각하게불평등하게될수있다. 4. 네트워크에피해를주는이해관계를가진투기자들, 정치적적, 그리고일탈자들이존재하고, 그들은다른검증노드가지불하는비용보다훨씬적은비용이들게될그런컨트랙트들을교묘하게만들수있다. (1) 은채굴자가더적은수의트랜잭션들을포함하게되는경향을제공하게되고, (2) 는 NC 를증가시키게되며, 따라서이두가지의효과들은부분적으로는서로를상쇄한다. (3) 과 (4) 가주요한문제인데, 이것들을해결하기위해, ' 플로팅상한값 (floating cap)' 을도입한다. 어떤블록이던지 BLK_LIMIT_FACTOR 곱하기장기지수이동평균 (the long-term exponential moving average) 보다더많은오퍼레이션들을가질수없다는것이다. 정확히는 : blk.oplimit = floor((blk.parent.oplimit * (EMAFACTOR - 1) + floor(parent.opcount * BLK_LIMIT_FACTOR)) / EMA_FACTOR) BLK_LIMIT_FACTOR 와 EMA_FACTOR 은상수이며각각잠정적으로 65536 와 1.5 로정해질것이지만, 추후분석 후에바뀔가능성이많다. 비트코인에있어서큰블록크기를막는또다른요인도있다. 큰블록이전파되는데에더오래걸리기때문에, 스테일될가능성이높다는점이다. 이더리움에서도높은가스 (GAS) 사용블록은전파되는데더오래걸리는데, 그것은크기가물리적으로크다는점과, 트랜잭션상태변환들 (state transitions) 을검증처리하는데더오래걸린다는점때문에그러하다. 이러한지연불이익 (delay disincentive) 은비트코인의경우에는중요한고려사항이지만, 이더리움의경우에는 GHOST 프로토콜덕분에중요도가낮아진다. 따라서조정된 ' 블록리미트 (block limit)' 로인해, 보다안정적인기본기준 (baseline) 을얻을수있게된다. 연산과튜링완전성 (Computation And Turing-Completeness) 중요한점은이더리움가상머신 (EVM) 이튜링-완전하다는것이다. 즉 EVM 은무한순환을포함한상상가능한모든계산수행을코딩할수있다. EVM 코드는순환계산을다음두가지방법으로수행한다. 첫번째는 JUMP 명령어로코드의이전장소로되돌아가고, JUMPI 명령어로 while x < 27: x = x * 2 같은문장처럼조건에따라건너뛰게하는것이다. 두번째는한계약이재귀반복을통해순환을일으킬가능성이있는다른계약을호출하는것이다. 이것은자연스럽게어떤문제를야기한다 : 악의적인사용자가계산을무한순환에빠뜨리는방법으로채굴자와풀노드를마비시켜버릴수있을까? 컴퓨터학계에서정지문제 (halting problem) 라고알려진유명한문제를통해이런이슈를피할수없음을알수있다. 일반적으로어떤주어진문제가궁극적으로멈추는지아닌지를미리판별할방법은없다. 상태변환과정에서설명했듯이, 한거래에최대로계산할수있는단계수를설정함으로써우리는해답을얻을수있다. 만약계산단계가그최대수보다더많으면계산은원점으로돌아가지만수수료는그대로지불된다 메시지들도같은방법으로작동한다. 우리가제시한해답의의미를더잘이해하기위해, 아래와같은몇가지보기를 생각해보자. 24

한악의적공격자가무한순환을실행하는계약을만들어채굴자로하여금무한순환을실행하도록거래를보냈다고 하자. 채굴자는거래를진행하고무한순환을실행해가스를다소모해서실행도중에멈춘다고하더라도, 거래는 여전히유효하고채굴자는여전히공격자에게이미실행된각계산단계마다의수수료를요구할수있다. 한악의적공격자가채굴자에게계산을오랫동안계속하게할목적으로아주긴무한순환프로그램을짰다고하자. 계산이끝났을때아주조금의블록만이생성되어채굴자가수수료를요구하기위해그거래를포함하는것이불가능하도록만드는게악의적공격자의목적이다. 하지만, 그공격자는실제실행되는계산단계의상한선을규정하는 STARTGAS 명령어에대한값을제출해야만하고, 따라서채굴자는해당계산이과도하게많은단계의수를필요로한다는것을계산전에미리알게된다. 예를들어 send(a,contract.storage[a]); contract.storage[a] = 0, 같은명령이들어간계약이있다고하자. 한악의적공격자가이계약을본후첫번째계산단계만실행시키고두번째단계는실행할수없을만큼의 ( 예를들어예금인출만한다음장부에기록되는스텝은실행되지않게 ) 가스만넣고거래를진행시켰다고하자. 계약작성자는이런공격에대해방어를걱정할필요가없다. 왜냐하면계산실행이도중에멈추면, 해당변화도원상복구되기때문이다. 어떤금융계약이 9 개의금융상품자료값의평균을취해위험을최소화하도록작동하고있다고하자. 그중 DAOs 섹션에서설명된것같은가변주소요청메커니즘을통해변경이가능하도록디자인된하나의자료값을악의적공격자가취한다고하자. 그렇게함으로써이금융계약으로부터펀드를찾으려는모든시도에대해가스가다소모되도록시도하게된다. 하지만금융계약은이문제를막기위해메시지위에가스한도를설정해두는것으로공격을방어할수있다.. 튜링-완전에대한대칭적인개념은튜링-불완전이다. 즉 JUMP 명령어나 JUMPI 명령어가존재하지않으며, 그어떤주어진시간에도오직각각의계약의복사본하나만이허용된다. 이런시스템아래에서는위에서술된수수료시스템이라든지우리가제시한해답의효율성을둘러싼불확실성에관한논쟁은불필요할것이다. 한계약을실행하는데드는비용은프로그램의크기에따라상한선이정해질것이기때문이다. 나아가, 튜링-비완전성은그리큰제한도아니다. 우리가현재까지상상했던계약가운데, 순환명령을필요로했던것은단하나뿐이었다. 그리고그순환명령조차도프로그램코딩에서한문장을 26 번반복함으로써없앨수있었다. 튜링-완전이함의하고있는심각성과그제한적인이점을생각해볼때, 왜튜링-불완전언어를쓰면안되는걸까? 하지만현실적으로, 튜링-불완전성은순환문제와악성공격에대한깔끔한해답이아니다. 왜그런지를알기위해아래와같은예제계약을보자. C0: call(c1); call(c1); C1: call(c2); call(c2); C2: call(c3); call(c3);... C49: call(c50); call(c50); C50: ( 프로그램의한단계를실행한후그변화를저장소에기록한다.) 이제 A 에게거래를보내자. 51 번의거래에서우리는 2 의 50 승의계산단계를계속하는계약을보낸다.. 채굴자들은각계약에따른계산단계의최대수와다른계약을재귀적으로호출하는계약에대한계산단계수를모두확보함으로써, 이런논리폭탄을사전에감지하려고시도할수있을지도모른다. 하지만이런시도는채굴자들이다른계약을호출하는계약은다루지못하게만든다. ( 왜냐하면위의모든 26 개계약의작성과실행은한줄의계약으로쉽게합쳐질수있기때문이다.) 다른문제적지점은메시지의주소필드는변수라는점이다. 그래서일반적으로, 주어진계약이사전에미리호출하는 다른계약이뭔지를판별하는것조차불가능할지도모른다. 25

그래서, 결국우리는놀라운결론에도달한다. 튜링 - 완전은놀랍도록다루기쉬우며, 만약튜링완전성이없으면 정확히같은계약으로대체할수없는한, 마찬가지로다루기가놀랍도록어렵다는점이다. 그렇다면, 그냥그 프로토콜을튜링 - 완전하게놔두는것이좋을것이다. 통화그리고발행 (Currency and Issuance) 이더리움 (Ethereum) 네트워크는그안에서자체적으로통용되는, 이더 (Ether) 라는화폐를가지고있다. 이더는 여러가지가상자산들간의효율적인교환을가능하게하는매개물의역할을하며, 또한트랜잭션수수료 (transaction fee) 를지불하기위한방법을제공한다. 사용자의편의와향후있을지모르는논쟁을예방하는차원에서, 이더 (Ether) 의각단위에대한명칭은다음과같이미리정해졌다. ( 비트코인명칭과관련하여벌어지는논쟁참조 ) 1: wei ( 웨이 ) 1012: szabo ( 재보 ) 1015: finney ( 피니 ) 1018: ether ( 이더 : ETH) 위명칭들은, 미화명칭인 달러 와 센트 또는비트코인의 BTC 와 사토시 등의확장개념으로생각하면이해하는데도움이될것이다. 가까운미래에, 이더 (ether) 는일반거래 (transaction) 를위해, 피니 (finney) 는소액결제를위해, 그리고 재보 (szabo) 와 웨이 (wei) 가수수료나프로토콜도입등과관련된기술적논의를위해사용될것으로기대된다. 나머지명칭들은, 지금당장은클라이언트에포함시키지않는다. 나머지명칭들 - shannon, babbage, lovelace 등이있다. 지금의암호화화폐가존재할수있도록기여한사람들을기리 기위해그들의이름을화폐 단위로사용하고있다. 화페발행모델 : BTC 당 1000-2000 개의가격으로이더를판매한다. Matercoin 이나 NXT 와같은다른암호화화폐 플랫폼에서성공적으로사용했던방법으로, 이더리움조직을금전적으로지원하고개발에필요한비용을댄다. 이시기에이더를구매하는구매자들은큰폭의할인을통해저렴하게이더를얻게된다. 이렇게모인자금은 전액, 개발자를위한월급과보상, 그리고여러가지의이더리움관련영리와비영리프로젝트를위한 투자금으로써사용된다. 판매된총이더 (60,102,216 ETH) 의 0.099 배만큼 (5,950,110) 의이더가신규발행되어, 이더리움런칭전의 초기기여자들과 이더로이미발생된비용에대한미지급금 을처리하기위해이더리움조직 (Ethereum organization) 에게분배된다. 또다른 0.099 배만큼의이더는장기보유금으로신규발행하여적립해둔다. 채굴시점이후부터영구히매년, 총판매수량 (60,102,216 ETH) 의 0.26 배만큼 (15,626,576) 씩을채굴자에게 신규발행해준다. 분류 런칭시 런칭 1 년후 런칭 5 년후 초기판매이더총량에대한배수 1.198 배 1.458 배 2.498 배 구매자 83.5% 68.6% 40.0% 런칭전발생한미지급금을위한보유금 (endowment pool) 8.26% 6.79% 3.96% 런칭후적립금 (endowment pool) 8.26% 6.79% 3.96% 채굴자채굴량 0% 17.8% 52.0% 26

이더장기공급성장률 (%) 매년신규발행량이일정함에도불구하고, 비트코인이그러한것처럼, 발행된총이더에대한신규이더의발행률은그 비중이 0 을향하여계속줄어들게된다. 위모델에서결정되어야할두가지선택이있다. (1) 하나는, 재단보유금 (endowment pool) 의존재유무와그규모이며, (2) 둘째는총발행코인량이정해져있는비트코인과는달리, 신규코인을끊임없이발행해야하는지의여부이다. 재단보유금 (endowment pool) 의정당성에대해서는다음과같이설명할수있다. 만일이러한보유금이없는상황이라면, 같은인플레이션율을유지하기위해서는연간발행량이 26% 가아닌, 21.7% 로줄어들어야한다. 그렇게되면이더의총량은 16.5% 줄어들게되며, 각이더의가치는 19.8% 증가하게된다. 이경우균형을위해서는 19.8% 의이더가더프리세일에서판매되어야한다. 그렇게되면각경우의이더가치는서로정확히동일해진다. 그렇게되면이더리움재단이 1.198 배의 BTC 를가지게되는데, 이를처음 BTC 액수 (1 배수 ) 와추가된 0.198 배수의 BTC 로나누어보면결국상황이동일해진다는점을알수있다. 그러나한가지차이점은이경우조직이가진것은이더가아닌 BTC 이므로, 이더의가치를높이기위한인센티브를얻지못한다는점이다. 여기서의정당성은개발금을네트워크에서지원여부문제라기보다는 ( 당연히지원하는것을전제하며 ), 프리세일때이더교환권을팔아서얻은 BTC 를쓰는것이나은지, 아니면처음부터이더로발행해서가지고있는것이나은지에대한문제이다. 금액상으로는차이가없으므로, 이더의형태로조금이라도더가지고있는편이동기부여에도움이된다는주장이다. 정해진양의이더를영구적으로신규발행하는모델 (permanent linear supply growth 공급성장률 = 신규발행이더량 / 기발 model) 은비트코인이겪고있는 부의집중현상 을완화시킬수있다. 또한현재또는행이더총량 *100 미래의참여자들이계속해서이더를시장이아닌채굴을통해얻을수있는기회를제공한다. 동시에, 공급성장률 (Supply Growth Rate) 은계속해서 0 을향해줄어들게된다. 이론적으로는다음의현상을예상해볼수있다. 시간이흐름에따라사용자들의부주의, 죽음등으로인해현실적으로일부의이더들이계속해서시장에서사라지게된다. 이렇게사라지는이더로인해점점줄어드는 시장유통가능이더총량 (the total currency supply in circulation) 은매년신규발행되는이더에의해균형을이루게된다 (ex. 만일총이더량이 26 배수 (1,562,657,616 ETH) 에달했고, 매년이중 1%(0.26 배수 ) 에해당하는이더가소실된다면, 이는매년새로이발행되는 0.26 배수의이더와균형을이루게된다 ). 27

장래에, 공급성장률을약 0 에서 0.05 배수이내 가되도록수정을하면서, POS 로채굴모델을변경할계획이있다. 만일, 이더리움재단 (Ethereum organization) 이보유금을모두잃거나, 또는여타의이유로사라지게되면, 사회적계약 (social contract) 을열어둘것이다. 이를통해, 이더발행량을최대 60102216 * (1.198 + 0.26 * n) 를넘지않도록만 (n 은첫블록생성이후의총년수 ) 지킨다면, 누구든지이더리움의 후속버전 (a future candidate version:rc 버전 ) 을만들수있을것이다. 이후속버전의창시자는개발 / 관리에필요한비용을충당하기위해서, 공개판매 (crowd-sell) 를하거나, 총가능이더발행량 과 POS 를통한공급량 간의차액중일부나전부를이용할수있을것이다. 만일어떠한창시자가이러한 사회적계약 (social contract) 에반하는내용을업데이트하게된다면, 결국대의에의해합당한 (compliant) 버전에서별개로포크되어 (forked) 나와탈락하게될것이다. 채굴중앙집중화 (Mining Centralization) POS 로전환되면, POS 가발행해야할신규코인수를프리세일량의 0.05 배수이내로줄이겠다는것이다. POS 전환이후의전체발행량의변화에대한분석은아직없다. 최종적인 POS 모델자체도아직정립되지않았다. POS 에의한채굴량때발행량이변경되면, 위에서이야기한균형등여러가지그림이재조정되어야할것으로보인다. 현재이더리움재단은 ' 비영리 (Nonprofit organizations)' 로활동중이다. 자세한내용은아래문서의 'Organizational Structure' 부분참조 : https://www.ethereum.org/pdfs/e thereum-dev-plan.pdf 비트코인채굴방식은, 목표값 ( 현재기준약 2 192 ) 보다낮은값이나올때까지, 블록헤더에대한 'SHA256 해싱 ' 작업을무한정반복하는것이다. 하지만해당방식에는두가지약점이존재한다. 첫번째는현재채굴참여에대한장벽이매우높아졌다는것이다. 현재채굴생태계는 ASIC( 특수목적을위해전용으로설계된반도체로, 범용반도체에비해성능이뛰어남 ) 에의해완전히잠식되었다. 이러한 ASIC 채굴기는일반 GPU 채굴기등에비해수천배이상의효율을가지는데, 따라서 ASIC 이아닌일반컴퓨터를통한일반사용자들의채굴행위는경쟁력에서밀려효용을잃게되었다. 과거의채굴행위가분권화되고이타적인참여자중심의 생태계 였다면, 현재는수십억원의투자가되어야만참여가가능한재력가들의 사업 으로변질되고말았다. 두번째는채굴방식이다. 이전처럼여러지역에서여러참여자가블록생성에참여하는것이아니라, 중앙집중화된채굴풀 (Mining pool) 이제공하는블록헤더 (block header) 에의존하여채굴에실제비트코인네트워크에직접연결참여한다는점이다. 이로인한부작용이상당한데, 현재기준으로는, 3 개채굴풀들이되어블록생성을하는노드의수는개인들의컴퓨팅파워를인계받아서무려 50% 에육박하는해시를간접적으로기하급수적으로줄어들고있다. 통제하고있다. 물론해당풀의점유율이 50% 를넘어가기전에개인들이다른소규모풀들로이동을할수있기때문에, 풀들이마음대로자원을남용할수는개인들이전체네크워크해시점유율을없겠지만, 이는여전히큰문제이다. 나눠가진것이아니라, 그해시를인계받은거대풀 (Pool) 소유주가그것이더리움의채굴방식은조금다르다. 각채굴자가상태정보 (the state) 에서무작위의을독점하고있기때문이다. 정보를가져와서, 무작위로선택된최근몇개의블록내역을해싱작업하고결과값을내놓는것이다. 이렇게하게되면두가지이점이있다. 28

첫번째는이더리움계약이모든종류의컴퓨터계산방식을포괄할수있다는점이다. 따라서자연히 ASIC 도모든 계산방식에적합하게설계되어야하는데, 이렇게되면결국 ASIC 이라기보다는일종의고성능 CPU 가되는셈이다. 즉현실적으로 ASIC( 주문형전용반도체 ) 자체가무용지물이된다. 두번째로, 채굴자들은작업시전체블록체인을다운받아모든이체내역을검증해야한다는점이다. 이렇게되면중앙집중화된대형풀이필요없게된다. 물론대형풀자체는신규블록생성보상을균일하게참여자들에게배분해주는효과가있긴하지만, 그러한효과는 P2P 형식의풀 (pool) 을통해서도충분히구현이가능하다. 굳이중앙집중형풀 (centralized pool) 방식을사용할필요가참여자개개인들이각자의노드를통해채없다. 굴을하는경우, 한블록당오직하나의노드만보상을받기때문에, 운이없다면물론위의채굴모델이아직검증된것은아니다. 또한 ASIC 장비에대한평생보상을받지못하는경우도생긴다. 저항성을높이는작업도, 이론처럼현실에서적용이될수있을지에대하여는이러한도박성을제거하기위해한개의의문의여지가있다. 하지만한가지확실한것은, 여러종류의수많은계약이노드가참여자들을대표해서컴퓨팅파워적용이되면, 이를모두포괄하는 ASIC 을예전처럼만들어내기는어렵다는를모으고채굴작업을하여이로인한보점이다. 또한어떠한종류의작업에특화된 ASIC 이존재한다면, 이에반하는상을기여도에따라균등히참여자들에게작업을요하는계약이생성되는것을원치않을것이다. 그러면해당배분함으로써, 해당작업에참여한모두가 ASIC 채굴자의경쟁자는그에적대적인, 즉비효율적인작업을요하는계약들을소량의안정적수익을얻을수있게해준생성해냄으로써공격을가할것이다. 즉, 각부분에특화된 ASIC 을소유한다. 연합채굴 (mining pool) 행위는블록생채굴자들은서로에게불리한작업을하게하는계약들을만들어냄으로써서로를성작업에대해균일성과예측성을제공함공격할것이다. 물론이러한방법은 기술적 인접근이라기보다는 경제학적으로써, 블록생성을단순한 ' 도박 ' 에서, 경인간행동론 에근거한접근에가깝다. 영이가능한 ' 사업 ' 으로바꾸어놓았다. 확장성 (Scalability) 이더리움에대한한가지공통된의문점은확장성부분이다. 비트코인과마찬가지로이더리움도모든이체작업이네크워크상의전체노드에의해서일일이검증및작업이되어야한다는약점이있다. 비트코인의경우, 현재전체블록체인의크기가약 15GB 에이르며, 그크기는매시간 1MB 씩꾸준히늘어나고있다. VISA 의경우초당 2,000 여건의이체작업을처리하는데, 이는매 3 초당 1MB 씩의확장 ( 시간당 1GB, 매년 8TB) 을의미한다. 이더리움도비슷한문제를겪을것이고, 단순히화폐로써의역할만하는비트코인에비한다면, 온갖종류의탈중앙화된어플리케이션들 (Dapps: Decentralized applications) 을포괄하는이더리움은이부분에서훨씬더많은문제를겪을수도있을것이다. 하지만한가지다른점은, 이더리움은 전체블록체인히스토리 가아닌, 단지 상태정보 (the state) 만가지고있으면된다는점이다. 즉처리 (process & verify) 할정보는더많아졌지만, 보관 (store) 할정보는더만일개개의모든노드가전체블록체인을보관해야한다면, 아래와같은문제가적어진다고할수있겠다. 생길수있다. 블록체인의크기가점점커져 100TB 에육박하게되었다고생각해보자. 이정도수준으로보관해야하는블록체인의크기가커지면, 오직라이트SPV- 이전의이체내역이나블소수의사업가나기업형태의참여자만이이를감당할수있게된다. 다수의일반록체인의총액균형이아닌, 실시간이사용자들은 라이트 SPV(Simple Payment Verification) 노드만들사용하게될체내역만을검증하는검증방식이다. 것이다. 이렇게되면, 전체블록체인의내역을가진소수의참여자들이결탁하여, 전체블록체인내역을보관할필요가장부내역을수정하거나블록보상량을바꿔치기하는등의조작행위가일어날수없으므로, 용량이상당히줄어든다는장점이있으나, 그만큼할수있는 29 기능에도제약이생긴다는단점이있다.

있을것이다. 단순한 라이트노드 (light node) 로써는이러한조작을감지할방법이없다. 물론 전체블록체인를소유한노드 (full node) 중에서도선의의참가자가있을지모른다. 그러나다수의 완전노드 (full node) 가작심하여블록체인조작을시도한다면, 이를발견하는시점에서는이미늦었다고봐야할것이다. 실제로비트코인이현재이와비슷한문제에처할위험이있다고경고받고있으며, 해당문제를완화시키는방법에대하여는 Peter Todd 에의해논의된바있다. 완전노드 (full node)- ' 전체노드 ' 를의미하는것이아니라, ' 탄생블록 (genesis block)' 에서부터 ' 최근블록 (current block)' 에이르는블록체인 ' 전체장부 ' 를가지고있는노드를가리킨다. 위의문제를해결키위해, 가까운시일안에두가지의전략을추가로도입할예정이다. 첫번째로이더리움도기본적으로블록체인기술을바탕으로한채굴알고리즘을사용하고있기때문에, 모든채굴자들은 완전노드 (full node) 가되도록의무화될것이며, 이는필요한최소한의완전노드숫자를확보할수있도록해줄것이다. 두번째로, 이체내역검증작업이후블록체인에 중간상태트리루트 (an intermediate state tree root) 를도입하는것이다. 이렇게되면, 아무리블록생성작업이소수의노드에집중되더라도, 단하나의 ' 선의의노드 (honest node)' 만존재한다면검증프로토콜 (verification protocol) 을통해이문제를해결할수있다. 만일어떠한채굴노드가전파한블록이검증오류 (invalid) 처리가되었다면, 해당블록의 구성 (format) 이맞지않거나 상태내역 S [ n ] 이틀린경우일것이다. S [ 0 ] 상태가옳은것으로간주되기때문에, S[ i-1 ] 이맞다면, S[ i ] 에오류가있는것이다. 검증작업에참여하는노드는, APPLY(S[i-1],TX[i]) -> S[i] 작업 (processing) 을하는 페트리샤트리노드의부분집합 (the subset of Patricia tree) 을통해 검증오류증명 (proof of invalidity) 과 인덱스 i 를제공한다. 노드들은, 위의노드들을이용해해당작업을수행하며, 생성한 S[ i ] 가제공받은 S[ i ] 와일치하지않음을발견하게된다. 또한 불완전한블록 (incomplete block) 을전파하려는악의의채굴노드들과관련된더욱정교한공격이이루어질수있다. 블록을검증하는데에필요한정보가온전히존재하지않을수도있다. 이경우, 질의-응답프로토콜 (challengeresponse protocol) 기법이사용될수있다. 검증노드가 목표블록의인덱스형태 (target transaction indices) 로 질문 (challenge) 을생성하고, 노드를수신하는전자여권, 보안카드등의인증기법에서라이트노드 (light node) 는해당블록 (challenge) 을일단검증오류블록으로취급한다. 흔히사용되는방법으로, 사실상웹싸이이후, 다른노드 ( 채굴노드이든검증노드이든 ) 가 페트리샤트리노드의부분집합트에로그인하기위한 ' 비밀번호 ' 도이 (the subset of Patricia tree) 을검증증명 (proof of validity) 으로써제공한다면, 기법의일종으로볼수있다. 그때서위의블록은검증된 ( 유효한 ) 것으로취급된다. 일정한질문에대해올바른답변을하는것으로신원을증명하며, 질문을예측불허하게계속바꿈으로써해킹시도를무력화시킨다. 다중비밀번호설정이결론 (Conclusion) 나, 보안카드가좋은예가될수있다. 이더리움프로토콜은본래매우범용적인프로그래밍언어를통해 블록체인상에스크로나인출한도설정, 금전계약, 도박시장등의고급기능 을제공하는, 가상화폐의업그레이드버전으로구상되었다. 이더리움프로토콜은이러한어플리케이션들을직접적으로제공하는것이아니라, 튜링완전언어 (Turing-complete programming language) 를통해이론적으로거의모든형태의이체방식이나어플리케이션을만들어낼수있도록지원한다. 더욱흥미로운점은, 이더리움은단순한 화폐 의차원을훨씬뛰어넘는다는점이다. 분산저장공간 (DFS:decentralized file storage) 이나, 분산컴퓨팅, 분산예측시장 (decentralized prediction market) 프로토콜등은사실수많은일종의 P2P로구현되는응용개념들중일부에불과하다. 이러한새로운개념들은컴퓨팅산업의효율성을폭발적으로금융파생상품시장높일수있는잠재력이있으며, P2P 프로토콜에처음으로 경제적인차원 (economic layer) 을 30

입힘으로써엄청난혁신을가져올수있을것이다. 마지막으로, 컴퓨팅이나금융과관련이없는분야들에서도다양한 어플리케이션들이나올것이다. 이더리움프로토콜이제공하는 임의상태변환 (arbitrary state transition function) 이라는개념은고유의잠재력을지닌플랫폼을탄생시킨다. 기존의자료저장공간이나도박, 금융등의하나의목적에특화된폐쇠형구조 (close-ended) 와는달리, 이더리움은자유롭게조정이가능한구조 (open-ended) 이다. 우리는이것이몇년이내에, 금융부문이든비금융부문이든엄청나게많은종류의서비스를설계할수있도록돕는것에특화된기반이될것이라고믿는다. 주석 1. 관찰력이좋은독자라면, 비트코인주소는 공개키 (public key) 가아니라, 타원곡선공개키의해시 (the hash of the elliptic curve public key) 로이루어져있다는것은눈치챘을것이다. 물론, 암호학적관점에서보자면 공개키해시 (public key hash) 로부르든단순히 공개키 (public key) 로부르든차이는없다. 왜냐하면, 비트코인암호기법 자체가 일종의맞춤형전자서명알고리즘 이고, 이알고리즘에서는공개키가 타원곡선공개키의해시 (the hash of the Elliptic Curve public key) 를포함하고있고, 여기서의 서명 (signature) 은 타원곡선서명 (ECC signature) 과연결된 타원곡선공개키 (ECC public key) 로구성되어있기때문이다. 또한 검증알고리즘 은서명 (signature) 안의 타원곡선공개키 (ECC public key) 를, 공개키로써제공된 타원곡선공개키해시 (the hash of the elliptic curve public key) 와대조확인하고, 또한 서명 을 타원곡선공개키 (ECC public key) 와대조하여검증하는것이기때문이다. 2. 기술적으로는, 이전 11 개블록의중간값 (median) 이다. 3. 내부적으로는 2 와 CHARLIE 모두숫자이다. 다만 CHARLIE 는 빅엔디언 (big-endian) 기반의 256 비트로표시한것이다. 숫자는 0 부터 2 256-1 까지사용한다. 31

참고문헌과추가자료 1. Intrinsic value: http://bitcoinmagazine.com/8640/an-exploration-of-intrinsic-value-what-it-is-whybitcoin-doesnt-have-it-and-why-bitcoin-does-have-it/ 2. Smart property: https://en.bitcoin.it/wiki/smart_property 3. Smart contracts: https://en.bitcoin.it/wiki/contracts 4. B-money: http://www.weidai.com/bmoney.txt 5. Reusable proofs of work: http://www.finney.org/~hal/rpow/ 6. Secure property titles with owner authority: http://szabo.best.vwh.net/securetitle.html 7. Bitcoin whitepaper: http://bitcoin.org/bitcoin.pdf 8. Namecoin: https://namecoin.org/ 9. Zooko's triangle: http://en.wikipedia.org/wiki/zooko's_triangle 10. Colored coins whitepaper: https://docs.google.com/a/buterin.com/document/d/1ankp_cvztcmlizw4dvsw6m8q2jc0lizrtluowu2z1 BE/edit 11. Mastercoin whitepaper: https://github.com/mastercoin-msc/spec 12. Decentralized autonomous corporations, Bitcoin Magazine:http://bitcoinmagazine.com/7050/bootstrappinga-decentralized-autonomous-corporation-part-i/ 13. Simplified payment verification:https://en.bitcoin.it/wiki/scalability#simplifiedpaymentverification 14. Merkle trees: http://en.wikipedia.org/wiki/merkle_tree 15. Patricia trees: http://en.wikipedia.org/wiki/patricia_tree 16. GHOST: http://www.cs.huji.ac.il/~avivz/pubs/13/btc_scalability_full.pdf 17. StorJ and Autonomous Agents, Jeff Garzik: http://garzikrants.blogspot.ca/2013/01/storj-and-bitcoinautonomous-agents.html 18. Mike Hearn on Smart Property at Turing Festival: http://www.youtube.com/watch?v=pu4pamfpo5y 19. Ethereum RLP: https://github.com/ethereum/wiki/wiki/%5benglish%5d-rlp 20. Ethereum Merkle Patricia trees:https://github.com/ethereum/wiki/wiki/%5benglish%5d-patricia-tree 21. Peter Todd on Merkle sum trees:http://sourceforge.net/p/bitcoin/mailman/message/31709140/ 32

ETHEREUM KOREA EtherKorea@Gmail.com Meet-up 33