# 39 - 이더리움 백서(8편)

in #kr2 years ago (edited)


43_1.png


안녕하세요. 어미새입니다.


이더리움 백서를 쉽게 이해할 수 있도록 풀어서 설명하는 연재물을 작성하고 있습니다. 어느덧 백서의 중반부를 향해 달려가고 있습니다. 혹시 지난 포스팅을 읽지 못하셨던분들은 먼저 아래의 포스팅을 읽어보시는것을 추천드립니다.



Remind

이더리움 블록체인은 여러면에서 비트코인 블록체인과 비슷합니다. 이더리움의 블록체인의 가장 큰 차이점은 블록에 더 많은 정보를 담을 수 있는 점이며, 비트코인의 블록체인과 달리 블록에 트랜잭션 리스트와 가장 최신의 상태(state) 복사본을 가지고 있다는 점이며, 추가로 블록 넘버와, difficulty 정보 또한 블록내에 저장됩니다.

블록의 유효성 검증 과정에서도 비트코인의 경우 타임 스탬프 값이 2시간 이내인지 확인했지만, 이더리움에서는 15분 이내인지 확인하는 과정이 있었습니다. 이 의미는 블록의 평균 생성 시간이 비트코인 보다 훨씬 빠르다는것을 의미하며, 이더리움에서는 모든 상태를 각 블록에 저장해야 하기 때문에 비효율적인것처럼 보일 수 있지만, 상태가 트리 구조로 저장되고, 모든 블록 뒤에 트리의 작은 부분만이 변경되기 때문에 효율성 측면에서는 비트코인과 비슷한 수준이지만 더 많은 기능을 수행할 수 있다는 내용을 말하고 싶었던것 같습니다.

이더리움을 통해 개발 가능한 어플리케이션은 크게 3가지 카테고리로 분류할 수 있습니다. 세 가지 분류는 금융, 준 금융, 비 금융 어플리케이션으로 나눌수 있으며, 이더리움에서의 토큰 시스템에 대한 이야기로 시작되었습니다.


지난 7편에 이어서 어플리케이션 파트의 내용을 이어가도록 하겠습니다.


금융 파생상품 및 가치안정통화


파생상품은 "스마트 컨트랙트"의 가장 일반적인 형태의 어플리케이션이며, 코드로 실행할 수 있는 가장 간단한 형태의 어플리케이션 중 하나입니다.

금융 컨트랙트를 실행하는데 가장 주된 어려움은 계약에서 규정하는 자산에 대한 시세를 외부에서 참조해야 한다는 것입니다. 예를 들어 이더 혹은 기타 가상화폐와 USD의 변동성에 대해 헷지(hedge)하는 어플리케이션이 있을 경우, 이 헷지 컨트랙트를 실행하기 위해서는 ETH/USD의 환율을 제공 하는 컨트랙트가 필요합니다. 환율을 제공 받기 위한 가장 쉬운 방법은 주식시장의 NSDAQ와 같은 제 3자가 실시간으로 제공하는 "데이터 필드" 컨트랙트를 통해 제공받을 수 있으며, 환율 정보는 필요할때마다 업데이트 할 수 있어야합니다. 또한 여타 컨트랙트들과 환율에 대한 메시지를 주고 받을 수 있는 인터페이스를 제공할 수 있어야합니다.


이더리움 백서 4편에서 UTXO의 한계점에 대한 언급을 하는 과정에서 헷지 컨트랙트에 관한 내용을 다룬적이 있습니다. 이해를 돕기 위해 4편의 내용을 잠시 가져와보겠습니다.



이더리움 백서 4편에서 언급된 Value-blindness

비트코인의 UTXO 스크립트만으로 인출 액수를 세밀하게 통제할 방법이 없습니다. 신탁 계약의 강력한 실용 사례라 할 수 있는 헷지 계약으로 예를 들어보겠습니다. 만약 A와 B가 $1000의 금액만큼의 BTC를 공동 계좌에 입금하고, 30일 후 BTC의 가격이 상승하게될 경우 자동으로 A에게는 원금인 $1000의 금액에 해당하는 BTC를 돌려 받고, B에게는 이익금인 공동계좌의 나머지 잔금을 입금 받을 수 있는 그런 계약을 맺고 싶다고 가정해보겠습니다.

이러한 계약에는 1 BTC가 미국 달러로 얼마인지 정해줄 제 3자가 필요합니다. 하지만 이런 계약이 실현 가능하다면 지금 현존 하는 중앙 집권적인 금융 시스템 아래에서도 고도로 발전된 계약 형태라고 볼 수 있을 것입니다. 현재 비트코인의 UTXO는 인출액 전부가 송금되거나, 말거나 밖에 선택할 수 없으며, 즉 세부 작은 단위로 나눠질 가능성을 포함할 수 없다는 의미입니다.

앞선 헷지 계약의 거래를 실행할 유일한 방법은 UTXO의 액면가 단위를 아주 다양하게 양산하고 (예를 들어 1부터 30까지의 모든 자연수 k에 대해 2의 k승의 1 UTXO를 만듦) A가 B에게 이중에서 필요한 금액에 맞는 것을 선택해서 보내게 하는 방식과 같이 매우 비효율적인 편법을 사용하는 길 뿐입니다.



이더리움에서 헷지 컨트랙트는 아래와 같은 구조를 가지게될것이라고 명시되어있습니다.


  1. A가 1000 이더를 입금할 때까지 기다린다
  2. B가 1000 이더를 입금할 때까지 기다린다
  3. 입금된 이더의 달러가치를 계산하기 위해 환율 Data feed 컨트랙트로 쿼리를 보냄으로써 가치를 계산하고, 계산된 데이터를 $X라고 가정 한다.
  4. 30일 이후, 당시의 환율을 적용한 금액을 계산하여 A에게는 $X를 송금하고, 당시 총금액에 나머지를 B에게 송금하도록 A 또는 B가 컨트랙트를 활성화 시킨다.


위와 같은 컨트랙트를 통해 가상화통화를 이용한 상거래의 발전 가능성을 제시할 수 있습니다.


다수의 유저들과 상인들은 가상화폐 혹은 블록체인 자산이 제공하는 보안성과 편의성에 대한 니즈가 있지만, 단 하루만에 자산가치가 23% 하락할지도 모른다는 리스크는 피하고 싶어하기마련입니다. 즉 가상화폐의 높은 변동성은 가상화폐 상거래 활성의 장애물이 될 수 있습니다.

이 문제에 대한 지금까지의 가장 보편적인 솔루션(문제 해결 방법)은 자산 발행자가 자산에 대한 보증을 서는 것입니다. 이는 곧, 발행자가 하위 화폐를 만들어서 그를 통해서 통화량을 조절할 수 있는 권한을 갖고, 누군가가 일정 단위의 하위 화폐를 지불하였을 때 그에 상응하는 예를들어 USD 혹은 금과같은 특정한 베이스 자산으로 교환해주는 방식을 의미합니다.

이방식을 본 사례에 적용한다면, 가상화폐 발행자는 가상화폐를 지불하는 자에게 그에 상응하는 베이스 자산을 제공할 것이라고 공개적으로 약속하는 것입니다. 이 메커니즘은 비(非)가상화폐 혹은 비(非)디지털자산을 블록체인 자산화(化) 시키는 결과를 낳습니다. 단 가상화폐 발행자를 신뢰할 수 있다면 말입니다. 하지만 현실적으로 자산 발행인을 언제나 신뢰 할 수 없으며, 몇몇 사례를 보면, 우리의 금융 인프라는 자산 보증 서비스가 존재하기에 너무 취약하거나, 때로는 적대적이기도합니다.

파생상품은 이에 대한 대안을 제공해주며, 여기서 자산을 보증하기 위한 펀드를 제공하는 역할을 하나의 자산 발행자가 하는 것이 아니라 예를 들어 이더와 같은 암호화 담보자산(crytographic references 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)


이러한 문제점은 이더리움의 컨트랙트를 통해 해소할 수 있으며, 이더리움의 컨트랙트는 분산형 파일 저장소 생태계를 발전시킬 수 있습니다. 유저 개개인은 본인의 하드드라이브를 대여해주는 대가로 소액의 돈을 받을 수 있으며 남은 하드디스크 공가은 파일 저장의 비용을 더욱 낮추는 결과를 낳을 것입니다. 분산형 파일 저장소의 핵심 기반은 소위 "분산형 드롭박스 컨트랙트"가 될 것입니다. 분산형 컨트랙트는 다음과 같이 작동할 수 있습니다.

  1. 유저가 업로드하려는 데이터를 블록으로 잘라낸다.
  2. 프라이버시를 위해 해당 데이터를 암호하 시킨다.
  3. 그 데이터로 머클트리를 만든다.
  4. N개의 블록마다 컨트랙트 코드로 접근 가능한 전 블록의 해쉬에 기반하여 무작위 방식으로 머클트리 인덱스를 뽑는다.
  5. 유저가 올린 파일에 해당 트리의 특정 인덱스에 대하여, 해당 데이터를 저장해주겠다는 첫 주체에게 x 이더를 지불한다.


파일을 올린 유저가 다시 자신의 파일을 다운로드 하고 싶을 때에는, 소액결제 채널 프로토콜을 사용해서 파일을 복원할 수 있으며, 수수료 측면에서 가장 효율적인 접근 방법은 파일을 업로드한 유저가 저장이 끝나는 마지막까지 파일에 대한 트랜잭션을 공표하지 않고, 매 32 킬로바이트 마다 동일한 nonce를 갖고 있는 보다 수익성 있는 트랜잭션으로 바꿔주는 방법이 있습니다.

이러한 방식의 파일 업로드는 다수의 랜덤한 노드들이 나의 파일을 계속 저장하고 있을 것이라고 믿어야 한다는 전제처럼 보이지만, 실제로는 업로드한 파일을 수 많은 암호화된 조각으로 잘라내서 여러 노드들과 공유하고 또 컨트랙트를 통해서 외부 노드들이 내가 올린 파일을 저장하고 있다는 것을 모니터링함으로써 내가 올린 파일에 대한 분실 혹은 제 3자에의한 도용이라는 리스크를 거의 0에 가깝게 줄일 수 있습니다. 이러한 방식이 분산형 드롭박스 컨트랙트의 중요한 특징이 되겠습니다.


마무리


지난 7편에 이어서 8편에서도 이더리움을 활용한 Dapp의 구성 방식에 대한 이야기가 이어졌습니다. 이더리움을 통한 헷지 컨트랙트, 네임코인과 같은 명의 등록 시스템 그리고 분산형 파일 저장 시스템 등 다양한 탈 중앙화된 어플리케이션 제작의 가능성에 대해서 언급했던것 같습니다.

개인적으로는 분산형 파일 저장소에 대한 개념이 흥미로웠으며, 월 정액 이용료가 결국 하드 드라이브 이용료 보다 비쌀 수 있다는 생각, 그리고 개인이 저장을 해줌으로써 어떤 이익음이 생길 수 있다는 생각이 참 좋았습니다. 이러한 부분은 더 많은 아이디어를 발생시킬 수 있는 좋은 자극일것 같다는 생각도 들었습니다.

다음 이더리움 9편에서는 DAO, 즉 탈중앙화된 자율조직 및 추가적인 어플리케이션들에 대한 내용을 다룰 예정입니다. 이제 정말 이더리움 백서의 끝을 향해 달려가고 있는것 같습니다. 조금만 더 힘을 내야겠습니다! (읽는 사람도 조금만 더 힘을 내주세요!)


이상 긴 글 읽어주셔서 감사합니다!(보팅, 리스팀, 팔로워는 제게 큰 힘이됩니다!)


혹시나 이더리움 백서를 먼저 읽고 싶으신분은 아래의 링크를 통해 이더리움 백서를 먼저 확인해보시는것도 좋을것 같습니다.



[참고문헌]


https://github.com/ethereum/wiki/wiki/%5BKorean%5D-White-Paper#%EC%83%81%ED%83%9C%EB%B3%80%ED%99%98%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9C%BC%EB%A1%9C%EC%84%9C%EC%9D%98-%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8bitcoin-as-a-state-transition-system

https://github.com/ethereum/wiki/wiki/White-Paper

[다음편보기]

Sort:  

백서를 다 읽어본적이 없는데 좋은 공부가 되겠습니다 감사합니다

백서의 내용을 나눠서 진행하고 있으니, 시간나실때 한편식 읽어보시면 좋을것 같습니다~! 즐거운 주말 보내세요 ~😄

우어 며칠 못 뵈었더니 글이 쌓였네요..
내일은 카페 가서 놓친 글들 정독이나 해야겠어요.ㅎ
정말 수고 많으십니다!!
예전에 이런 글 하나 쓸려면 넘 오래 걸려서 글 쓰면 완전 녹초가 되곤 했었는데..매일 이렇게 올리시다니..대단하셔요 ^^

방문해주셔서 감사합니다!
댓글 덕분에 아주 힘이납니다~!!
주말 잘 보내시고~ 시간되실때 읽어보시면 좋을것 같습니다~:)

!!! 힘찬 하루 보내요!