저번 시간에는 제네시스 블록 JSON 파일을 이용하여 제네시스 블록을 생성하였고, 제네시스 블록에는 Header와 Transfer의 영역으로 나뉘어져 있으며 Header에는 채굴자의 정보와 블록을 생성하기 위한 정보등이 담겨져 있고, Transfer는 송신자와 수신자가 존재해서 전송하는 기록등을 담게 되었다. 이번장은 본격적으로 간단한 채굴 로직에 들어가기에 앞서, genesis.json을 이용해서 블록을 생성하는 로직을 소스와 함께 설명해보며, 기본중에 기본인 채굴 로직을 설명하고 다음 장에는 노드를 관리하며 채굴을 하는 방법을 알려드리고자 한다. 해당 포스팅은 실제 돌아다니고 있는 블록체인의 모습을 자바로 구현을 해본 것일 뿐이며 실제 모습은 이와 많이 다를 수 있다는 점을 염두에 두었으면 좋겠다. ..
블록체인이 가장 첫번째 수행하는 작업은 무엇일까? 바로 제네시스 블록(Genesis Block)을 생성하는 것이다. 일반적으로 제네시스 블록에는 블록체인의 설정들이 담겨져 있고 블록체인을 생성한 개발자를 위해서 일부분을 보상으로 제공하기도 한다. 즉 제네시스 블록에는 설정 및 개발자, 재단 등에게 보상을 해주는 부분이 담겨져 있어야 한다는 것이다. 개발자에게 아무런 보상을 주기 싫을 경우 쓰지 않아도 된다. 제네시스 블록에 담겨질 내용 일반적으로 블록체인의 설정은 아래와 같은 것을 선언할 수 있을 것이다 블록의 목표 개수, 즉 유통량 재단 및 개발자에게 제공하는 보상 정보 (옵션)최초 전송 (옵션)시작 해시 값 참고로 아래는 이더리움(Ethereum) 개발을 위한 제네시스 블록의 예시이다. { "conf..
주의(Warning) 해당 포스팅은 자바로 블록체인을 구현하고 있으며, 특히 이번 포스팅은 그동안의 짜놓은 소스를 일부 공개하는 것으로, 1~2년간의 장기간 프로젝트를 목표를 잡고 초반의 삽질을 하겠다는 각오로 말도 안되는 설계가 있을 수 있다는 점 양해바랍니다. 직접 블록체인을 설계를 하다보니, 보다 더 이해가 늘어나고 있으며 어떠한 문제가 있을지 체감이 더 잘되기에 앞으로도 꾸준한 삽질을 계속할 예정입니다. 참고로 저는 암호학에 관련되어서 지식이 있지만 보안 전문가 수준의 지식까지는 아니기 때문에 이 부분 이해를 해주시기 바랍니다. 현재 제가 만들려는 프로젝트는 앞서 설명한 것처럼 웹기반의 API 방식의 블록체인입니다. 소켓통신도 안하고 HTTP 통신을 합니다. 그렇기 때문에 퍼블릭으로 구현되면 문제..
주의 해당 포스팅은 자바로 블록체인(Blockchain)을 구현해 나가는 장기간의 프로젝트로서 초반에는 매우 강력한 삽질을 할 수 있다는 점 양해 바랍니다. 자바 자체가 블록체인에 적합한 언어가 아니기 때문에 본 포스팅은 완전한 퍼블릭 블록체인을 추구하는 것은 아니라, DPOS(Delegated Proof of Stake)와 프라이빗 블록체인(Private Blockchain) 정도를 포커스로 잡고 구현해 나갈 생각입니다. 다만 가능하다면, 퍼블릭 블록체인(Public Blockchain) 도 설계는 계속 해볼 생각입니다(사토시 빙의) 어제 영상을 찍으면서도 깨닫는 것이 있고, 아침에 샤워를 하면서도 깨닫는 것들이 있기 때문에 포스팅이 오락가락할 수 있지만, 그럴때마다 포스팅에서 정정해 나가도록 하겠습니..
주의!! 해당 포스팅은 자바로 블록체인을 구현하며, 장기간의 프로젝트로 초반에는 매우 많은 삽질을 할 수 있다는 점 양해 바랍니다. 자바 자체가 블록체인에 적합하지 않는 언어(속도가 C, C++보다 느리며, 디컴파일에 취약)이기 때문에 이렇게도 구현 되지 않을까 정도내지 프라이빗 블록체인(퍼블릭은 무리)을 포커스를 삼고 있습니다. 영상은 이미 2주전쯤에 찍어서 올렸는데, 포스팅을 올리는걸 깜빡하여 뒤늦게 포스팅을 합니다. 첫번째는 플랜을 전체적으로 짜보았고, 두번째는 본격적으로 노드를 어떤식으로 구성을 하는 것이 좋을까에 대한 내용입니다. 일반적으로 소켓(Socket) 통신을 통해서 브로드캐스팅(Broadcasting)하는 방식을 사용할테지만, 저는 그런거 안하고 구현할 겁니다 (web api 방식) T..
2번째 강의는 정수형 변수부터 주소형 변수까지 한번 간단히 알아보고, 문자열 변수의 아주 간단한 예제를 만들어 봤습니다. 오늘은 바로 전 강의보다 아주 약간 복잡한 조건문에 대해서 알아보도록 하겠습니다. 이 강의는 개발자분들에게는 매우 간단하지만, 개발을 해본적이 없는 분들은 이해하기 약간 버거울 수 있다는 점을 염두하시면 되겠습니다. 개발자분들은 1~2분안에 포스팅을 모두 읽고 후딱 넘어갈 수 있겠네요. 이더리움 개발 - 누구나 할 수 있는 솔리디티(Solidity) 언어 #1 이더리움 개발 - 누구나 할 수 있는 솔리디티(Solidity) 언어 (자료형편) #2 아직 강의를 들어본적이 없는 솔리디티에 대해서 이해를 잘 못하시는 분들은 이전 강의를 듣고 오시는 것을 권유드립니다. 오늘은 IF 조건문에 ..
바로 전 강의에서는 솔리디티(Solidity)를 실행하기 위해서, Remix라는 웹 기반 개발도구(IDE)를 설치 해보고 솔리디티판 Hello World라고 할 수 있는, SimpleStorage를 구현해 보았습니다. 바로 이전 강의이더리움 개발 - 누구나 할 수 있는 솔리디티(Solidity) 언어 #1 오늘은 프로그래밍을 위한 기초 중에 기초인 솔리디티 자료형에 대해서 알아보도록 하겠습니다. 참고로, 자료형이란 어떤 값을 넣을 때 값의 성질을 미리 정의하여, 이상한 값이 들어오는 것을 방지하거나 값을 최적화 시킬 수 있는 기능등이 있습니다. 예를 들어, 제가 이사를 가야 하는데 저는 혼자 살아서, 20평 이하의 2룸에 최적화된 생활 환경을 보여준다고 해보겠습니다. 그러면 저한테 21평 이상의 집들과 ..
어제 불현듯, 이런 생각이 들었습니다. "내가 왜 Dapp만 공부하고 있지? 그냥 블록체인을 만들어 볼까?" 사실, 블록체인의 개념은 프로토타입으로 만들기엔 어려운 내용은 아니라고 생각했습니다. 그리고, 자바로 충분히 구현할 수 있다고 생각이 들어서 한번 무모하게 도전을 해보려고 합니다. 이 프로젝트가 중간에 엎어질 지, 아니면 성공할 지 모르겠으나 개인적인 생각으로는 99%는 현재 내 지식과 프로그래밍 실력으로 구현 가능하다 보고 있고, 블록체인에 대해서 설명할 때 프로그램으로 설명하는 것만큼 좋은 것이 없다고 생각이 들기 때문에, 한번 토큰 개발이 아닌 코인 개발에도 도전을 할 생각입니다. 일단 진행사항은 포스팅과 유튜브 모두 올릴 생각이긴 하나, 선 유튜브 정리되면 포스팅을 하려고 합니다. 포스팅을..
우리는 그동안 Geth를 이용하여 사설 네트워크에서 계좌 생성 및 채굴을 해보고, Mist GUI 브라우저를 이용하여 추가 계좌 생성 및 송금을 해보는 것들을 테스트 해보았습니다. 사설 네트워크에 이더리움도 있겠다 계좌도 여러개 있겠다 이제는 본격적으로 스마트 컨트랙트(Smart Contract)를 구현하기 위한 솔리디티(Solidity)를 시작해보도록 하겠습니다. 들어가기에 앞서 우선 잠깐, 스마트 컨트랙트에 대해서 복습을 해보겠습니다. 스마트 컨트랙트는 우리가 누군가와 계약(Contract)을 하기 위해서는 중간의 신뢰하는 사람이나 기관을 넣을 필요가 없게 만드는, 탈중앙화 계약 시스템입니다. 즉, 내가 누군가와 계약을 한 사실을 모든 사람들에게 공표를 함으로써, 자동적으로 참여하는 노드들과 기록들이..
바로 전 시간의 강의에서는 개인 사설 네트워크를 설치구동하여, Geth(Go-Ethereum)의 콘솔창에서 계좌를 생성해보고, 채굴(Mining)까지 진행을 하였습니다. 채굴까지 완료하였으니, 이제는 다른 계좌에 이체 하는 것을 다뤄보도록 하겠습니다. 암호화폐의 계좌는 다양한 방식들이 존재하는데, 휴대폰 앱으로 제공하는 것들도 있고, 거래소에서 제공해주는 지갑도 있고, 전 강좌에서 보여드렸던, 콘솔(Console) 환경에서 계좌를 생성하여 거래를 진행하는 방식도 있습니다. 콘솔로 하는 것은 불편하고, 거래소와 앱으로 제공하는 지갑들은 사설 네트워크에 접근이 안되기 때문에 이 강의에서는 Mist라는 이더리움(Ethereum) Dapp(Decetralized applications)으로 만들어진 GUI 지갑..
이전 포스팅에서는 Geth(Go-Ethereum)를 설치 하고, 실행하는 것까지 해보았습니다. Geth를 실행하면, 이더리움(Ethereum)의 공용 네트워크(Public Network)에 들어가게 되는데 지금 우리가 해야 할 것은 Dapp(Decentralized Application)을 만드는 것이기 때문에, Private Network 즉, 테스트용 개인 네트워크를 만들어서 이더리움에 대해서 습득하고, 채굴이 어떤식으로 돌아가고 있는지를 익혀보도록 하겠습니다. Geth를 실행할 때, 다양한 파라미터(옵션)들이 존재하는데 필요한 옵션들을 익혀야 우리가 원하는 형태로 클라이언트를 구동 시킬 수 있습니다. 옵션을 어떻게 주느냐에 따라서 공용 네트워크에 들어갈 수도 있고, 사설 네트워크를 만들수도 있습니다..
오늘부터는 이더리움(Ethereum)을 이용한 Dapp(탈중앙화 어플리케이션, Decentralized Application) 혹은 토큰(Token) 개발을 진행하겠습니다(Dapp과 토큰은 사실상 동의어입니다). Dapp을 개발하기에 앞서 우선 이더리움 클라이언트를 설치해야 합니다. 이더리움은 서버라는 개념이 없이 모든 노드가 서버와 클라이언트(자웅동체)을 모두 수행하기 때문에 "서버는 왜 설치 안하나요?"라는 의문점을 가질 필요가 없습니다. 우선 이더리움 클라이언트는 다양한 버전들이 존재합니다만, 저는 Go Ethereum을 기반으로 강의를 진행할 예정입니다. 일단 Go Ethereum은 가장 활발히 작업이 진행되는 클라이언트이며, Go는 구글(Google)에서 만든 프로그램 언어입니다. Go Ethe..