학생글내려
10
2021-07-28 03:56:00
6
575

블록체인 기술의 구현에 대해 포괄적으로 아시는 분의 도움을 필요로 합니다.


카테고리를 테크쪽으로 할까 블록체인쪽으로 할까 고민하다가 아무래도 나뉘어진 이유가 있을테고 문제가 블록체인 분야에 견해가 깊은 분의 도움을 필요로 하는것 같아 블록체인쪽으로 냅다 올려봅니다.

1. 무엇을 만들고 있나?


원래 저는 블록체인 이름만 들어봤는데 이번에 우연한 계기로 IoT에 블록체인을 접목해 센싱한 데이터의 무결성을 유지하는 것을 목표로 하고 일단 맨땅에 헤딩히며 코드를 만들어보고있습니다.

그런데 블록체인.. 결코 만만하게 볼 상대는 아니더군요 전체를 이해하려면 알아야 하는 개념이 수두룩... 덕분에 공부는 많이 하게 되는것 같습니다.

단도직입적으로 말씀드리자면 블록체인 시스템의 부담을 줄이고자 PoW 알고리즘을 손보고 있습니다.
 

2. 현재의 상황


현재 파이썬으로 설명된 네이버 블로그 멍개님의 글을 보고 따라해보았습니다.
https://blog.naver.com/pjt3591oo/221184971787

그리고 각 노드가 일정 시간동안 난이도가 점점 높아지는 문제를 풀고 주어진 시간이 끝났을 때 노드가 자신이 푼 가장 어려운 문제의 난이도를 반환하도록 코드를 수정했습니다.

그래서 각 노드가 이 반환된 난이도를 블록체인에 있는 다른 노드들에게 알리고 어떤 노드가 주어진 시간동안 가장 어려운 문제를 풀었는지 알아내어 그 노드에게 블록을 생성할수 있도록 하고싶습니다.
(말이 어렵습니다. 죄송합니다...)

그런데 이 노드 각자가 다른 노드에게 어떻게 알려야 할지 모르겠습니다.

3. 그래서 일단 이렇게 해보려고 합니다.

그런데 성능이나 보안적으로나 효율이 떨어지는것 같아서 자신은 없습니다.

1) 체인 구조를 활용한다. (노가다)
자신의 앞 노드에게 자신이 푼 가장 어려운 문제의 난이도를 전달하고 자신의 뒷 노드에게서 그 노드의 난이도를 전달받는 방식으로 모든 노드가 난이도를 공유할 수 있도록 한다.
체인 가장 맨 뒤와 맨 앞의 노드가 서로 난이도를 알 때까지 정보 전달을 계속한다...

2) 모든 노드를 관리하는 노드를 만든다. (큰 서버처럼)
만약 제네시스블록이 이 역할을 맡는다면, 모든 노드는 난이도를 제네시스 블록에게 보내고, 제네시스 블록은 모든 노드들에게 가장 큰 난이도의 노드를 알려준다.

3) 모든 노드가 같은 LAN 상에 있다고 가정, 브로드캐스트를 활용한다.
(만약 ip 주소가 192.168.255.255 와 같은 형식이면 같은 LAN 상에 있는 모든 기기에 데이터를 보내줄 수 있다고 알고있습니다.)

4. 그런데 이마저 잘 못합니다.


답변 주실때 답답하심을 미리 방지하고자 말씀드리겠습니다. 제가 지금 알고있는 지식 현황은


일단 학부생입니다. 컴퓨터네트워크를 배우면서 네트워크계층의 각 계층이 무슨 역할을 한다, 이런 과정을 거친다 정도로만 알고 있습니다.


소켓통신 채팅 프로그램 코드를 해봤습니다. (1:1데이터 통신. 1:n은 모름)


다니엘 드레셔의 블록체인 무엇인가? 를 읽고 있습니다.
(원래 제가 소설책 읽는데도 몇 달 걸립니다. / 책 광고 아닙니다.)


학부과정에서 배운 언어는 C, C++, Java 입니다.
(파이썬은 기초정도로 알고 있고 원래 알고있는 언어로 알아내거나
모르는 부분은 그때그때 찾아서 알아내고있습니다. 그래서 각종 모듈의 존재 자체를 모를 수 있습니다.)


그래서 이런 궁금증으로 막상 코드를 짜보질 못하겠습니다.

1) : 소켓통신을 고려하고 있는데 언제 연결을 하고 언제 연결을 끊을것인가?
언제 앞으로 보낼지 언제 뒤에서 받을지
2) : 어떤 노드가 관리를 담당하게 하고 다른 노드가 담당 노드를 어떻게 알게 하는가?
담당하는 노드가 난이도를 조작한다면?
3) : 브로드캐스트를 하고 언제까지 다른 노드가 보내는 것을 기다리게 하는가?
중간에 놓칠수 있지 않을까?


5. 이 부분이 가렵습니다.


A. 3.번에서 말씀드린 방법들이 가능한 건가요? 아니면 얼마나 멍청한 건가요?


B. 위 방법들이 시도해 볼만 하다면, 성능이나 보안 측면에서 어느 방법이 가장 나은가요?

C. 쓰다보니 궁금해졌는데 '노드 == 블록' 표현이 맞는 건가요?
(블록이 공유 원장의 관점에서 데이터 덩어리, P2P 구조 관점에서 참여자 한 명 이라고 이해하고있습니다.)

D. 채굴자가 채굴에 성공해서 블록을 생성한다는것이 블록체인 시스템에서 거래를 하는 일원으로 인정을 하는 것이 맞나요?

6. 이렇게 답변해주신다면 제가 취업했을 때

밥이라도 한번 대접해드리고 싶을것 같습니다.

왜 싶기만 하냐면 제가 취업을 못하거나 연락처 공유가 불가능할것 같아서...

제가 알아보고 왔으면 하는 개념/용어 ex) ~에 대해서 알아보세요
오류 정정 ex) ~라고 이해한건 말이 안됩니다. (죄송합니다)
따끔한 조언 ex) 기초도 안되어 있으시면서 뭘 공부하시는 거죠? (죄송합니다)
참고자료 (URL만 툭 던져주셔도 좋습니다.)




긴 글 읽어주셔서 정말 감사합니다.

답변을 안해주셔도 읽어주신것만으로도 감사드립니다.

제 질문과 관련없는 조언 물론 환영입니다.

제가 추가했으면 하는 부분 있으시면 그 부분에 대해 댓글 달아주세요

댓글이나 본문에 추가하도록 하겠습니다.

0
  • 댓글 6

  • charlatan
    4k
    2021-07-28 06:03:44

    블록체인을 만들어보려는 것 같은데 이더리움 코어 소스를 분석해보시는 것이 좋을 것 같은데요? 파이썬으로 구현된 Trinity라는 이더리움 클라이언드 레포가 있으니 깃헙에서 찾아보시고...

    기본적으로 블록체인은 P2P 방식입니다. 아래 링크를 참조하시면 어떨까 싶네요.

    https://github.com/ethereum/devp2p

    그리고 PoW는 이제 블록체인의 합의방식으로는 거의 사용하지 않아요. 그러니까 소위 말하는 전력과 컴퓨팅 리소스를 누가 더 많이 끌어다 쓰느냐로 경쟁하지는 않는다는 말이죠.

    노드는 P2P 네트워크를 구성하는 각 개별 클라이언트를 말합니다. 블록은 데이터를 저장하는 단위이고 채굴자들은 트랜잭션을 처리해서 블록을 만들어서 보상을 받는 구조입니다. 은행송금을 예로 들면 일상의 송금은 은행과 금융결제원이 알아서 처리해주지만 블록체인은 그런 거래중개자가 없고 대신 불특정 다수가 채굴자가 되어 송금 거래를 처리해줍니다. 채굴자들은 블록 보상을 얻기 위해 참여하는 것이고요.

    보상은 가장 먼저 블록을 만든 채굴자에게만 주어지므로 채굴 경쟁이 있습니다. "거래를 하는 일원으로 인정"한다는 표현보다는 블록을 제대로 만들었는지 블록체인의 모든 노드들이 검증을 하고 검증에 문제 없으면 공유원장에 기록이 되는 겁니다.

  • kenu
    57k
    2021-07-28 07:38:01
    해당 게시물은 관리자에 의해 Blockchain Q&A에서 포럼로 이동 되었습니다.
  • 하마
    7k
    2021-07-28 09:21:04
  • 하마
    7k
    2021-07-28 09:32:54 작성 2021-11-18 11:09:01 수정됨

    A. 3.번에서 말씀드린 방법들이 가능한 건가요? 

    -> 위에 알려드린 방법을 사용하는게 좋습니다.

    B. 위 방법들이 시도해 볼만 하다면, 성능이나 보안 측면에서 어느 방법이 가장 나은가요?

    -> 일단 아무거나 돌아가는 코드를 만들어 보세요. 그리고 다시 이더리움 코어를 공부하는 게 좋을 거 같습니다. 
    기본 개념이 아직  부족해 보입니다. 

    C. 쓰다보니 궁금해졌는데 '노드 == 블록' 표현이 맞는 건가요?
    (블록이 공유 원장의 관점에서 데이터 덩어리, P2P 구조 관점에서 참여자 한 명 이라고 이해하고있습니다.)

    -> 노드와 블록은 전혀 다른겁니다. (노드는 피어라고도 불리긴 하는데 ) 노드는 프로그램(서비스) 자체를 말하는 것이고, 블록은 그 프로그램 내부에서 처리하는 단순한 하나의 데이터 저장 단위입니다. 블록이 연결되어 블록체인이라고 합니다.   
    매우 단순히 말해 노드는 스타크래프트 자체이고, 블록은 플레이한 게임을 저장한 데이터 입니다. 

    D. 채굴자가 채굴에 성공해서 블록을 생성한다는것이 블록체인 시스템에서 거래를 하는 일원으로 인정을 하는 것이 맞나요?
    -> 아니요. 블록체인 시스템은 매우 다양하니 비트코인과 이더리움을 한정해서 예를 들면, 누구나 블록체인 시스템의 일원이 될 수 있습니다. 누구의 인정도 필요가 없습니다. 인정이 필요한것은  컨소시엄 블록체인(하이퍼레저 패브릭)이라고 따로 불리워 집니다.
    비트코인 이더리움의 경우, 네트워크에  아무나 접속한 후에, 블록을 생성해서 블록을 퍼트려 주기만 하면 됩니다.
    해당 블록이 정당하다고 다른 노드들에게 검사를 받으면 해당 블록은 블록체인에 연결되고 자신은 대가를 얻게 됩니다.   

  • cawl
    37
    2021-07-28 10:04:58

    음... 2번에 적어두신 것만 읽었을 땐 일단 가장 어려운 문제를 푼 노드에게 블록 생성을 하게 하는 건 위험한 것 같습니다

    컴퓨팅 파워가 가장 강력한 노드 또는 연합이 블록 생성을 독점하게 될 가능성이 있어 보입니다

  • Dive_Drink_Develope
    6k
    2021-07-28 10:10:42

    일단 왜 센싱한 데이터의 무결성이 중요한지는 뒤로하고

    블록체인의 기본개념을 좀더 공부하고 계획을 세우시는게 좋을것 같습니다.


    아직 학부생이면 시간도 많을텐데 스터디같은데 참여해서 열심히 공부하고 열심히 물어보시면서 기반을 다지면 되지 않을까요..ㅎㅎ


    통신은...학부에서는 로우레벨까지 내려가서 하지만 요즘은 그냥 라이브러리로 던지고 잊어버리면 라이브러리가 알아서 해줍니다. 어느정도 내부동작을 이해하는 수준에서  추상적인 전체그림을 머릿속에 잘 담고있는게 프로젝트 기획에서는 더 중요한것같습니다.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.