블록체인

블록체인은 관리 대상 데이터를 '블록'이라고 하는 소규모 데이터들이 P2P방식을 기반으로 생성된 체인 형태의 연결고리 기반 분산 데이터 저장환경에 저장되어 누구도 임의로 수정될 수 없고 누구나 변경의 결과를 열람할 수 있는 분산 컴퓨팅 기술 기반의 데이터 위변조 방지 기술이다. 이는 근본적으로 분산 데이터 저장기술의 한 형태로, 지속적으로 변경되는 데이터를 모든 참여 노드에 기록한 변경 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가능하도록 고안되었다. 잘 알려진 블록체인의 응용 사례는 암호화폐의 거래과정을 기록하는 탈중앙화된 전자장부로서 비트코인이 있다. 이 거래 기록은 의무적으로 암호화되고 블록체인 소프트웨어를 실행하는 컴퓨터상에서 운영된다. 비트코인을 비롯한 대부분의 암호화폐들이 블록체인 기술 형태에 기반하고 있다.

최근 JTBC에서 암호화폐를 주제로 토론을 진행했다. 진행 중, 정재승 교수측의 "암호화폐와 블록체인은 분리하는 것은 어렵다"와 유시민 작가의 "암호화폐와 블록체인을 분리하여 블록체인기술 육성이 가능하다" 라는 의견이 대립했다. 과연 블록체인만을 가져와서 따로 기술육성하는 것이 가능할까?


블록체인은 퍼블릭 블록체인, 프라이빗 블록체인, 컨소시엄 블록체인 이렇게  3가지로 나눌 수 있다.


퍼블릭 블록체인 :  누구든지 열람이 가능한 공개된 장부 개념의 블록체인으로 채굴자들의 해쉬파워(컴퓨팅 파워)로 검증 및 트랜젝션이 이루어 진다. 개인이나 한 단체가 통제하기 힘들기때문에 탈중앙화, 분권화된 시스템이다.


프라이빗 블록체인 : 개인이나 단체가 모든 권한을 가진 형태의 블록체인으로 다른 노드가 네트워크에 참여하기 위해서는 별도의 허락이 요구된다.


컨소시엄 블록체인 : 미리 선정된 노드들에 의해서 장부가 검증되는 반 중앙형 블록체인이다. 블록체인 열람 권한을 공개할 수 도 있고 선택에 따라 비공개 할 수 도 있다. 주로 금융과 관련된 암호화폐(Ripple 등)에 적용된다.

퍼블릭 블록체인의 경우 채굴자들이 참여하여 각 트랜젝션들을 검증하고 수행되도록 한다. 이 과정에서 많은 양의 컴퓨팅 파워가 필요로 하게 되는데, 이에 따른 보상으로 암호토큰을 지급하게 된다.(그 누구도 보상없이 이런 행위를 하지 않기 때문이다.) 따라서, 퍼블릭 블록체인을 사용하게 되면 암호화폐의 개념을 분리하기 힘들어진다.

토론에서 언급된 한교수의 인공지능 차량에 블록체인을 접목한 예시는 프라이빗 블록체인이나 컨소시엄 블록체인과 같은 폐쇄형을 말하는 것 같다. 폐쇄형 블록체인의 경우 암호화폐가 필수적이지 않다.



JTBC 동영상 링크: https://www.youtube.com/watch?v=GfaQgl50Mv4





이더리움(Ethereum)

이더리움은 2015년 7월 30일 비탈릭 부테린(Vitalik Buterin)이 개발하였다. 비탈릭 부테린은 가상화폐인 비트코인에 사용된 핵심 기술인 블록체인 화폐 거래 기록뿐 아니라 계약서 등의 추가 정보를 기록할 수 있다는 점에 착안하여, 전 세계 수많은 사용자들이 보유하고 있는 컴퓨팅 자원을 활용해 분산 네트워크를 구성하고, 이 플랫폼을 이용하여 SNS, 이메일, 전자투표 등 다양한 정보를 기록하는 시스템을 창안했다. 이더리움은 C++, 자바, 파이썬, GO 등 주요 프로그래밍 언어를 지원한다.-위키백과

비트코인은 결제나 화폐의 용도에 집중하는 반면, 이더리움은 결제뿐만 아니라 계약, SNS, 이메일, 투표 등 다양한 애플리케이션을 블록체인 위에서 운영할 수 있도록 한다. 이더리움 위에서 동작하는 앱을 DApp(디앱)이라 부른다.

그렇다면 이런 다양한 DApp들은 이더리움 위에서 어떻게 동작할까?


이더리움 창시자 비탈릭 부테린


바로 스마트 계약(Smart Contract)를 통해 동작하게 된다. 가령 우리는 축구경기의 내기에서 패한사람이 '나는 내기를 한 적이 없어' 라고 부인 할 수 있다. 그래서 우리는 제 3자인 중계인을 이용하게 된다. 이더리움은 이 제 3자인 중계인 역할을 대체하고자 한다. 이더리움을 이용하면, '내일 아스널이 축구경이에서 이기면 A가 B에게 500원을 이체 한다.' 가 중계인 없이 가능하게 된다.

이더리움은 비트코인의 블록체인 구조를 응용하였고 이를 통해 스마트 계약을 가능하게 했다.

이더리움의 트랜젝션에는 다음과 같은 값들을 포함하고 있다.


*메시지 수신처
*발신처를 확인할 수 있는 서명
*발신처가 수신처로 보내는 이더의 양
*선택적(optional) 데이터 필드
*STARTGAS 값: 트랜젝션 실행이 수행되도록 허용된 최대 계산 단계수
*GASPRICE 값: 매 계산단계마다 발신처가 지불하는 수수료

처음 세 개의 값들은 코인들이 보통 가지는 값들이다. 네 번째에 있는 데이터 필드에는 컨트랙트가 수행할 코드를 가지고 있다.  DApp 개발자는 의뢰인으로 부터 트랜젝션 요청이 들어오고 이를 처리할 내용을 작성하여 데이터 필드에 넣게 된다. 위 의 예로 들면 '아스널이 경기에서 이겼는지 확인하고 조건부에 따라 돈을 이체한다.'는 코드가 이 곳에 들어가게 된다.


이때, 데이터 필드의 코드에 잘못된 코드나 무한루프에 빠질 수 있는 코드에 대비하여 다섯 번째의 STARTGAS라는 값이 필요하게 된다. 코드에서 한 계산당 1gas가 사용되는데, STARTGAS는 사용가능한 gas의 수를 의미하고 이를 통해 계산 낭비를 방지한다.



이더리움은 APPLY( )라는 상태 전이 함수를 통해 트랜젝션을 검증하고 수행한다.

APPLY(S, TX) -> S`

컨트렉트 코드 전부 gas가 소모될 때까지 수행하는데, gas가 도중에 부족하다면 수수료 지불을 제외하고 모두 원상태로 되돌린다. 이 때, 수수료는 채굴자가 가져가게 된다. 코드를 수행하고 남은 gas는 다시 발신처에 되돌려준다. 이더리움의 트랜젝션이 오류를 반환할 경우는 다음과 같다. 트랜젝션 형식, 서명, 발신처의 Nonce 일치에 문제가 있다면 오류를 반환한다. 또한 발신처의 잔고가 부족할 때 오류를 반환한다.

채굴 알고리즘도 비트코인과는 조금 다르다. 비트코인은 SHA-256 기반의 채굴방식인 반면, 이더리움은 Ethash 알고리즘을 사용하는데, 이는 무작위로 선택 된 최근 몇 개의 블록내역을 해싱작업하고 결과 값을 내놓는 것이다. 기존 비트코인의 채굴방식의 문제점인 'ASIC에 의한 채굴 장벽'을 낮추기 위해 고안되었다.


출처 및 참고자료: Ethereum white paper



+ Recent posts