2018년 12월 27일 목요일

직접 간단히 만들어보는 블록체인과 가상화폐


이 글은 블록체인 동작 메커니즘 이해하고자 하는 싶은 분을 위해 핵심 개념만 간단히 개발하는 과정을 공유한다.

좀 더 자세한 내용은 아래 링크를 참고한다.

우선 요구사항을 정해보자
블록체인 개발전에 블록체인 개념을 내포하는 몇가지 요구사항을 정의해야 한다.
  • 가상화폐: 가치 교환을 위한 디지털 가치 보관 수단
  • 지갑: 개인이나 조직 가상화폐를 보관하는 전자 계정
  • 트랜잭션: 데이터의 변화를 기록한 단위
  • 블록: 트랜잭션을 기록한 단위. 데이터 변조를 막기 위해 해쉬 암호화 사용
  • 마이닝: 블록을 관리하는 컴퓨팅 소모 자원에 대한 대가 지급
  • 스마트 계약: 상호간 거래시 계약 불이행을 방지하기 위한 수단

간단히 만들어 보는 블록체인 
우선 요구사항을 바탕으로 아키텍처를 디자인해보자.

요구사항에 해당하는 객체를 모두 클래스화한다. 그리고, 각 클래스간 관계를 디자인한다. 예를 들어, 코인과 화폐는 서로 관계가 있다.

코인은 가치를 보관하는 개념이다. 트랜잭션은 쌍방간의 계약중 하나이며, 가치의 변경을 담는 역할이다. 블록은 트랜잭션의 변화를 기록한다. 블록은 링크드리스트(linked list) 자료구조로 정의된다. 블록의 위변조는 해쉬값으로 알 수 있다. 블록체인은 블록을 생성하고 관리한다. 스마트계약은 트랜잭션을 발생시킨다.

이를 디자인하면 다음과 같다.
클래스 디자인(UML)

앞의 디자인을 반영해 중요한 부분만 코딩하면 다음과 같다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class coin
{
public:
   double value = 0;
}

class wallet
{
public:
   string accountAddress;
   coin coin;
}

class transaction
{
public:
   string fromAcccount, toAccount;
   coin trasnferValue;
   string calculateHash() {return SHA256(this)};
}

class block
{
public:
   const int MAX_BLOCK_TRANSCTION 40
   int countTransaction = 0;
   transaction[MAX_BLOCK_TRANSACTION];
   block* previousBlock = NULL;
   block* nextBlock = NULL;

   int insertTransaction(transaction& t);
   string calculateHash();
}

class blockChain
{
public:
   block* createGenesisBlock();
   coin* miningBlock(int hash, block& block);
   block* insertBlock(block* b);
}

class smartContract
{
public:
   void setScript(string code);
   bool execute();

private:
   string code;
   python contractScript;
}
style by hilite

마무리
이 글은 블록체인과 스마트 계약 구현 원리를 이용해 보기 위해 간단히 아키텍처를 디자인해보고, 코드로 구현해 보았다. 사실, 이외 여러 기능과 구성요소가 필요하나, 다양한 블록체인 플랫폼의 핵심적인 내용은 비슷하다. 좀 더 상세한 내용은 다음 레퍼런스를 참고하길 바란다. 

레퍼런스

2018년 12월 16일 일요일

Blue Z IoT 오픈소스 프로젝트

이 글은 BlueZ IoT 오픈소스 프로젝트를 간략히 설명한다. 

Bluz는 Arduino처럼 작동하지만 Bluetooth LE (BLE) 통신 기능이 내장된 개발 키트이다. 이 BLE 연결을 통해 장치는 REST API를 통해 전 세계 어느 곳에서나 하드웨어에 액세스할 수있게 해주는 Particle 클라우드와 통신할 수 있다. 
BluZ 개념도

함수를 호출하고, 변수를 가져오고, 이벤트를 게시 또는 구독하고, 웹 훅을 트리거하고, 웹 IDE를 통해 무선으로 프로그래밍 할 수 있다. 

Bluz는 배터리 수명이 긴 무선 애플리케이션에 이상적이다. BLE를 사용하면, bluz는 몇 달 또는 몇 년 동안 코인 셀 배터리로 지속될 수 있으며, 모두 클라우드에 연결되어 액세스 할 수 있다. 

Bluz는 Arduino에서 사용되는 것과 동일한 언어인 Wiring으로 프로그래밍되어 있으므로 많은 호환 가능한 개발 키트가 사용 가능하다.

레퍼런스는 아래 링크를 참고한다.

2018년 12월 10일 월요일

마이크로소프트 딥러닝 인공지능 도구

몇 년사이에 마이크로소프트사의 딥러닝 인공지능 도구가 크게 발전한 것 같다. 물론 오픈소스 기반인데다 무료라 사용하기 어렵지 않다.

이 글은 대표적인 이 회사의 인공지능 도구를 소개한다.

  • Azure Notebooks: 쥬피터 노트북 기반 다양한 프로젝트를 무료로 개발할 수 있음
  • Custom Vision: 딥러닝 모델 관련 설정 및 코딩 없이, 손쉽게 이미지를 업로드하면 딥러닝 모델을 개발할 수 있음
  • Caption Bot: 비전 딥러닝 모델을 이용한 간단한 서비스로 이미지를 올리면, 자동으로 객체과 상호관계를 인식해 설명을 해줌