블록장생조

cdc wiki
블록장생조 (토론 | 기여)님의 2018년 12월 20일 (목) 23:49 판 (구성원 및 추진체계)
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

이더리움 private network를 이용한 카드 결제 승인 시스템

과제 팀명

블록장생

지도교수

김민호 교수님

개발기간

2018년 11월 ~ 2018년 12월 (총 2개월)

구성원 소개

서울시립대학교 컴퓨터과학부 2013920048 이*진(팀장)

서울시립대학교 컴퓨터과학부 2013920046 이*열

서울시립대학교 컴퓨터과학부 2014920051 전*진

서론

개발 과제의 개요

개발 과제 요약

이더리움의 Smart Contract를 private버전으로 구축해 카드결제 정보 관리하기

모든 프로세스와 in/out data storage를 블록체인 시스템으로 구현한다.

개발 과제의 배경 및 지식

◇ 블록체인 블록체인이란 블록에 데이터를 담아 체인 형태로 연결, 수많은 컴퓨터에 동시에 이를 복제해 저장하는 분산형 데이터 저장 기술이다. 공공 거래 장부라고도 부른다. 중앙 집중형 서버에 거래 기록을 보관하지 않고 거래에 참여하는 모든 사용자에게 거래 내역을 보내 주며, 거래 때마다 모든 거래 참여자들이 정보를 공유하고 이를 대조해 데이터 위조나 변조를 할 수 없도록 돼 있다. 우리는 이 블록체인 기술을 카드 거래관리에 적용해 신뢰성을 높이고자 하였다.

◇ 스마트 계약 스마트 계약(Smart contract)은 프로그래밍된 조건이 모두 충족되면 자동으로 계약을 이행하는 ‘자동화 계약’ 시스템이다. 기존에는 계약이 체결되고 이행되기까지 수많은 문서가 필요했다면 스마트 계약은 계약 조건을 컴퓨터 코드로 지정해두고 조건이 맞으면 계약을 이행하는 방식이다. 스마트 계약을 통해 사람들은 부동산, 주식 등 다양한 것을 거래할 수 있고 제3자 없는 당사자간 거래가 가능하다.

◇ 솔리디티(Solidity) 솔리디티(Solidity)는 프로그래머들이 사용하는 C와 Java 언어 같은 개발 언어들처럼 이더리움 블록체인의 '스마트 계약' 을 구축하는데 쓰이는 개발 언어이고, Javascript 문법과 유사하다. 솔리디티 코드는 컨트랙트 안에 싸여 있다. 컨트랙트는 이더리움 애플리케이션의 기본적인 구성 요소로, 모든 변수와 함수는 어느 한 컨트랙트에 속한다. 컨트랙트는 모든 프로젝트의 시작 지점이라고 할 수 있다.


다. public 블록체인 vs private 블록체인

◇ 블록체인은 크게 퍼블릭 블록체인, 프라이빗 블록체인, 컨소시움 블록체인 세가지로 분류할 수 있다.

- 퍼블릭 블록체인(Public Blockchain): 비트코인, 이더리움과 같은 누구나 네트워크에 참여할 수 있는 블록체인
- 프라이빗 블록체인(Private Blockchain): 하나의 기관에서 독자적으로 사용하는 블록체인
- 컨소시움 블록체인(Consortium Blockchain): 여러 기관들이 컨소시움을 이뤄 구성하는 블록체인, 허가된 기관만 네트워크에 참여할 수 있다.

(출처 : MEDIASK)


현재 거래소에서 거래되는 대다수의 블록체인은 퍼블릭 블록체인으로 누구나 블록체인 네트워크에 참여할 수 있고 모든 내역을 볼 수 있고 누구나 트랜잭션 내역 검증할 수 있다. 프라이빗 블록체인이나 컨소시움 블록체인은 참여자가 제한된 블록체인으로 내부 망을 구축하거나 별도의 인증 방식을 통해 참여가 제한된 블록체인을 말한다.

◇ 퍼블릭 블록체인 vs 프라이빗 블록체인 퍼블릭 블록체인과 프라이빗 블록체인은 서비스가 다르고 운영환경이 다르기 때문에 요구사항이 다르다. 특히 퍼블릭 블록체인은 누구나 참여할 수 있고 모든 사람이 운영하기 때문에 운영 주체가 불분명하고 독자적인 화폐를 통해 금융활동을 하기 때문에 법적 구속력에 상대적으로 자유로울 수 있다. 그러나 프라이빗(컨소시움) 블록체인은 운영 주체가 명확하고 새로운 금융거래를 하는 것이 아닌 기존에 있던 금융 거래를 하는 것이기 때문에 모든 금융 관련 법과 규제사항을 준수해야 한다.

현존 퍼블릭 블록체인은 읽기, 트랜잭션 생성을 누구나 할 수 있다. 모든 사용자들은 모든 데이터를 확인할 수 있다. 그러나 기관 간 블록체인의 경우 어플리케이션에 따라 개인의 금융정보가 담긴 데이터가 네트워크 상으로 오고 갈 수 있기 때문에 모두에게 데이터가 공개되면 안된다. 또한 법적으로 책임 질수 있는 기관만 트랜잭션을 생성할 수 있어야 한다. 모두가 트랜잭션을 생성할 수 있다면 금융사고가 일어났을 때 책임 주체가 불분명해 질 수 있다.

또한 트랜잭션 검증 요구사항에도 차이가 있다. 퍼블릭 블록체인의 경우 트랜잭션 내역 모두에게 공개 되며 네트워크에 참여한 모든 노드가 트랜잭션을 검증한다. 그러나 프라이빗(컨소시움) 블록체인에서 이해관계자가 아닌 모든 노드가 트랜잭션의 검증하는 것은 문제가 있을 수 있다.. 또한 노드별로 권한을 다르게 하는 것 또한 퍼블릭 블록체인에서는 불가능 하다. 감독기관은 모든 데이터를 검증해야 되고 나머지 기관들은 자신에 관련된 데이터를 검증하는 등의 역할을 할 수 없다. 또한 퍼블릭 블록체인은 블록체인 엔진 수정이 어렵기 때문에 엔진에서 제공해야만 가능한 기능들을 추가하는 것이 매우 어렵다.

◇ 퍼블릭 블록체인의 한계 퍼블릭 블록체인은 참여가 자유롭다. 즉 인증되지 않은 참여자도 악의적인 목적을 가진 해커도 퍼블릭 블록체인에 접근할 수 있다. 이런 조건에서 악의적인 네트워크 참여자의 공격에 방어하면서 또한 세계 각지에 있는 모든 노드들이 같은 데이터를 공유해야한다. 퍼블릭 블록체인은 이런 요구사항을 만족 시켜야하기 때문에 성능 면에서 많은 것을 포기했다.

퍼블릭 블록체인은 기본적으로 누구나 블록 후보를 만들어 제출하고 분산합의를 통해 하나의 블록을 선정하여 신뢰할 수 있는 블록으로 인정받는 구조다. 따라서 인터넷 상에서 블록을 공유해야하는 시간이 있고 너무 많은 블록이 동시에 만들어 지면 하나의 블록을 선택하기 어렵기 때문에 블록 생성시간에 제한을 두고 있다. 비트코인의 경우 약 10분마다 하나의 블록을 생성하고 이더리움의 경우 약 12초 마다 하나의 블록을 생성한다. 네트워크에 공유되는 시간을 고려했을 때 이더리움에서 내가 보낸 트랜잭션 결과를 확인하려면 약 1~2분 정도 기다려야 한다. R3에 제출한 이더리움 보고서에 따르면 현 이더리움의 TPS(Transaction Per Second)는 약 10tps이고 비트코인의 경우 약 7tps이다. 즉각적인 처리가 필요한 금융권 서비스에는 그대로 적용하기에는 불가능한 수준이다.

또한 퍼블릭 블록체인에서 채택하고 있는 분산합의 알고리즘으로 작업증명(Proof of Work, PoW)이나 지분증명(Proof of Stake, PoS)을 사용하려면 내부 화폐가 필요하다. 퍼블릭 블록체인에서의 분산합의 목표는 결국 거래 내역을 검증하여 신뢰할 수 있는 블록을 만들 수 있는 노드를 선택하는 것이고 이러한 수고를 하는 대가가 필요하기 때문이다. 채굴(mining)이라고 알려진 과정이 이러한 과정이다. 또한 작업 증명의 경우는 쓸모없는 컴퓨팅 파워를 많이 사용하는 친환경이지 않은 문제도 있다.

◇ 사이드 체인 사이드 체인은 기존 비트코인 블록체인을 확장하기 위해서 나온 개념이다. 기존 비트코인 블록체인은 비트코인만 거래할 수 있을 뿐 다른 용도로 사용하기에는 한계가 있었다. 사이드 체인은 블록체인에 저장되는 데이터가 조작 불가능하다는 것에 초점을 맞췄다. 비트코인 외의 다양한 거래를 수행하고 그 거래에 대한 증거 데이터를 블록체인에 저장하는 방식으로 거래를 수행하였다.

◇ 퍼블릭 블록체인 구현체 최근에는 비트코인 혹은 이더리움(Ethereum)의 구현체를 그대로 활용하려는 시도들도 있었다. Github에 공개 되어있는 구현체를 다운 받아 IP와 Port 변경을 통해 독자 네트워크를 구성하여 프라이빗 블록체인을 구성하는 것이다. 이럴 경우 많은 개발 비용이 들지 않고 쉽게 검증된 블록체인을 생성할 수 있지만, 이런 퍼블릭 블록체인 구현체를 재활용 하는 것은 한계가 있다. 퍼블릭 블록체인은 구현체의 속도 보다는 공개된 장소에서 안정성 있는 블록체인을 만든다는 것에 초점을 두고 개발한 블록체인이다.

이더리움의 모든 스마트 컨트랙트는 EVM(Ethereum Virtual Machine)위에서 동작한다. 이더리움에서는 EVM을 통해 스마트 컨트랙트의 상태 종료 보장(튜링 완전성) 및 같은 트랜잭션에 대해 같은 결과를 내는 것을 보장 (각자의 컴퓨터 환경에 의존성 없이) 한다. 하지만 이러한 EVM은 기본 환경에서 실행 하는 것 보다 엄청나게 느려지는 단점이 있다. R3 이더리움 보고서에 따르면 타원 곡선 암호 알고리즘 검증의 경우 파이썬 구현체에서 0.017초 EVM 구현체에서 0.57초 정도의 시간이 걸린다고 한다. 5개의 키로 링 서명을 구현할 경우 python 구현체가 0.119초 EVM위에서 약 3.68초가 걸린다..

또한 대부분의 퍼블릭 블록체인은 멀티 프로세싱에 최적화 되어 있지 않다. 퍼블릭 블록체인은 고가용성 보다는 안정적으로 실행되는 것이 목적이고 애초에 정책적으로 7~12TPS정도 밖에 허용하지 않기 때문에 복잡하게 프로세스를 분리할 필요가 없디. 대다수의 퍼블릭 블록체인은 싱글 프로세스에 최적화 되어 있고 통신 모듈과 블록 처리 모듈 정도만 분리하고 있다.

퍼블릭 블록체인과 프라이빗 블록체인은 네트워크 현황 및 디지털 화폐 운용 여부 때문에 사용하는 분산합의 알고리즘이 다르다. 퍼블릭 블록체인 구현체를 금융권에 맞게 사용하려면 분산합의 알고리즘의 교체가 필요하다. 대다수의 퍼블릭 블록체인은 블록 처리 모듈과 분산합의 모듈이 의존성이 강하게 구현하였기 때문에 이를 교체하는 것은 만만치 않을뿐더러 향후 업데이트에도 문제가 많다. 기본적으로 퍼블릭 블록체인은 한번 퍼블리싱 되면 하드포크가 아니면 소프트웨어 업데이트가 불가능하기 때문에 flexibility를 많이 고려하지 않기 때문이다. Hyperledger Fabric이나 더루프의 loopchain에서 분산합의 알고리즘을 Plugin 형태로 구현하는 것과는 차이점이 있다.

◇ loopchain의 모듈 방식 구조 대다수의 퍼블릭 블록체인 구현체들은 퍼블릭 블록체인 특성상 많은 요소들을 배제하고 개발한다. 이러한 구현체들은 flexibility 확보가 잘 되어있지 않고, 블록체인 상에서 지원해야하는 새로운 기능들을 추가하기 어렵다. 만약 데이터 공개 이슈 때문에 Private Channel을 구성하려면 현재 블록체인 구조를 수정해야 한다.

이러한 원인들 때문에 현재 금융권이나 기관에서는 프라이빗 블록체인을 이용하려고 하고 있으며 특히 거래에 따라 다양한 거래 검증 및 외부 연계, 규제 준수 등을 위해 블록체인 전체 스택을 커스터마이징 할 수 있는 프라이빗 블록체인 기술이 주목받고 있다.

구성원 및 추진체계

컴퓨터과학부 이*진 – 조장, 전체적인 시스템 구조 제안 및 과제 배분, 정보 조사 및 과제 통합

컴퓨터과학부 이*열 - 트랜잭션의 정보를 담는 데이터베이스 파일형식 분석, geth를 이용하여 local network 구성, geth와 remix 연동

컴퓨터과학부 전*진 – 전반적인 Solidity 코드 작성

설계

설계사양

제품의 요구사항

내용

설계 사양

내용

개념설계안

내용

이론적 계산 및 시뮬레이션

내용

상세설계 내용

내용

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

내용

포스터

내용

관련사업비 내역서

내용

완료작품의 평가

내용

향후계획

내용

특허 출원 내용

내용