chatGPT, Grok, Gemini와 같은 거대 인공지능들은 우리 일상의 모든 영역을 혁신적으로 변화시키고 있다. 하지만 우리 일상 속 대부분의 AI는 "중앙집중형(Centralized)"이라는 한계 속에서 powerful entity들에 의해 선별되고 컨트롤되는 정보에 의존하고 있다.

 

하지만 이러한 AI들이 정말 "전적으로" 우리가 의존해도 되는 존재일까.

 

Microsoft, Google, NVIDIA와 같은 거대 기술 기업들이 막대한 데이터, 컴퓨팅 인프라를 독점하다시피 하고 있는 현재 상황에서, 작은 스타트업들은 이들과 제대로 된 경쟁조차 하기 힘들다. 이는 단순 경제적 문제를 넘어 혁신의 다양성이 저해되고, 소비자들의 선택권 또한 제한되며 이로 인해 AI의 발전 속도 자체를 늦추는 결과를 낳고 있다.(출처)

 

하지만, 더욱 심한 문제는 편향성의 고착화이다. 중앙집권적으로 학습된 AI 모델들은 개발자들의 세계관, 그리고 편향된 데이터가 사용되었을 경우, 이를 그대로 반영하게 된다. 유네스코의 2024년 연구에 따르면, 주요 LLM들이 정치, 인종, 성별 등에 대해 편향된 결과를 연관시키는 것으로 나타났다. (출처)

https://redblink.com/llm-comparison-chatgpt-gemini-grok-claude-deepseek/

많은 사람들이 업무, 과제, 일상 대부분에서 AI와 함께하는 사회 분위기 속에서, 이렇게 중앙화되어 선별되고, 통제되는 AI는 우리의 생각과 삶의 방향에도 지대한 영향을 미칠 수 있을 것이다. 이러한 중앙집권형 AI의 한계를 뛰어넘기 위해 필요한 것이 바로 탈중앙화된 AI(DeAI)이다.

 

지금 소개할 Allora 역시 이러한 문제의식에서 출발한 DeAI중 하나이면서, 아주 매력적이라는 생각이 들어 소개해본다.

alloralabs.xyz

1. 창립 배경

처음에 Upshot이라는 이름으로 창립되었던 이 회사는, AI를 활용한 자산 가격 발견에 중점을 둔 회사였지만, AI와 크립토 인프라 구축 분야에서 꽤 긴 시간동안 경험을 쌓으면서 더 큰 비전을 품게 되었다.

2024년 2월, 회사 이름을 Allora Labs로 리브랜딩하면서 탈중앙화 AI 네트워크 구축이라는 더욱 큰 목표를 잡아 AI의 패러다임을 바꾸겠다는 의지를 표현하였다.

 

창립자는 Nick Emmons(CEO)Kenny Peluso(CTO)가 있다.

CEO인 NickJohn HancockLab of Forward Thinking에서 수석 블록체인 엔지니어로 근무하였으며, CTO인 Kenny또한 John Hancock에서 full-stack개발자로 일한 경험이 있다.

 

이들은 이와같이 전통 금융업계에서 경험을 통해 중앙집권적 시스템이 가진 효율성, 그리고 그 한계를 직접 경험하였으며, 탈중앙화된 해결책의 필요성을 느낀 배경이 되었다.

2. 성장 과정

이들은 2020년 초 100만 달러 시드 라운드를 시작으로, 2021년 750만, 2022년 2,200만 달러의 series-A 라운드를 성공적으로 완료했으며, 2024년에는 추가로 300만 달러의 투자를 유치해 총 3,500만 달러의 펀딩을 달성했다.

투자자 라인업 또한 인상적인데, Allora 웹사이트에서 확인할 수 있듯, Polychain Capital, Framework Ventures, Blockchain Capital 등 블록체인, AI 분야 최고 투자사들이 참여한 것을 볼 수 있다.

3. Allora Labs의 DeAI

이들은 단순한 AI플랫폼을 만들고자 하는 것이 아니라, World Machine Intelligence Abstraction Layer를 만들어 AI를 널리 접근 가능하게 만들고, 데이터, 알고리즘을 가진 누구나 AI에 기여할 수 있는 생태계를 만들고자 한다.

 

아래는 이들이 진행하고 있는 여러 프로젝트들의 일부이다.

- 1. Mind Network의 FHE기술을 응용해 민감/학습 데이터가 암호화되어 프라이버시를 유지할 수 있도록 한다.

 

- 2. 일본 gumi와 협력을 통해, 게임 내 AI 기반 추론, 에이전트 등을 지원하고 있다.

 

- 3. Story Protocol과 IP 생태계 통합을 통해 지능형 IP를 관리 및 창작물의 가치평가를 제공하고 있다.

 

- 4. AgentiPy라는 Python framework를 통해 AI agent들이 블록체인과 원활히 상호작용할 수 있도록 하여 DeFAI분야에서

     4-1. Allora의 가격 예측을 활용해 Meteora에서 유동성 조정을 통해 수수료 earning & impermanent loss 최소화
     4-2. Orca에서 Allora의 실시간 가격 Intelligence를 이용해 스마트 거래 실행

   이러한 연구를 하고 있다.

 

- 5. 학습 데이터와 알고리즘을 제공하는 사용자들에게 블록체인 네트워크를 통한 차별화된 인센티브를 제공하고 있으며,

이외에도금융분야, 헬스케어, 게이밍 등 여러 분야에서 범용성 있게 적용되고 있는 상황이다.

 

Allora Network는 단순히 예측을 집계하는 것이 아닌, 현재 상황에서 각 모델이 얼마나 정확할지를 예측하는 예측(Forecasting the Forecasting)을 통해 더 강력한 clustered-result를 생성한다. 이는 기존 AI 시스템들과 완전히 다른 접근법으로, 개별 모델의 한계를 뛰어넘는 탈중앙화된 방식을 활용한 진정한 집단지성을 구현한다고 볼 수 있다.

 

이러한 접근법을 통해 Allora Labs는 AI의 미래가 소수 기업의 독점이 아닌, 전 세계 개발자들과 연구자들이 협력하여 만들어가는 집단지성의 시대를 만들고자 하는 것 같다.

 

참고 문헌들:

https://www.allora.network/blog

 

Blog

Stay up to date with the collective knowledge of Allora.

www.allora.network

 

반응형

최근 Base 맥시가 된 것 같다. Base, 솔라나쪽에서 AI관련 섹터가 상당히 핫한 것 같은데, Base에서 떠오르는 AI-agent들이 어떠한 것이 있는지, 그리고 어떻게 사용하는지 알아보고자 Virtuals Protocol에 대한 공부를 해보려 한다. 이를 위해 Virtuals Protocol Whitepaper를 읽어보며 AI라는 토픽의 현위치와 기술적 이해를 해보고자 한다.

글을 쓰기 시작하는 시점에서, Virtuals에 대해 아는 것은 AI-agent 관련 token에서의 펌프펀이라는 것만 알고 있다.

 

이제, 시작해보자.

 

Our one liner | Virtuals Protocol Whitepaper

Last updated 2 months ago

whitepaper.virtuals.io

virtuals protocol whitepaper


Virtuals Protocol

Virtuals Protocol은 Game, Entertainment 분야의 AI agent를 블록체인을 통해 ‘공동소유’할 수 있도록 하는 플랫폼이며, AI-agent를 통해 자율적으로 운영하고 다양한 application에서 수익창출이 가능한 자산으로 변환한다.

 

대부분의 프로젝트는 어떠한 Pain Point에서 시작한다. Virtuals는 어떠한 것을 해결하기 위해 출시되었을까.

Virtuals Protocol이 해결하고자 하는 세 가지 Pain Point

  • Complexity in implementing AI agents into consumer applications
    • > Plug&Play 방식으로 소비자 application이 AI-agent를 간편하게 사용할 수 있도록 함
  • Lack of revenue for AI finetuners and dataset contributors
    • > contributor에 대한 수익 분배를 제공하도록 함
  • Limited access for non-AI experts to capitalize on AI agent opportunities
    • > 비 전문가도 AI-agent에 대한 소유, 참여를 가능하게 함

그래서 Virtuals는 무엇을 하고자 하는가?

AI를 “수익을 창출하는 자산”으로 간주하여, 사용자들이 이에 투자하여 지분을 갖고, 공동소유할 수 있도록 한다.

  • 그렇다면, 어떻게 수익을 창출한다는 것일까?예를 들어 Virtuals에서 가장 잘나가는 agent 중 하나인 $AIXBT의 경우, 분석서비스를 제공하면서 이를 통해 데이터 판매 수익, 서비스 이용료 등을 거두며, 또한 소셜 활동을 통해 yaps 포인트를 쌓아 수익을 창출하는 활동을 한다.
  • Whitepaper의 설명을 조금 더 읽어보면, 도파민을 뿜어내는 컨텐츠의 무제한 생산을 통해 사용자들을 모으고, 맞춤화된 컨텐츠 생산을 통해 끊임없는 도파민 분비를 촉진하겠다는 의지를 보이고 있다. 즉, 더 많은 컨텐츠, 초개인화를 통해 사용자당 평균 수익, 그리고 유지율의 기하급수적 증가를 하고자 한다. (도파민이라는 표현이 있긴 하지만, 자극적인 컨텐츠 뿐 아니라, $AIXBT의 경우와 같이 지식, 데이터를 통한 도파민까지 포괄하는 내용으로 해석할 수 있다.)
  • AI-agent를 Game, Entertainment 분야에서 수익창출을 하도록 한다는 설명이 있었다. 즉, 로블록스, 틱톡 등 플랫폼에서 가상의 인플루언서 활동을 통해 수익을 창출할 수 있도록 한다는 이야기이다.

사용자들은 이를 통해 누구나 AI-agent를 소유하고, 개발에 참여할 수 있으며, 이를 통한 인센티브를 공정하게 분배할 수 있다.

그래서 Virtual Agents가 뭔데?

스스로 학습하고, 계획하고, 결정을 내리는 “자율적인” agent.

  • 3D 공간에서 활동
  • 물리적, 디지털 방식으로 상호작용
  • 자체 지갑을 통한 트랜잭션 생성

이러한 활동을 할 수 있다고 하는데, 잘 와닿지는 않는다. 계속 자세히 알아보자.


Agent

G.A.M.E 프레임워크를 이용해 자율 AI-agent를 만들 수 있다. player(사람, agent 모두를 포함)는 각종 상호작용을 할 수 있으며, 이러한 상호작용 안에서 새로운 연쇄반응이 유발된다. 이를 통해 결과적으로 각 플레이어가 고유한 스토리라인을 경험할 수 있게 된다.

모든 player들과의 상호작용에 대한 진행 과정은 Virtuals에 의해 기록이 되며, 이를 통해 더 깊고 지속적인 UX를 제공한다.

 

Agent의 두 가지 종류인 IP Agent와 Functional Agent에 대해 알아보자.

IP Agents

원래 IP는 Intellectual Property를 뜻하며, 지식재산, 혹은 지식재산권을 이야기한다.

Virtuals에서는, 특정 캐릭터를 나타내는 가상의 agent로, 사람들이 친숙하게 느낄 수 있는 대상을 기반으로 한다.

  • Frog, Meme, Trump, Vitalik, Anime 등

이들은 사용자들과의 정서적 연결을 위해 설계되며, 게임, 소셜, 엔터 등에서 흥미를 유도한다.

  • 사용 예시: 가상 인플루언서, 게임NPC, 교육, 이벤트, 마케팅 등

Functional Agents

IP Agent를 서포트하는 agent로, 기능 중심의 작업을 수행하여 UX 최적화를 목표로 한다.

  • 데이터분석, 데이터 처리, 환경분석, 자동화 등

IP Agent가 프론트엔드라면, Functional Agent는 백엔드라고 생각하는 것이 좋다.

  • 사용 예시: AI-agent간 통신, 작업, 알고리즘 실행, player와 상호작용 지원

즉, IP agent는 스토리와 엔터테인먼트 / Functional Agent는 기술적 지원과 UX에 초점을 두고있다고 볼 수 있음.

대표적인 IP Agent인 LUNA와, Functional Agent인 G.A.M.E을 통해 살펴보자.

Agents 예시

Luna - IP Agent

 

AI 걸그룹의 리드보컬인 Luna.

사진은 Luna가 스쿼트를 하는 틱톡 영상이다.

틱톡 50만+ 팔로워를 보유한 디지털 인플루언서이다.

Luna와 상호작용하는 사용자는 아래의 경험을 할 수 있다.

  • 틱톡을 통해 Luna를 접함.
  • Telegram을 통해 Luna와 대화.
  • Roblox에서 함께 게임을 하며 관계를 발전.

단순 인플루언서를 넘어, 사용자 맞춤화된 디지털 인플루언서를 경험할 수 있는 것이다.

 

 

 

 

 

G.A.M.E - Functional Agent

G.A.M.E은 Luna의 백엔드라고 할 수 있다. 전체적인 디자인은 아래와 같다.

https://whitepaper.virtuals.io/what-are-virtual-agents/ip-agents-vs-functional-agents/highlight-g.a.m.e.-functional-agent

 

개발자들이 AI-agent를 API, sdk를 통해 동작시킬 수 있도록 설계된 프로덕트. 이를 통해 AI-agent를 손쉽게 Plug&Play할 수 있는 경량 프레임워크를 제공한다.

 

아래는 위의 그림에 설명되어있는 G.A.M.E의 각 모듈이 어떻게 동작하고 통신하는지에 대한 내용이다.

  • Agent Prompting Interface
    • AI-agent의 Agentic Behavior에 접근하는 게이트웨이 → 이를 통해 G.A.M.E을 통합할 수 있음
  • Perception Subsystem
    • Agent Prompting Interface와 상호작용.
      • Agent Prompting Interface로부터 메시지를 수신해 Agent의 Behavior생성을 위해 Strategic Planning Engine에 전달하는 역할을 수행(request를 전달).
      • 그 반대의 역할도 수행한다(response를 전달).
    • Module과 상호작용
      • action, game state, 또는 sensory information과 같은 여러 feedback 정보들을 Learning Module에 전달.
  • Strategic Planning Engine
    • AI-agent의 고급 의사결정, 계획 수립을 담당
    • High Level Planner
      • Dialogue Processing Module을 통해 반응/대답 등의 반응을 생성함.
    • Low Level Policy
      • High-level의 명령을 해석하고, 실행가능한 action으로 만들어내고, On-chain wallet과 연결하여 이를 실행할 수 있음.
  • Learning Module
    • general knowledge를 생성하기 위해(학습데이터 가공 및 학습을 의미함), feedback 등 information을 분석 및 가공을 함.
    • 이는 Long Term Memory로 전달 및 저장된다.
  • Long Term Memory Processor
    • LTM Processor는 world agent, working memory에서 필요한 정보들을 추출하고, 저장하는 역할을 한다.
    • 기억 유형: Experience, Reflections, Personality, World context, Working memory
    • 프로세스: Importance score, Recency, Relevancy

이처럼, 여러 모듈 간 통신을 통해 학습데이터에 대한 피드백, 상호작용에 대한 결과 생산 등 많은 작업을 수행할 수 있다.


이처럼 1편에서는 Virtuals의 AI-agent가 어떠한 방식으로 작동하는지, 무엇을 하고자 하는 프로토콜인지에 대해 알아보았다. 2편에서는 Virtuals의 AI token을 사면 user들에게 어떠한 이점이 있는지 등, 경제적인 내용을 다뤄보도록 하겠다.

반응형

블록은 이전블록의 해시(prevHash라고 부르도록 하겠다.)와 트랜잭션의 묶음이라고 생각할 수 있다. 해시는 블록의 데이터를 통해 계산되기 때문에 체인의 형태로 구성될 수 있다. 만약, 블록이 생성된 이후에 블록의 데이터를 변경하게 되면, 해당 블록의 블록해시(block hash)가 바뀌고, 이는 이후 생성된 다른 블록들에 영향을 주어 모든 검증자들이 알아차릴 수 있기 때문에, 다음 블록이 모두 무효화되어 임의 변조를 막을 수 있다.

네트워크의 모든 참가자들이 동기화된(Syncronized) 상태(State)를 유지하고, 모든 트랜잭션에 동의를 하기 쉽게 하기 위해 다수의 트랜잭션들을 한 개의 블록으로 묶어서 Commit, agree, Syncronize를 한 번에 처리한다.

출처:  https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf

 

모든 블록들이 적절하게 검증을 받을 수 있도록, 네트워크는 참여자들에게 검증을 할 수 있는 충분한 시간을 부여한다. 트랜잭션은 초당 수십~수백개씩 발생할 수 있지만, 블록은 12초에 한 번 이더리움에서 생성되고 commite된다.

즉, 블록이 없다면, 모든 validator(트랜잭션(혹은 블록)을 검증하는 객체)는 매 초 모든 트랜잭션을 검증해야하며, 네트워크 상태에 따라 트랜잭션이 누락되는 경우에도 이를 검증하고, 블록을 네트워크에 추가해야하기 때문에, 블록을 사용할 때에 비해 Fork의 수가 수없이 많아지게 될 것이다.

(이정도면 블록이 있는 이유에 대해 충분히 알아본 것 같다…!)

블록의 작동 방식

transaction history를 보존하기 위해 블록은 상위 블록에 대한 참조를 가지고있어야 하며(prevHash에 대한 정보가 기록되어야 함), 블록 내에 있는 트랜잭션 또한 엄밀한 과정을 거쳐 블록에 정렬된다.

→ 추후에 더 알아볼 예정

PoS시스템에서, 네트워크에서 무작위로 선택된 검증자(PoS에서는, Proposer라고 부른다.)가 블록을 빌드하면, 이를 전체 네트워크에 Broadcast하게 되고, 합의의 과정 이후에 모든 노드는 이 블록을 블록체인의 끝에 추가하고 새로운 Proposer가 선출되어 다음 블록이 생성되는 과정을 통해 블록 추가해 대한 commitment와 consensus 프로세스를 명시하고 있다.

블록의 구조

slot 블록이 속한 슬롯

proposer_index Proposer의 ID
parent_root prevHash
state_root state root hash
body 블록 데이터를 담고있는 객체 (바로 아래에서 설명)

Body

randao_reveal 다음 block의 Proposer를 선택하기 위한 값(RANDAO seed)

eth1_data deposit contract에 대한 정보
graffiti 블록 태그를 위한 임의의 데이터
proposer_slashings slash당할 validator의 리스트
attester_slashings slash당할 attestor의 리스트
attestations 이 블록에 대한 attestation 리스트 (바로 아래에서 설명)
deposits list of new deposits to the deposit contract
voluntary_exits 네트워크를 떠난 validator 리스트
sync_aggregate light client에게 serve하는 validator subset
execution_payload execution client에서부터 넘어온 정보(트랜잭션 데이터 등) (아래에서 설명)

Attestations

→ list of attestations

aggregation_bits 어느 validator가 이 attesttation에 참여했는지에 대한 목록

data a container with multiple subfields (아래에서 설명)
signature 모든 attester들의 aggregate signature
  • data (in attestation)slot attestation이 실행된 slot
    index validator의 ID
    beacon_block_root 이 object를 포함하는 비콘블록의 루트해시
    source the last justified checkpoint
    target the latest epoch boundary block

Execution Payload header

parent_hash parent block의 hash

fee_recipient 트랜잭션 수수료를 받는 주소
state_root 이 블록으로 인한 state 변화를 적용한 global state의 root hash
receipts_root tx_receipt trie의 root hash
logs_bloom 이벤트로그를 포함하는 데이터 구조
prev_randao random validator selection에 사용된 value (RANDAO seed)
block_number 블록 번호
gas_limit 이 블록에 allow된 최대 gas
gas_used 이 블록에서 사용된 실제 가스
timestamp block time
extra_data arbitrary additional data as raw bytes
base_fee_per_gas base fee value
block_hash Hash of execution block
transactions_root 트랜잭션들의 root hash
withdrawal_root withdrawal 데이터의 root hash

Execution payload

parent_hash parent block의 hash

fee_recipient 트랜잭션 수수료를 받는 주소
state_root 이 블록으로 인한 state 변화를 적용한 global state의 root hash
receipts_root tx_receipt trie의 root hash
logs_bloom 이벤트로그를 포함하는 데이터 구조
prev_randao random validator selection에 사용된 value (RANDAO seed)
block_number 블록 번호
gas_limit 이 블록에 allow된 최대 gas
gas_used 이 블록에서 사용된 실제 가스
timestamp block time
extra_data arbitrary additional data as raw bytes
base_fee_per_gas base fee value
block_hash Hash of execution block
transactions 실행될 트랜잭션들의 리스트
withdrawals withdrawal 객체의 리스트
  • withdrawalsaddress withdraw한 객체의 주소
    amount withdraw한 ETH총량
    index withdrawal index value
    validatorIndex validator index value
  • 스테이킹된 이더를 인출하는것과 관련된 데이터 필드

Blocktime

블록타임(Blocktime)은 블록을 나누는 시간 단위. 이더리움에서는 12초 단위로 시간이 쪼개지며, 이를 slot(슬롯)이라는 시간 단위로 사용한다. 각 slot에서, 랜덤한 프로세스를 거쳐(RANDAO) single validator가 선출되어 블록을 propose한다. 모든 validator가 온라인 상태이고 문제없이 작동한다고 가정했을 때의 blocktime이 12초가 된다. 그러나, 종종 validator가 오프라인상태라면, 해당 검증자의 슬롯은 비워질 수 있다.

Blocksize

블록은 블록 사이즈에 의해 나눠지기도 한다. (Blocktime에서는 한 블록이 몇 초에 한 번 생성되는지를 이야기했다면, 이 말은 한 블록의 사이즈가 얼마나 되는냐는 말이다.) 각 블록의 일반적인 크기는 1500만 gas이며, 네트워크 상태에 따라 증가, 감소가 가능하여 최대 3000만 gas까지 늘어날 수 있다.

Blocksize가 늘어나는 매커니즘

블록의 크기는 한번에 확 증가하는 것이 아닌, 점진적으로 증가/감소하는 방식을 가지고 있다. 그 증가/감소 비율을 최대 $\frac{1}{1024}$의 비율만큼 늘어날 수 있는 것인데, 예를 들어 현재 블록의 크기가 1500만 gas라면, 다음 블록의 최대 크기는 $15,000,000 + (15,000,000/1024==14,648)=15,014,648$ 만큼의 크기를 가질 수 있게 된다는 말이며, 이러한 블록 크기 증가가 여러번 반복되어 최대 30,000,000 gas 크기까지 도달할 수 있다는 말이다.

결과적으로, validator는 합의를 통해 블록의 gas limit을 변경할 수 있으며, 블록의 모든 트랜잭션의 gas 소비량이 블록의 gas limit보다 작을 수 있도록 이를 조절하여야 한다. 블록의 사이즈가 임의대로 커질 수 있다면, 성능이 떨어지는 Full node는 공간 및 속도 요구사항을 충족시키지 못하여 네트워크의 속도를 따라잡을 수 없을 것이다. 블록이 클수록 다음 슬롯에 맞춰 처리하는 데 필요한 컴퓨팅 성능을 더 많이 요구하기 떄문에, 이는 적절히 조절되어야 할 것이다.

반응형

요약)

  1. The merge 업데이트에서 PoW → PoS로 consensus protocol을 변경.
  2. 기존에 사용되던 Casper FFG와 LMD Ghost를 ETH2에 적절히 조합한 PoS consensus algorithm.

Fork-Choice-Rule: Nakamoto consensus (classic)

비트코인과 이더리움 1.0 PoW의 가장 근간이 되는 합의 프로토콜.

다른 말로 Longest Chain Rule이라고도 표현한다. 말그대로 Fork가 발생했을 때, 여러 Fork중, 더 긴 체인을 선택하는 (즉, 더 많은 hash power가 들어간 체인이 나열한 트랜잭션 순서를 valid하다고 인정하는) 프로토콜이다.

이렇게 인정된 체인을 Canonical Chain이라고 부른다.


Safety & Liveness

FLP impossibility: 결정론적(Safety)하고 비동기적인(Liveness)프로세스에서 합의에 이르는 것이 불가능하다는 것

  • Safety: Finality로 fork발생 없이 오직 하나의 블록체인만을 유지할 수 있도록 하는 것.
  • → consensus에 도달하지 못해, 무한 교착상태에 빠질 수 있음
  • Liveness: 단 하나의 consensus에 도달하지 못하더라도, 불완전한 합의를 우선 진행하여 지연없이 새로운 블록을 계속 생성할 수 있는 것.
  • → fork가 발생하여 이중지불문제를 야기할 수 있음

FLP inpossibility로 인해, 이 두 속성이 모두 충족되기 힘들기 때문에, 각 블록체인들은 이 두 속성의 비중을 조절하여 체인의 특성을 결정함.

 


Casper FFG

32block(1 epoch)마다 블록을 Finalize시키는 알고리즘

ETH1(Before The Merge)에서의 Casper FFG

Casper FFG는 이더리움이 PoW인 시절(ETH1)에도 존재하던 프로토콜이었는데, 원래는 그러한 Nakamoto Consensus에 의해 발생한 여러 Fork 중 Canonical Chain을 결정하기 위해 블록을 Finalize시켜 해당 블록을 checkpoint로 쓰기 위해 위해 사용되었다.

따라서, 이로 인해 51%공격 등의 공격이 발생한다고 해도, 체크포인트 이전의 블록은 수정하지 못하도록 하여 블록체인을 보호한다.

합의의 과정에서, 총 Staking Amount중, 자신의 예치금(deposit)이 차지하는 지분만큼 의결권을 행사할 수 있으며, 이 과정에서 전체 Validator의 $\frac{2}{3}$만큼 투표를 받으면, Supermajority Link로 인정받을 수 있으며, 이 Link와 연결된 checkpoint가 다음 checkpoint가 되는 구조이다.

ETH2 (After The Merge)에서의 Casper FFG

Slot, Epoch

The Merge이후, ethereum에서는 block의 개념보다, slot, epoch이라는 개념을 주로 사용하게 된다. 자세히 살펴보면, 1개의 블록(block)은 1개의 슬롯(slot)이라는, 12초의 단위시간으로 표현되며, 이러한 슬롯이 32개 모여 에폭(Epoch)이라는 384초(6.4분)의 단위시간으로 표현된다.

Casper FFG

Casper FFG는 매 32슬롯(1에폭)마다 여러 포크 중 하나의 포크를 선택하도록 하는데, 부모 체크포인트가 여러 자손 체크포인트 중 하나를 선택하도록 하는 것이 Casper FFG의 역할이다.


LMD GHOST

(Last Message Driven Greediest heaviest Observed SubTree)

네트워크 지연 등으로 인해 fork발생 시, fork를 선택하는 알고리즘

참조: Combining GHOST and Casper

Message = Attestation message

Fork가 발생했을 때, 어떤 블록을 기존 체인에 연결할지, Attestation Message를 통해 투표하는 프로토콜.

Combining GHOST and Casper

위 그림에서 사각형으로 표현된 것이 block(또는 slot), 원으로 표현된 것이 Message.

가장 많은 Last Attestation Message가 지지하고 있는 block이 인정되게 된다.

Last Attestation Message?

→ 그림에서 보이는 모든 원들을 말한다. 즉, 몇 번째 블록인지와 상관 없이, 모든, “가장 최근”의 Attestation Message.

이를 통해, 블록체인의 Safety를 어느정도 보장하게 된다.


Gasper

위에서 본 것과 같이, Casper FFG와 LMD Ghost는 모두 결국 Fork중, 어느 Fork를 인정할지를 선택하는 프로토콜이다. 그럼, 왜 이 둘을 구분하여 사용할까.

slot과 slot간의 관계 즉, slot 단위에서 발생하는 fork에 대하여 LMD Ghost에 의해 하나의 fork로 합의된다.

이렇게 만들어진 epoch은 Casper에 의해 체크포인트 블록을 연결(또는 확정)하는 단위로 사용된다. 즉, epoch과 epoch의 관계를 Casper를 통해 결정짓는다.

이러한 epoch과, slot의 개념이 있는 것은 알겠는데, 그래서 어떤 과정을 통해 검증(Validate)를 하는 것일까?

Committees

참조: DSRV Research

  1. 매 slot마다 하나의 Validator집단을 랜덤하게 만든다.
  2. 각 집단을 Committee(위원회)라 부른다.
  3. 각 위원회에서 랜덤하게 한 명의 리더를 선출하여 이 리더는 블록을 제안한다.
  4. 블록 제안자를 포함한 위원회의 모든 validator는 블록을 검증한다.
  5. 한 에폭은 32개의 슬롯으로 이루어져있기 때문에, 전체 validator 집단을 32개로 랜덤하게 쪼개 슬롯에 배정하여 모든 validator가 한 epoch에서 validating에 참여할 수 있도록 함
  6. 한 epoch이 끝나면, 다시 랜덤하게 commitee를 구성하여 위의 과정을 반복한다.

Validate (Block 검증)

LMD GHOST프로토콜에서, 한 명의 block proposer가 해당하는 committee에 블록을 제안하면, 해당 committee를 구성하는 validator들은 블록을 확인하고, 블록에 대한 Attestation Message를 broadcast한다. 이러한 Attestation Message를 통해 지지되는 Fork마다 LMD GHOST점수가 매겨지고, 다음 블록 생성자는 어떤 fork 위에 블록을 생성해야 하는지 결정하게 된다.

위에서 Finalize라는 개념이 등장했었는데, 이는 체크포인트를 확정짓는 과정에 속하게 된다. 여기서, 체크포인트는 각 epoch의 첫 번째 슬롯의 블록으로 설정하여 Finalize과정을 거치도록 한다. 이를 더 자세히 뜯어보자.

class AttestationData(Container):
    slot: Slot # attestation message 전파하는 slot number
    index: CommitteeIndex # validator가 속한 commitee number
    beacon_block_root: Root # fork결정에 대한 attestation message 즉, LMD GHOST
    source: Checkpoint # Casper FFG vote: last justified epoch's first block
    target: Checkpoint # Casper FFG vote: last epoch's first block

위의 코드는 Validator가 committee에 broadcast하는 Attestation message의 구조이다.

source와 target, 그리고 beacon_block_root가 중요한 내용인데, source는 가장 최근에 justificate된 즉, 현재 epoch이전에 인정된 epoch의 첫 번째 블록(체크포인트)를 의미한다. target은 이번 그 체크포인트의 다음 epoch의 체크포인트라고 생각되는 block을 가리킨다. 이를 통해, Casper FFG투표(Supermajority vote)를 진행할 수 있으며, BPFT(비잔틴 장군 문제)에 따라, $\frac{2}{3}$이상의 validator가 동의하면, epoch의 상태가 justified로 변한다. (여기서, justified는 finalized와 다른 개념으로, Finalized되기 이전의 상태를 말한다.)

그렇다면, Finalize는 어떤 과정을 거쳐 진행될 수 있을까?

  1. Epoch0과 Epoch1의 checkpoint간 연결이 justified되었다고 하자.
  2. Epoch2에서 블록을 검증하는 validator들이 Epoch1과 Epoch2의 Supermajority Link를 지지하는 투표를 한다.
  3. 이 투표 비율이 전체 validator 수의 $\frac{2}{3}$이 되면, Epoch1과 Epoch2의 체크포인트 사이에 Supermajority Link가 생성되고, 이 Link가 Justified된다.
  4. 이 과정을 통해, Epoch1은 Epoch0과 Epoch2 모두로부터 Supermajority Link가 생성되어 그 결과, Epoch1에 있는 체크포인트가 Finalize되어 더 이상 변경할 수 없게 된다.

이렇게 Casper FFG와 LMD GHOST가 합쳐져 Gasper가 만들어지게 된다.


추가적인 궁금증🤨

Fork가 발생하는 이유.

Q. 블록체인에서 Fork가 발생하는 이유를 두고, 51%공격, 그리고 네트워크 지연 등 이유로 Fork가 발생하는 것으로 알고 있는데, 한 Slot당 하나의 Committee가 구성되고, 한 Committee에서 한 Proposer가 block을 제안하는 구조에서, 대체 왜 Fork가 발생하는가?

A(Mentor Troy). 현재 이더리움 PoS에서 가장 흔히 fork (reorg)가 발생하는 이유는 네트워크 지연이라고 볼 수 있다. 예를들어, 1번 슬롯에서 A 밸리데이터가 정해진 시간 내에 N번에 해당하는 블록을 만들어서 전파해야하는데, 이 시간 내에 전달받지 못한 경우 이를 Missed로 처리하고 2번 슬롯의 밸리데이터가 만든 블록을 N번 블록으로 포함되게 된다. 그렇지만 일부 밸리데이터들은 A가 만든 블록을 수신했을 수도 있지만, vote를 받지 못했기 때문에 그 뒤로 이어나가지 않을 가능성이 크다. 이런 식으로 Reorg가 발생하곤 한다.

참고자료

https://arxiv.org/pdf/2003.03052

https://medium.com/curg/gasper-casper-ghost-5aa9c226265c

 

반응형

이전 작업증명(PoW)에 이어, 이번에는 비트코인을 구성하는 블록체인 네트워크에 대해 공부해보도록 하자.

 

이번 글에서는, 지금까지 블록체인을 공부하면서 계속 공부했던 블록체인의 구조를 전체적으로 한번 보게될 것 같다. 

블록체인(또는 비트코인구조)에 대한 다른 기초적인 개념이 잘 탑재되어있지 않다면, 이번 장을 따라가기 힘들 수도 있다.(아닐수도 있긴 하다 ㅎ)

 

이 포스팅을 쓰기 전에, 한번 bitcoin의 오픈소스 코드를 조금 읽어보고 왔다. (트랜잭션, 블록 생성 관련 코드)

그렇게 얻은 지식들을 조금 더 공유해보고자 한다.

 

비트코인 오픈소스 깃헙 링크

https://github.com/bitcoin/bitcoin/tree/master

 

GitHub - bitcoin/bitcoin: Bitcoin Core integration/staging tree

Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub.

github.com

비트코인 네트워크가 실행되는 단계는 다음과 같다.
1) 새로운 거래(트랜잭션)가 모든 노드에 전파된다.
2) 각 노드가 새로운 거래(트랜잭션)를 블록에 수집한다.
3) 각 노드가 그 블록에 맞는 난이도의 작업증명(PoW)을 찾는다.
4) 노드가 작업증명(PoW)을 찾으면(문제를 풀면) 해당 블록을 모든 노드에 전파한다.
5) 노드는 모든 거래(트랜잭션)가 유효하며 아직 지급되지 않았을 때만(타임스탬프가 타당하면) 그 블록을 받아들인다(승인한다).
6) 노드는 블록을 받아들였음(승인했음)을 나타내기 위해 앞서 받아들인 블록의 해시를 직전 해시로 사용해 체인의 다음 블록을 생성하는 작업을 수행한다.

 

각 단계들을 천천히 살펴보자.

A가 B에게 1BTC를 송금하는 트랜잭션을 가지고 설명을 해보도록 하겠다.

bitcoin 깃헙 오픈소스의 '/primitives/transaction.h' 부분을 참고했다.

1. 새로운 거래(트랜잭션)가 모든 노드에 전파된다.

우선 한번 트랜잭션이 어떻게 생성되는지도 알아볼까?

주로 비트코인에서 트랜잭션을 생성하는 기능은 비트코인의 고수준 API나 지갑 관련 코드(bitcoin/src/wallet)에 의해 처리된다.

 

  1. 송금을 하는 A는 API가 적용된 application을 통해 송금할 금액과 수신자 주소를 지정한다. 이 정보를 바탕으로 CTxOut객체가 생성되고, CTxIn객체 이전 트랜잭션의 출력(hash값, sign 등)을 참조하여 생성된다.
  2. 지정된 In/Out을 이용하여 'CMutableTransaction'객체가 생성된다. 이 단계에서 트랜잭션에 대한 기본적인 정보들을 생성할 수 있다.
  3. 서명을 하는 단계가 수행된다. 이전 과정에서 입력으로 받은 CTxIn객체 내의 scriptSig 필드를 채우는 과정이 필요하다. (A가 해당 트랜잭션을 수행할 권한이 있음을 증명하는 단계)
  4. 이렇게 만들어진 트랜잭션을 비트코인 네트워크를 구성하는 모든 노드에 전송한다.

2. 각 노드가 새로운 거래(트랜잭션)을 블록에 수집한다.

트랜잭션과 블록의 차이를 알 필요가 있다.

 

트랜잭션: 트랜잭션은 모든 가치전송(송금 등)의 단위이다. 우리가 흔히 말하는 '블록'과는 구분되는 개념이라고 보아야 한다. 트랜잭션은 블록을 구성하는 기본 단위라고도 볼 수 있는데, 그렇다고 블록=가치전송 이다? 이런 개념은 아니다. 블록의 개념을 다시한번 살펴볼까?

 

블록: 블록은 이러한 트랜잭션들을 검증하고, 트랜잭션을 구성하는 데이터들을 저장하기 위한 개념이라고 볼 수 있다. 즉, 트랜잭션이 모여 형성된 데이터의 묶음이라고 말할 수 있다. 우리가 작업증명(PoW)등을 이용하는 것은 트랜잭션 각각에 적용하는 것이 아닌, 블록에 수행하는 것이다.

이런식으로 구성된다고 볼 수 있을것이다. 그렇기 때문에, 블록에서 트랜잭션을 수집한다고 표현한다. 다음 단계로 넘어가보자.

3. 각 노드가 그 블록에 맞는 난이도의 작업증명(PoW)를 찾는다.

이전 포스팅(4. 작업증명)을 통해 작업증명에 대한 이해를 했으면 알겠지만, 모든 블록마다 블록 생성 속도, 하드웨어 속도, 관여도 등의 변화로 인해 난이도는 자동으로(알고리즘에 따라)보정되는 과정을 거친다.

 

작업증명에 대해 설명한 링크를 올려놓겠다.

https://nullorm.tistory.com/40

 

[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (4. 작업증명(PoW))

지난번 포스팅에서 다뤘었다. 대체 PoW가 무엇인가!!! 작업증명이 그래서 뭔데!!! 자. 지금부터 한번 시작해보도록 하자. 라는 말을 쓰는 지금 시점에서, 나는 작업증명이 뭔지 모른다. 따라서, 이

nullorm.tistory.com

따라서, 채굴에 참여하는 모든 노드(CPU)들은 해당 블록을 구성하는 모든 트랜잭션들의 타당성을 작업증명을 통해 검증하는 과정을 거치며, 위에서 말한 "작업증명(PoW)를 찾는다"라는 워딩보다는 "작업증명(PoW)를 한다"라는 워딩을 사용하는 것이 더욱 적합할 것 같다.

 

이 과정을 통해 작업증명에 성공한 채굴자(Miner)는 채굴보상과, 거래 수수료 등을 보상으로 받게 된다. 

4) 노드가 작업증명(PoW)을 찾으면(문제를 풀면) 해당 블록을 모든 노드에 전파한다.

3번 과정을 통해 작업증명에 성공했으면, 해당 블록의 Nonce를 모든 노드에 전파하여, 모든 노드에서 해당 Nonce가 블록의 Nonce와 일치하는지를 판단하는 과정을 거친다. 

 

5) 노드는 모든 거래(트랜잭션)가 유효하며 아직 지급되지 않았을 때만(타임스탬프가 타당하면) 그 블록을 받아들인다(승인한다).

위의 문장을 세 개로 쪼개보자.

1. 모든 거래(트랜잭션)가 유효하며

작업증명(PoW)를 통해 얻은 valid한 Nonce의 타당성을 검사한다.

2. 아직 지급되지 않았을 때만

해당 블록을 구성하는 내부 트랜잭션들에 대한 이중지불 여부를 검사한다.(Timestamp 서버를 사용한다.)

3. 그 블록을 받아들인다.

그 블록이 Valid한 블록이라는 것을 네트워크에 알린다.

 

이 과정에서 블록체인의 51% 해킹이 발생할 수 있는 여지가 있다. 만약, Invalid한 Nonce에 대해 50% 이상의 노드가 동의할 경우, 해당 값이 Valid한 Nonce인 것으로 판단되어 해당 값이 approve될 수 있긴 하다.

 

이렇게 볼 수 있을 것이다. 어렵지 않으므로 넘어가보자.

6) 노드는 블록을 받아들였음(승인했음)을 나타내기 위해 앞서 받아들인 블록의 해시를 직전 해시로 사용해 체인의 다음 블록을 생성하는 작업을 수행한다.

이를 네트워크에 알리는 과정에 대한 설명이다.

5번 과정을 통해 블록을 승인했음을 블록체인 네트워크에 알리기 위해, 어떤 과정을 거치는지를 이야기한다.

워딩 그대로 해석하면 되기에, 부가적인 설명은 생략하도록 하겠다.

 

체인에 대한 이야기(+ 보안: 잘못된 블록이 들어왔을 경우)

노드는 항상 가장 긴 체인을 옳은 것으로 간주하고 그걸 잇는 작업을 지속한다. 동시에 두 노드가 다음 블록의 서로 다른 버전을 전파하면, 일부 노드가 그중 하나 또는 다른 것을 먼저 받을 수 있다. 이때 그들이 먼저 받은 것을 작업하되, 다른 분기 branch도 보관해 그쪽이 더 길어질 때를 대비한다. 이 동수(tie)는 다음 작업증명이 발견될 때 깨져 한쪽 분기가 더 길어지며, 그러면 다른 분기를 작업하던 노드가 더 긴 분기로 전환한다.

전파한 새로운 거래가 반드시 모든 노드에 도달할 필요는 없다. 많은 노드에 도달하는 한, 블록 안에 곧 들어갈 것이다. 블록 전파는 또한 메시지 누락을 허용한다. 노드가 어떤 블록을 받지 못하면 다음 블록을 받고 누락된 것을 알아차릴 때 그걸 요청한다.

 

자주 나오는 이야기이지만, 모든 노드들은 체인의 여러 분기 중에서 가장 긴 체인을 옳은 것으로 간주하도록 설계되어있다.

 

서로 다른 두 노드가 체인을 잇는 다음 블록에 대한 서로 다른 버전을 전파하였을 때, 이를 받는 노드는 이 두 블록을 모두 받을 수 있다. 이 두 블록을 받은 노드는, 그들이 먼저 받은 블록에 대한 검증을 하지만, 다른 블록 또한 reject하지 않고 저장하여 다른 branch가 더 길어질 때를 대비한다(현재 branch가 invalid한 branch일 경우를 대비).

그 다음에는 위에서 서술된 대로, 때마다 더 길어지는 branch를 찾아 타당한 branch를 찾아간다.

 

 

이번 장에서는 비트코인 네트워크에 대한 전반적인 구조를 알아보았다. 솔직한 견해로는, 다른 세부적인 내용이 궁금하지 않다면 이번 포스팅만 봐도 블록체인(또는 비트코인)의 블록, 트랜잭션 구조에 대한 전반적인 이해가 될 것이라고 생각한다.

 

다음 포스팅에서는 채굴 보상(인센티브)에 대해 알아보도록 하자.

반응형

지난 글에서 비트코인 백서(White Paper)를 읽어보며, 비트코인의 이중지불 문제가 무엇이고, 왜 발생했는지 등에 대해 알아보았다.

(아래 링크 참고)

https://nullorm.tistory.com/38

 

[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (1. 초록) / 이중지불 문제

블록체인 공부를 시작했는데, 무엇을 먼저 시작해야할지 모르겠고, 무작정 기술로만 들어가면 중간에 흥미를 잃을 듯 하여 코인들의 목적, 원리 등을 직접 까(open)보면서 공부해보려고 한다. 공

nullorm.tistory.com

이번 글에서는 이중지불 문제를 비트코인에서 어떻게 해결했는지 살펴보도록 하자.

1. 이중지불이 뭘까?

짚어보지도 않고 넘어가는건 좀 그래서 일단 간단하게 짚고만 넘어가겠다.

 

이중지불(double spending)은 말 그대로 하나의 디지털 통화 단위를 두 번 이상 지출하는 행위를 말한다.

정보 공간의 특성으로 인해 물리적 공간과 비교할 때 디지털 토큰 또는 자산은 무한히 복제 또는 위조가 가능할 수 있다. 

(예시1: 동일한 주식, etf 등이 ctrl+c/v 된다고 간단하게 생각하면 된다.) 

(예시2: A가 B, C에게 1달러를 보내고 싶은데, 1달러라고 보증되어있는 파일을 B와 C에게 모두 보내버리면, 돈이 복사되는 것이다.)

이는 P2P 방식의 거래에 있어 근본적인 골칫거리였다. (돈이 무한 복사가 되면 아무래도..) 

 

따라서 기존의 시스템에서는 은행이라는 중개기권을 두고, "신뢰받는" 중개기관이 보관하고 있는 기존 데이터를 기반으로 개인이 데이터를 임의로 복사할 수 없게 만들었다.

 

2. 비트코인 백서: 타임스탬프 서버(Timestamp Server)

사토시는 중개기관이 없는 전자화폐 거래 시스템에 있어 가장 큰 문제였던 이중지불 문제를 타임스탬프 서버라는 간단한 개념을 통해 해결하였다.

우리가 제안하는 솔루션은 타임스탬프 서버로 시작한다. 타임스탬프 서버는 타임스탬프가 찍힌 항목 블록의 해 시값을 가져가고 그 값을 신문이나 유즈넷(Usenet) 게시물처럼 널리 배포하는 식으로 작동한다.
이 타임스탬프는 그 데이터가 해시 처리에 들어가기 위해 명백히 그 시점에 존재했음을 증명한다.

1. 타임스탬프란?

그대로 직역하면 시간 도장 이라는 의미인데 말 그대로 특정한 사건 시점에 도장을 찍는다고 보면 될 것 같다. 사건이 발생해서 컴퓨터에 기록된 시간을 뜻하는데, 주로 어떤 사건이 발생한 시간을 비교하거나 두 작업 사이에 어느정도의 시간이 경과되었는지를 계산하기 위해 사용된다.

그런데, 이렇게 '시간'이라는 개념만 가지고 비트코인의 타임스탬프를 정의하기는 쉽지 않다. p2p(person-to-person)거래의 특성상, 타임스탬프가 찍힌다고 하면 각 개인의 컴퓨터 시간 간의 차이가 있을 수 있기 때문에 이것에만 의존한다면 수많은 문제가 발생하게 될 것이다. 따라서, 비트코인에서의 타임스탬프는 '시간'이 아닌, '순서'의 개념으로 봐야할 듯 하다.즉, 이렇다고 볼 수 있겠다.

 

이러한 타임스탬프가 어떻게 이중지불 문제를 해결한 것일까?

위의 예시 중 하나를 다시 가져와보자. 

A가 B, C에게 1달러를 보내고 싶은데, 1달러라고 보증되어있는 파일을 B와 C에게 모두 보내버리면 이중지불이 가능해진다.

이 문제를 타임스탬프의 개념을 가지고 해결해보자. 

A가 B와 C에게 동시에 1달러를 송금했는데, 트랜잭션 처리 순서에 따라 둘중 어느 데이터이든지 간에 먼저 처리된 트랜잭션이 먼저 체인에 올라갔을 것이다. 아까도 말했듯, 이 타임스탬프는 시간이 아니라 순서를 나타낸다고 하였다.

따라서, B에게 송금이 먼저 이루어졌을 때, C에게도 송금을 하려는 시도를 하게 된다면, 이전 블록에 A-B간 트랜잭션이 올라가있을 것이기 때문에, 해당 트랜잭션은 체인의 맨 끝에 추가되지 않고, 버려지게 되는 것이다.

 

네트워크의 입장에서 말해보자면, 네트워크는 두 트랜잭션 중 어느 것이 먼저 블록에 포함되었는지를 확인할 수 있으며, 첫 번째 트랜잭션(A-B)가 블록체인에 기록되면, 그 이후에 시도되는 동일 자산에 대한 모든 다른 트랜잭션은 유효하지 않게 된다.

 

이렇게, 어떻게 타임스탬프라는 개념이 비트코인의 이중지불 문제를 해결하게 되었는지 알아보았다. 

그렇다면, 이 타임스탬프 서버가 어떻게 구성되고 만들어지는지 알아보자.

각 타임스탬프는 그 해시 안에 직전 타임스탬프를 포함해 체인을 형성하며, 추가되는 각 타임스탬프가 그 이전 타임스탬프를 강화한다.

 

위의 말을 보면, 타임스탬프가 만들어지는 방식과, 이것이 비트코인 네트워크를 강화하는 것에 대해 이야기하고 있다.

이를 중심주제로 잡고 설명해보겠다. 

 

비트코인백서: https://bitcoin.org/files/bitcoin-paper/bitcoin_ko.pdf

백서에 이렇게 설명되어있어서 한번 가져와보았다.

 

내가 설명하기 편하게 다시 그림을 그려보았다.

위와 같은 구조로 블록체인 타임스탬프가 이루어져있다고 볼 수 있을 것 같다.

1. 구성 방식

비트코인의 블록타임(BLock Time)은 약 10분정도이다. 10분에 한 번씩 새로운 블록이 생성된다는 이야기이다. 그래서 비트코인 네트워크에서는 여러 트랜잭션들을 한데 모아 트랜잭션들을 처리하는데, 위의 그림대로 보자면, 이전블럭(블록1)의 해시값고, 추가하고자 하는 블록(블록2)를 같이 해싱하여 다음 블록(블록2)로 만들어버린다. 이러한 방식으로 계속해서 체인을 이어나가는 것이다. 자, 그런데 이전 블록의 해시를 왜 다음 블록을 구성하는 데 넣는 것일까?

이어서 살펴보도록 하겠다.

2. 어떻게 타임스탬프를 '강화' 한다는 것일까?

다음 블록을 구성하는 데 이전 블록의 해시값을 넣는 이유는 바로, 타임스탬프는 '시간'이 아닌, '순서'를 기록하는 것이기 때문이다. 순서를 기록함으로써 이중지불 문제가 해결되기 때문. 그런데, 이제 또 문제가 발생할 수 있다. 만약, 악의적인 공격자가 이중지불을 하기 위해 이전 트랜잭션의 정보가 들어있는 블록의 정보를 바꿔버린다면? 

그래서 위와 같은 방식을 사용하는 것이기도 하다.

붉게 표시된 블록 정보가 악의적으로 변경된다고 하면, 블록2의 정보는 달라지게 될 것이다. 그런데, 그렇게 된다면 블록2의 해시값은 기존에 존재하던 해시값과 달라지게 될 것이다. 그렇다면, 공격자는 블록2의 값을 변경하기 위해 (4. 작업증명) 에서 다룬 작업증명의 과정을 거쳐 본인의 data2를 블록2에 삽입해야 하고, 그렇게 되면 이후에 있는 블록3, 블록4 ... 모든 블록의 데이터를 다시 검증하고 체인에 추가하는 과정을 거쳐야 하는 것이다.

이러한 과정을 성공시키는 것은 불가능에 가깝기 때문에 (실제로 이러한 방법으로 데이터를 위조한 사례가 현재까지 0건이다.) 타임스탬프는 거의 완벽한 보안성을 띠고있다고 할 수 있으며, 이런 암호학적 방법이 기존의 은행을 신뢰하는 것보다 더욱 강력하다는 것이 사토시의 의견이다.

 

작업 증명에 대한 내용은 이미 다룬 적이 있기 때문에 그 내용이 궁금하다면 들어가서 읽어보는 것을 추천한다.

 

[Bitcoin] 블록체인 기술공부 / 비트코인 백서 공부 (4. 작업증명(PoW))

지난번 포스팅에서 다뤘었다. 대체 PoW가 무엇인가!!! 작업증명이 그래서 뭔데!!! 자. 지금부터 한번 시작해보도록 하자. 라는 말을 쓰는 지금 시점에서, 나는 작업증명이 뭔지 모른다. 따라서, 이

nullorm.tistory.com

반응형

지난편에 이어서 이번 포스팅에서는 비트코인의 거래(Transaction)에 대해 한번 공부해보도록 해야겠다.

 

등장하는 단어들이 다소 어려운 감이 없지않아 있기 때문에, 정말 하나하나 다 설명하면서 넘어가보도록 하겠다.

 

비트코인 백서: 2. 거래

우리는 전자 화폐(electronic coin)를 디지털 서명의 체인으로 정의한다.

 

비트코인에서 정의한 전자화폐(가상화폐)는 바로 '디지털 서명의 체인'이라는 방식인 것이다. 이게 무슨 말일까?

우선 그 전에, 디지털 서명을 전자서명과 헷갈릴 수 있을 것 같아 이 둘의 차이점을 짚으면서 개념을 확인해보자. 차이점이라기 보다는 범주의 차이? 정도이다. 전자서명 안에 디지털서명이 있다.

전자서명?

미 전자 상거래법에서는 전자 서명을 전자적 수단에 의해 생성,전송,전달,수신 또는 저장되는 서명의 역할로 계약을 위해 포함되거나 논리적으로 만들어진 기호, 또는 프로세스라고 정의하고 있음.

즉, 비밀번호, PIN, 이메일 인증등이 포함된다고 할 수 있음.

디지털서명?

해싱, 서명, 검증 이 세 가지 알고리즘으로 이루어진 전자서명의 일종이라고 볼 수 있음. 디지털서명에 대해 좀 더 자세히 다루고 싶긴 하지만, 거기까지 가면 불필요하게 내용이 깊어질 듯 하여 일단은 넘어가도록 하겠다.

어쨋든, 디지털 서명이 어떤 역할을 하는지 알아보자면,

  1. 무결성 보장: 거래 데이터가 서명 과정을 통해 암호화되므로, 데이터가 전송 중에 변경되면 서명이 무효화됩니다. 이는 거래의 무결성을 보장한다.
  2. 비역전성: 한 번 거래가 서명되고 네트워크에 의해 확인되면, 거래를 실행한 사람은 그 거래를 부인할 수 없다.

계속 읽다보면 알겠지만, 비트코인은 화폐의 개념보다는, 디지털 서명과 이전 기록들(체인들)의 연속체라는 개념으로 받아들이는 것이 좋을 것이다. 

 

일단 이정도만 알고, 다음 과정으로 넘어가보자.

출처:  https://bitcoin.org/files/bitcoin-paper/bitcoin_ko.pdf

 

각 화폐 소유자는 자신에게 그 화폐를 보낸 직 전 거래 명세(the previous transaction) 및 그 화폐를 받는 다음 소유자의 공개키 (the public key of the next owner)를 해시 처리한 값에 디지털 방식으로 서명하고 이를 화폐 끝에 추가해 다음 소유자에게 송금한다. 수취인(payee)은 그 서명을 검증해 화폐 소유권의 체인을 검증할 수 있다.

 

잠깐 개념정리

1. 공개키와 개인키

다소 어려운 문장들인 것 같다. 천천히 살펴보자. 우선 여기에 공개키, 개인키라는 용어가 등장하는데, 비트코인에서는 타원곡선 디지털 서명 알고리즘(ECDSA: Eliptic Curve Digital Signature Algorithm)을 이용하여 전자서명(디지털서명)을 수행한다. 이 때 사용되는 key들이 바로 위 그림에 등장하는 공개키와 개인키인 것이다.

공개키는 같은 네트워크의 모든 참여자들이 알 수 있도록 하는 키이며 (검증 등에 사용된다.)

개인키는 본인 이외에는 아무도 몰라야 하는 키이다.(서명 등에 활용된다. )

 

2. 해시

비트코인에서의 해시(Hash)는 암호학적 해시(Cryptographical Hash)라고도 부르는데, 암호학적으로 무결?한 해시라는 말인 것 같다. 기본만 말하자면 해시는 일방향함수라고 할 수 있다. 즉, 역함수가 존재하지 않는 함수인데, 랜덤한 길이의 입력값에 대해 항상 같은 길이의 결과를 출력하는 알고리즘이라고 볼 수 있겠다. 비트코인에서 사용하는 해시알고리즘인 SHA-256의 경우, 랜덤한 길이의 Input에 대해 256-bit 길이의 출력값을 뱉는다.

 

그림이 너무 위에 있어 다시 그림을 가져왔다. 

출처:  https://bitcoin.org/files/bitcoin-paper/bitcoin_ko.pdf

 

위 그림에서 왼쪽부터 user 1, 2, 3이라고 해보자.

user1은 user2에게 비트코인을 송금하는 트랜잭션을 수행하고 싶다.

이 경우, 위에서 설명한대로 직전 거래 명세(user1이 가지고 있는 비트코인 거래 data: 위 그림에서는 첫 번째 블록에 대한 데이터이다.) + 다음 소유자(수취인)의 공개키(user2의 공개키)를 SHA-256으로 해싱하여 그 값을 본인(user 1)의 개인키를 이용하여 ECDSA 알고리즘에 서명하여 다음 소유자(user2)에게 송금한다.

그리고, 다음 소유자인 user2는 user1의 공개키를 이용하여 검증할 수 있다.

 

굵게 표시한 부분이 이해가 좀 힘들 수 있다. 그런데... 이정도 설명이 최선인 듯 하여 두세번 더 읽어보며 이해해보기 바란다. 

 

문제 및 해결?

이 과정의 문제는 화폐 소유자 가운데 이중지불(double spending)하지 않은 한 사람을 수취인(user2)가 검증할 수 없다는 점이다. 이에 대한 기존 사회의 솔루션은 신뢰받는 중앙통제기관이나 조폐국을 세우고 모든 거래마다 이중지급 여부를 점검하는 것이다. 거래를 마칠 때마다 이 화폐는 조폐국으로 회수되어 새로운 화폐로 발행돼야하며, 조폐국에서 직접 발행된 화폐만이 이중지급되지 않았다는 신뢰를 받는다(여러 인증 수단을 통해서...)

 

이 솔루션을 적용할 때 문제는 마치 은행처럼 모든 거래가 거쳐가야 하는 조폐국 운영 회사 또는 기관에 전체 통화체계의 운명이 달려있다는 것이다.

 

따라서 비트코인에는 직전화폐(이전 거래내역) 소유자가 앞서 어떤 거래에도 서명하지 않았음을 수취인에게 알릴 수단이 필요하다. 이런 목적에 따라 비트코인은 가장 앞선(가장 먼저 실행된) 거래 하나만을 인정하고, 뒤따르는 동일한 출처의 이중지급 시도를 모두 무시하도록 하는 솔루션이 필요하다.

 

이중지급 거래가 없음을 확인할 유일한 방법은 모든 거래를 인식하는 것 뿐이다. 조폐국 기반 모델에서, 그들은 모든 거래를 인식했고(서버 등의 중앙 데이터베이스를 통해.) 어느 거래라 최초의 거래인지를 인식하고 결정했다.

 

신뢰받는 제삼자 없이 이 방식을 달성하려면, 거래는 1. 공개적으로 알려져야하고, 2. 참가자가 받은 거래 순서의 이력(코인 송금)에 합의하는 시스템이 필요하다.

 

또한, 수취인(user2)에게는 각 거래 당시 그게 최초로 받은 것이라고 노드 다수가 동의했다는 증명이 필요하다. 

 

이를 해결하는 것이 다음 챕터에서 다룰 타임스탬프 서버이다.

반응형

지난번 포스팅에서 다뤘었다. 

대체 PoW가 무엇인가!!! 작업증명이 그래서 뭔데!!!

자. 지금부터 한번 시작해보도록 하자. 라는 말을 쓰는 지금 시점에서, 나는 작업증명이 뭔지 모른다.

따라서, 이 글을 읽는 사람들에게 누구보다 모르는 사람의 관점에서 잘 설명할 수 있지 않을까? (라는 희망.)

 

1. 서론

블록체인 네트워크에서 비트코인은 블록체인에 새로운 블록을 추가하는 방식으로 조폐(화폐를 제조) 및 송금을 한다.

작업증명은 이 조폐 및 송금에서 사용되는 트랜잭션(Transaction: 거래)시에 이를 거래하는 방법이다. 

나카모토 사토시의 비트코인 백서에는 이런 말이 있었다(비트코인 백서 서론)

필요한 것은 신뢰 대신 암호학적 증명(cryptographic proof)에 기반해, 거래 의사가 있는 두 당사자가 신뢰받는 제삼 자를 찾지 않고 서로 직접 거래하게 하는 전자 결제 시스템이다.

 

즉, 거래를 중개하는 중개 플랫폼(은행 등)을 신뢰해야만 개인 간의 거래가 가능했던 이전의 방식이 아닌, 암호학적 증명에 기반하겠다는 말이다. 이는 곧, 사람, 시스템을 신뢰하는 데에는 어떻게든 오류가 생길 수 있으니, 절대적인 수학을 믿겠다는 말로 들린다. 

 

2008년 글로벌 금융위기 사태 직후, 금융위기 조사위원회(FCIC)는 525페이지 분량의 보고서에 이런 말이 있다.

"당시의 위기는 인간의 행동과 무대책의 결광지, 천재지변이나 컴퓨터 모델 문제가 아니다. 셰익스피어를 인용하자면 잘못은 저 별들이 아니라 우리에게 있다." 즉, 2009년의 나카모토 사토시는 인간에 의해 만들어진 금융시스템을 신뢰하기보다는, 보다 믿을 수 있는 수학적(암호학적 증명) 방법에 기댔다고 볼 수 있겠다.

 

그렇다면, PoW는 대체 뭘까?

 

 1. PoW(Proof of Work: 작업증명)

비트코인의 전체적인 구조를 살펴보자.

자, 시장이 처음 생기면 일단 어떻게 해야하는가?

1. 화폐를 만든다(찍는다)

2. 화폐를 시장에 공급한다.

3. 시장 구성원들이 화폐와 재화를 거래하며 화폐를 거래한다.

전체적으로 보면 이러한 구조가 될 것이다. 그런데, 각각의 단계를 어떠한 주체가 담당하는지 살펴보자.

 

1. 중앙은행에서 화폐를 발행한다.

2. 은행이 시장에 화폐를 공급한다.

3. 구성원들이 화폐를 거래한다(전자화폐의 경우, 이중지불문제와 보안을 위해 은행의 중개가 필요)

결국, 모든 과정에서 은행은 필수불가결의 요소이다.

하지만, 비트코인은 무엇인가?

바로 은행이 존재하지 않는, 은행을 신뢰하지 않는, 수학을 믿는 전자화폐이다. 이러한 과정들에서, 은행을 대신할 수 있는 요소로 등장하는 것이 바로 PoW, 작업증명이다.

 

작업증명이 비트코인에서 어떠한 기능을 하는지 가볍게 일단 한번 보자.

1. 채굴자는 화폐를 발행하고 이를 시장에 공급한다.(물론 바로 공급을 하지 않을 수 있겠지만.. 이들도 돈을 벌어야지)

2. 구성원들이 화폐를 거래한다.

 

해당 두 과정이 위의 세 과정을 압축했다고 볼 수 있다. 작업증명(PoW)는 이 두 과정 모두에서 작동한다.

 

우선, 조폐(1번)의 과정에서는, 화폐 발행인(채굴자)에게 일(채굴)을 했다는 것을 증명하도록 하여 화폐를 발행한다.

중앙집권화되지 않은 탈중앙화된 블록체인의 조폐 과정에서는 처음 만들어진 알고리즘 이외에는 누가 얼마의 화폐를 받을 지 결정할 수 있는 중앙 권력이 없기 때문에 모든 참여자들이 자동으로 동의할 수 있는 방법이 필요하다.

 

그렇다면, 채굴자는 어떤 문제를, 어떤 해시함수를 계산한다는 것일까? 간단하게 그림으로 한 번 알아보자.

비트코인의 작업증명 방식을 간단하게 그림으로 나타내보았다.

우선, 작업증명은 SHA-256과 같은 해시연산을 거쳐 이루어지는데, 

과정은 이러하다.

Hash(이전 블록의 해시값 || 생성할 블록의 트랜잭션 data || 임의의 Random한 Nonce) < 목표값

을 달성할 경우, 작업증명에 성공했다고 보는 것이다.

이와 관련하여 백서에서는 어떻게 이야기하는지 살펴보자.

우리는 타임스탬프 네트워크용으로 블록의 해시에 주어진 0 비트들을 모두 발견할 때까지 블록 안에 임시값을 증가시키는(incrementing a nonce) 것으로 작업증명을 구현했다.

 

이 말이 위에서 한 말과 같은 말로 받아들이면 될 것이다.

이게 대체 뭔 과정이길래 이정도만으로도 작업증명이 된다는 것일까?

답은 바로 Hash함수의 일방향적 특성에 있다.

 

수학적(암호학적)으로, 해시(Hash)함수는 일방향함수이기 때문에, 이를 역산하는 것이 무차별 대입(Brute Force)이외에는 방법이 없다는 점에 착안하여, 모든 채굴자가 해시함수를 계산해 가장 먼저 계산한 사람이 새로 발행되는 비트코인을 받아가는 구조이다.

 

또한 작업증명(PoW)는, 다수결의 체인의 대표성을 결정하는 문제도 해결한다. 만약, 1 IP당, 1표에 기반한 다수결로 검증을 진행하게 된다면, 한번에 수많은 IP를 할당할 수 있는 누군가(악의적인 공격자)에 의해 해당 네트워크 전체가 장악될 수 있다. 위에서 소개한 다수결은 기본적으로 CPU당 1표이다. 다수결의 결과는 가장 많은 자원이 사용된 작업증명들의 가장 긴 체인이 된다(즉, Hash Rate가 가장 높은 체인이 가장 긴 체인이 된다.) 정직한 노드들에 의해 다수의 CPU파워가 통제된다면, 가장 정직한 체인이 가장 빠르게 늘어나 다른 경쟁 체인들을 압도할 것이다.

 

또한, 과거 블록을 수정하려면 공격자는 해당 과거 블록의 값에 대한 작업증명을 재수행해야하고, ( Hash(해당 블록의 이전 블록 해시 값 + 변경하고자 하는 데이터 + Nonce) 를 다시 해야함.) 또한, 해당 블록 이후의 모든 타임스탬프의 블록에 대하여 모든 연산을 재수행해야 하는 문제가 생긴다. 또한, 이러한 작업을 가장 정직한 노드들의 작업 속도를 따라잡아야 그것이 가장 무결한 노드라는 것을 인정받을 수 있다. 

따라서, 비트코인은 그 구조상 블록의 수가 늘어날수록 블록의 위/변조가능성은 거의 0에 수렴하게 된다는 것을 알 수 있다.

 

또한, 실제로 발생한 문제이기도 하지만, 채굴자들은 자원을 아끼기 위해 기존 CPU의 수만배 파워를 내는 채굴기를 개발해내었다. 이러한 상황에서 채굴의 난이도는 상대적으로 쉬워질 수 밖에 없기 떄문에, 초기 알고리즘은 채굴의 난이도 (위 그림에서는 목표 값)를 시간당 평균 블록 수에 따른 평균 목표값을 조정하여 결정하도록 하였다.

즉, 블록들이 너무 빠르게 생성된다면 채굴 난이도는 높아진다는 것이다(목표값이 낮아진다는 것이다.)

 

3. 마치며...

이렇게 작업증명에 대한 기본적인 개념들을 다루어보았다.

다소 수학적인 내용이 등장할 것이라고 예상했었지만, 해시함수 이외에는(이것도 별 수학적으로 접근하지는 않았지만...) 그런 내용은 없었던 것 같다.

작업증명(Proof of Work) 이외에도 지분증명(Proof of Stake)라는 개념이 존재하는데, 이는 나아아중에 다뤄보도록 하겠다.

 

글 읽어주셔서 감사하옵니다^^

 

반응형

얼마 전, 업비트를 돌아다니다가 우연히 '에어드랍'이라는 용어를 보게 되었다.

전부터 계속 들리는 말이라서 인지는 하고있었는데, 갑자기 문득 정확한 뜻이 뭔지 알아보고싶어졌다.

업비트의 돈다무 NFT 에어드랍 공지

 

암튼, 그 뜻을 보면, 에어드랍(airdrop)이란 공중(air)에서 떨어뜨린다(drop)는 뜻으로서, 기존 암호화폐 소유자들에게 무상으로 코인을 배분하여 지급하는 행위를 말한다.

주식의 무상증자, 배당락과 비슷한 뜻으로 쓰인다고 한다.

 

스냅샷(Snapshot)

그런데, 이런 에어드랍과 함께 쓰이는 스냅샷이라는 용어도 있는데, 이는 에어드랍을 해줄 유저를 인증하는 것과 같다고 볼 수 있다. 

에어드랍을 하게 될 경우, 어떠한 코인을 가지고 있는 유저에게 에어드랍을 해주게 되는데, 그 코인을 가지고 있는지 여부를 인증하는 것이다. 스냡샷을 통해 코인을 가지고 있다는 것이 인증 되면, 에어드랍을 받을 수 있게 된다.

이런 이유로, 스냅샷 전에 코인 가격이 상승하고, 이후에 하락하는 것이 보통이다.

 

반응형

블록체인 공부를 시작했는데, 무엇을 먼저 시작해야할지 모르겠고, 무작정 기술로만 들어가면 중간에 흥미를 잃을 듯 하여 코인들의 목적, 원리 등을 직접 까(open)보면서 공부해보려고 한다.

 

공부를 하는 것이기 때문에 "~인 것으로 보인다"라는 워딩이 많이 들어가는건 양해해주시길..

 

또한 이번 글에서는 개요 및 초록, 그리고 몇 중요한 개념들에 대해서만 정리해보고 다음 글부터 본격적으로 시작해보려 한다.

 

1. 개요

비트코인은 가명의 기술자 '나카모토 사토시'가 블록체인 기술을 기반으로 개발한 최초의 디지털 자산. 기존 화폐(원, 달러)와 달리 정부, 은행 등의 개입 없이 미리 만들어진 알고리즘에 의해서만 발행되며, 거래 내역은 P2P네트워크에 참여한 사용자들에 의해 검증 및 관리되는 구조이다.

재래 통화의 근본적인 문제는 그것이 작동하게 하는데 필요한 모든 신뢰입니다. 중앙은행은 통화 가치를 떨어뜨리지 않도록 신뢰할 수 있어야 하지만, 화폐 통화의 역사는 그 신뢰의 위반으로 가득합니다. -나카모토 사토시

2. 비트코인 백서

2-1. 백서가 뭐지

백서(White Paper).

공식 문서라는 뜻으로 불린다. 보통 정부나 기관의 공식 문서들을 보면 흰 종이에 출력되어있어서 이런 이름으로 불리는 것 같다.

 

https://bitcoin.org/files/bitcoin-paper/bitcoin_ko.pdf

비트코인 백서 한글버전이다.

 

한번 제대로 읽어보자. 블록체인에 필요한 여러가지 기초적인 개념들이 등장하기 때문에 같이 따라가보자.

2-2. 초록

우선 초록은, 학술논문과 같은 문서의 시작 부분에 작성 목적 및 주요 결론 등을 요약하여 설명하는 글이다.

이를 읽어보면, 나카모토 사토시라는 사람이 어떠한 목적으로 비트코인을 개발했는지 알 수 있다.

 

전적으로 개인 대 개인 버전인 전자 화폐(Electronic Cash)는 금융기관을 거치지 않고 한쪽에서 다른 쪽으로 직접 전달되는 온라인 결제(payments)를 실현한다. 전자 서명은 솔루션 일부를 제공하지 만, 이중 지급(double-spending)을 막기 위해 여전히 신뢰받는 제삼자(trusted third party)를 둬야 한다면 그 주된 이점을 잃는다. 우리는 개인 대 개인 네트워크를 사용해 이중 지급 문제를 해결하는 솔루션을 제안한다.

즉, 기존에 사용되던 전자 화폐(인터넷 금융거래, 디지털 금 거래 등을 말하는 것으로 보인다.)의 경우에도, P2P거래가 가능했지만, 이 역시 이중지불 문제를 해결 위해 서드파티의 개입(기관, 플랫폼 등)이 필요했기 때문에 진정한 P2P 즉, 탈 중앙성이 실현되기 어려웠다. 따라서 이중지불의 문제가 없는 P2P 솔루션으로 비트코인을 제안하였다.

 

여기에서 주목하고 넘어가야 할 말은 마지막줄의 '네트워크'라는 개념으로 보인다. 

여기서 말하는 네트워크란, 현재의 블록체인의 기반을 이루고 있는 블록체인 네트워크를 말하는 것 같다.

 

그런데, 이중 지급 문제를 해결하겠다고 하는데, 기존의 문제라던 이중 지급이 뭘까?

2-2-1. 이중지불 문제

이중지불(double spending)은 말 그대로 하나의 디지털 통화 단위를 두 번 이상 지출하는 행위를 말한다.

정보 공간의 특성으로 인해 물리적 공간과 비교할 때 디지털 토큰 또는 자산은 무한히 복제 또는 위조가 가능할 수 있다. 

(예시1: 동일한 주식, etf 등이 ctrl+c/v 된다고 간단하게 생각하면 된다.) 

(예시2: A가 B, C에게 1달러를 보내고 싶은데, 1달러라고 보증되어있는 파일을 B와 C에게 모두 보내버리면, 돈이 복사되는 것이다.)

이는 P2P 방식의 거래에 있어 근본적인 골칫거리였다. (돈이 무한 복사가 되면 아무래도..) 

따라서 기존의 시스템에서는 은행이라는 중개기권을 두고, "신뢰받는" 중개기관이 보관하고 있는 기존 데이터를 기반으로 개인이 데이터를 임의로 복사할 수 없게 만들었다.

 

사토시는 이렇게 생각한 것 같다 - 이중지불 문제로 인해 이를 해결하려는 중개기관이 생겨났고, 그들은 수수료라는 개념을 통해 거래비용을 발생시킨다. 이를 없애기 위해 정말 순수한 개인간의, 탈중앙화된 거래시스템을 만들어보자. 라는 내용으로 백서가 시작한다.

 

다시 돌아와서, 좀 더 읽어보자.

이 네트워크가 거래를 해시한 타임스탬프를 일련의 해시 기반 작업증명 proof-of-work 체인에 찍고, 이 작업증명을 재수행하지 않고서는 변경할 수 없는 기록을 생성한다. 가장 긴 체인은 목격 된 사건의 순서를 증명하는 동시에 그게 가장 큰 CPU 파워 풀에서 비롯했음을 증명하는 역할을 한다. 이 네트워크를 공격하는 데 협력하지 않는 노드가 CPU 파워 대부분을 제어하는 한, 가장 긴 체인을 생성하며 공격자를 압도할 것이다.

 

쉽게 말해, 거래를 해시한 타임스탬프(시간을 기록한다 보다는 시간 순서를 기록한다 라고 봐야함.) 를 해시 증명 기반의 PoW(Proof of Work:작업증명)를 통해 PoW를 재수행하지 않고는 변경이 불가능한 기록을 생성한다.

PoW라는 기술에 대해서는 추후 더 자세히 알아보도록 하자.(내용이 길어질 듯 하여...)

체인의 가장 긴 체인에서는 시간순서를 증명하며, 이는 가장 강한 CPU 파워를 가진 풀에서 비롯된 체인임을 증명한다.

다른 해설에 따르면, 네트워크 공격에 협력하지 않는 노드(채굴자 또는 네트워크 구성원)이 과반 이상의 CPU 파워(또는 해시레이트)를 가진 상황이라면, 이 노드들이 가장 긴 체인을 만들어내며, 이는 공격자보다 앞선다고 한다.

 

PoW와 작업증명에 대한 내용은 추후 다시 공부해서 추가로 올리도록 하겠다.

계속 해보자.

이 네트워크 자체는 최소한의 구조만 요구한다. 메 시지는 최선의 노력을 기반으로 전파되고(Broadcast),
노드는 네트워크를 마음대로 떠났다가 재합류 할 수 있으며,
자신이 빠진 사이에 일어난 일의 증명으로 가장 긴 작업증명 체인을 받아들인다

 

초록의 가장 마지막 부분이다. 이 부분에는 기술적인 설명이 없기 때문에, 워딩 그대로 받아들이면 될 듯 하다.

 

3. 마치며..

우선 이 글에서는 비트코인의 목적과 같은 중요한 내용 및 앞으로 등장하게 될 개념들에 대해 알아보았다. 

처음으로 이런 리서칭 글을 작성해서 가독성이 어떨지는 모르겠지만,,, 노력해보겠습니다,,,

 

앞으로 쓸 포스팅 목록(이번 글과 관련된):

1. PoW에 대한 기술적 내용

2. 작업증명에 대한 내용 (1번과 합칠 수 있음)

3. 다음 장.(백서 이어서 계속.) 

반응형

+ Recent posts