블록체인을 만들어봅시다.

in #blockchain6 years ago (edited)

Daniel Van Flymen이 오픈소스로 블록체인 프로젝트를 만든 이후 많은 사람들이 그의 글을 기반으로 튜토리얼들을 올렸습니다.

Learn Blockchains by Building One: The fastest way to learn how Blockchains work is to build one

dvf/blockchain

그의 오픈소스 프로젝트에 참가하는 개발자들을 위한 슬랙 단톡

그리고 이것은 그의 오픈소스 프로젝트로 저는 자바스크립트로 포팅하는 작업(part 1)을 진행 후 현재 transaction verification을 위해 asymetric cryptography로 만들어지는 디지털 서명을 이용한 protocol을 pyNaCl으로 개발해보면서 part2에 기여중입니다.

그런데...

[블록체인] 파이썬으로 블록체인을 구현해보자 - 1

golbin/g-coin
골빈해커님의 g-coin 분석 1부
골빈해커님의 g-coin 분석 2부

  • 골빈해커님의 g-coin은 암호화폐라고 부르기 애매한 부분이 있습니다. 바로 채굴을 서버에서 하고 보상도 주지 않는다는 점입니다. 김태영님께서 언급한 마이너에 대한 블록은 그저 블록체인의 보안을 지켜주는 previous_hash를 위한 genesis block입니다.

위 튜토리얼들에는 여러가지 아쉬운 점들이 있습니다.

  • heartbeat loop이 없습니다.
    매번 REST API 서버에서 /mine 으로 request처리하는 것으로 마이닝이 되긴 하지만 만약 request를 안 보내면 소는 누가....

  • 'previous_chain' property를 다루지 않습니다.
    보안에 있어서 블록체인의 최고 존엄은 바로 얘입니다. 체인이라는 단어가 얘가 없으면 붙지를 않습니다. 얘가 없으면 consensus과정에서 그냥 가장 체인이 긴 마이닝 노드가 어떻게 거래를 해놨던 간에 맞는 블록체인으로 되어버립니다.

  • 디지털 서명을 이용해 transaction을 verify하지 않습니다.
    블록을 보낼 때 transaction verification과정에서 체크해봐야할 게 있습니다.

    1. 과연 transaction이 거래자 본인이 보낸 것인지(Authentication)
    2. 거래자가 정말 취소 안하고 보낸 것인지 확인할 수 있는지(non-repudation)
    3. 전송 도중에 데이터가 손상되지는 않았는지(integrity)

    bitcoin은 디지털 서명을 위해 타원 곡선 암호를 사용하고 있습니다. 그래서 해쉬를 돌려서 만드는 거 외에도 api server에 보낼 때 만든 해쉬값을 private key로 encrypt해서 전자 서명을 한 다음 public key랑 같이 넣어서 블록체인 서버에 보냅니다. 그러면 블록체인 서버는 받은 public key를 가지고 전자 서명된 해쉬값을 decrypt할 테고 전송 도중에 데이터가 깨지거나 다른 사람이 이 거래내용을 보내지 않는 한 해독한 해쉬값이 보낸 내용을 해쉬 함수로 돌린 해쉬값과 일치하게 되는 것입니다.

그리고 사실.... 이 튜토리얼에서 제공한 코드는 완전한 블록체인이 아닙니다.

아직 part 2 article이 남아있습니다(위와 같이 말한 transaction verification, 나중에 도입될지도 모르는 uPnP protocol).


따라서 저는 이번에 제가 전에 글로벌 제주 해커톤에서 블록체인 프로젝트를 통해 같이 뜯어보고 종합적으로 설명하고자 합니다.(물론 도중에 피드백 주시면 감사합니다...)
일단 레퍼런스부터 밝히자면

Reference

해커톤.jpg

저희 팀은 왼쪽에서부터

로 되어있고요.

들을 만들었습니다.

일단 기존에 있었던 코드들부터 차근차근 설명해드리도록 하겠습니다.
그럼 시작합니다!

참고

댓글에 javascript로 배우고 싶은 사람은 알려주세요. javascript로 튜토리얼을 쓰는 게 좋은지, python으로 튜토리얼을 쓰는 게 좋은지 궁금합니다.

Sort:  

좋은 프로젝트네요 추천합니다^^

감사합니다! 배우고 싶은 언어를 파이썬이나 자바스크립트 중 골라서 댓글에 달아주십시오!

좋은 프로젝트네요 ㅎ
python으로 튜토리얼 써주시면 감사하겠습니다.

알겠습니다.

python 추천할게요 ㅎㅎ

알겠습니다.

Congratulations @hskang9! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You got your First payout

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Upvote this notification to help all Steemit users. Learn why here!

Coin Marketplace

STEEM 0.28
TRX 0.11
JST 0.031
BTC 69107.15
ETH 3882.60
USDT 1.00
SBD 3.65