블록체인 탐험기 #1 블록체인이란 무엇인가요?

AI Network
11 min readJan 11, 2022

--

지난번에는 블록체인 탐험기 시리즈의 프롤로그가 발행되었습니다. 프롤로그에서는 최신 이슈들을 통해 블록체인에 대한 관심이 높아지는 이유들을 살펴보았는데요, 이번 글에서는 블록체인의 기술적 내용에 대해 알아보는 시간을 가져보겠습니다.

블록체인의 등장

“블록체인”이라는 개념은 2008년 사토시 나가모토가 제안한 비트코인에 의해서 처음 제시되었습니다. 지금까지도 일상생활에서 사용되는 대부분의 거래 시스템은 반드시 제3의 기관을 통해서 진행되고 있습니다. 예를 들어, A가 B에게 10,000원을 송금을 하는 상황이라고 가정해보겠습니다. 송금을 하기 위해서는 거래 당사자인 A와 B가 아닌 제3의 기관인 “은행”을 통해 송금의 내용이 맞는지 확인을 받아야 송금이 진행되는 구조를 가지고 있습니다.

이와달리 사토시 나가모토가 발표한 비트코인 백서에서는 은행과 같은 제 3의 기관이 개입하지 않는 P2P(Peer-To-Peer) 거래방법을 제안하였고, 이중지불문제, 신뢰성 문제 등 금융거래에서 발생될 수 있는 많은 문제점들도 해결하였습니다. 여기에서 바로 블록체인 기술이 사용되었고, 암호화폐인 비트코인이 등장하게 되었습니다. 그렇다면 뒤의 내용을 통해 블록체인에 대한 기술적인 내용을 알아보도록 하겠습니다.

블록체인 = 블록 + 체인

블록체인(Blockchain)은 블록(Block)과 체인(Chain)이 합쳐진 용어입니다. 이를 직역해보면 블록들이 체인처럼 연결되어 있다는 것인데요, 언뜻 봐서는 이해가 잘 가지 않습니다. 블록체인에 대한 이해를 위해서는 블록이 무엇인지를 알아야하고, 블록들이 어떤 방식으로 연결되는지를 알아야 합니다.

먼저 블록체인에서의 블록은 데이터들이 저장되는 단위입니다. AI Network를 예시로 살펴보면 블록은 블록 헤더, 블록 헤더의 해시값, 검증자(Validator)의 목록, 트랜잭션 등으로 구성되어 있습니다. 그리고 AI Network 블록의 헤더에는 에폭(Epoch), 이전 블록의 해시값, 트랜잭션들의 해시값(머클트리 루트값)이 저장이 됩니다. 이 중에 이 중에서 트랜잭션, 해시함수, 머클트리에 대해서 알아보겠습니다. 블록의 구성에 대해서 더 알아보고 싶으시다면 AI Network Document를 참고하세요!

출처 : What is a Blockchain, and How Does It Work?

트랜잭션(Transaction)

트랜잭션이란 “수행하는 작업의 단위”라고 할 수 있습니다. 비트코인에서의 트랜잭션은 사용자간의 비트코인 송신 및 수신에 대한 정보라고 볼 수 있지만, AI Network에서 트랜잭션이란 값(value), 규칙(rule), 함수(function)와 같은 트리구조 블록체인의 상태를 변화시킬 수 있는 서명된 메세지입니다. 또 다른 관점으로는 트리거 함수의 파라미터, 트리거 함수의 결과값을 넘겨주는 것이라고 볼 수 있습니다.

AI Network의 트랜잭션에 저장되는 정보는 크게 2가지로 나눌 수 있습니다. 첫 번째로 생성자로부터 생성된 정보들이고, 두 번째는 입력값으로부터 파생되어 생성된 정보들입니다. 첫 번째에 해당되는 값으로는 논스(nonce), 타임스탬프, 수행한 작업 종류 등이 있고, 두 번째에 해당되는 값으로는 트랜잭션의 해시값, 트랜잭션 생성자의 공개 키 등이 있습니다.

암호화 해시 함수(cryptographic hash function)

해시값이란, 어떠한 입력을 해시함수에 통과하여 얻은 값을 의미합니다. 블록체인에서는 암호화 해시 함수(cryptographic hash function)를 이용합니다. 암호화 해시 함수를 이용하면 입력값을 암호화할 수 있고, 암호화 된 값을 이용하여 입력값을 구하는 복호화 작업이 매우 힘들기 때문에 보안상 안전합니다. 이것은 마치 과일을 갈아서 과일 주스로 만들면 과일 주스를 이용하여 과일을 만들 수 없는 것과 유사합니다. 여기서 과일이 해시 함수의 입력값이 되는거고, 과일 주스로 만드는 과정이 암호화 해시 함수, 결과물로 나온 과일 주스가 해시값이 되는 것입니다. 따라서 암호화 해시 함수를 이용하면 블록을 보안상 안전한 하나의 해시값으로 나타낼 수 있는 것입니다.

출처 : Cryptographic hash function Wiki

한 블록의 해시값은 해당 블록의 헤더를 해싱하여 얻습니다. 하지만 각 블록마다 해시값을 따로 구한 상태는 여러 블록들이 연결되어있다고 보기가 어렵습니다. 따라서 블록체인에서는 각 블록(가장 처음 생성된 블록인 제니시스 블록 제외)들은 블록의 헤더에 이전 블록의 해시값을 가지고 있습니다. 때문에 해시값을 이용하여 이전 블록에 접근할 수 있고, 이러한 구조로 인해 블록들이 해시값을 통해 연결되어 있다고 할 수 있습니다.

출처 : Three ways that blockchain can improve the quality of market research

머클 트리(Merkle Tree)

출처 : Bitcoin Wiki

그렇다면 하나의 블록안에는 여러 트랜잭션들이 저장될 수 있는데요, 이 트랜잭션들을 하나의 해시값을 나타낼 수 있을까요? 바로 머클트리를 이용하면 가능합니다. 머클트리는 트리의 각 노드들이 해시값을 갖는 트리로, 해시트리라고도 합니다. 아래사진과 같이 각 트랜잭션의 해시값을 트리의 잎(leaf) 노드로 설정하고, 가장 가까운 노드들끼리 쌍을 지어 해시값을 더한 후 이를 다시 해싱하여 부모 노드의 해시값을 구합니다. 이러한 과정을 반복하면 루트 노드의 해시값을 구할 수 있는데, 이 값이 바로 블록에 있는 트랜잭션들을 나타내는 해시값이 되는 것입니다.

아래 사진은 블록에 4개의 트랜잭션이 있는 경우를 나타낸 것으로, H_ABCD값이 블록의 헤더에 저장이 됩니다.

출처 : Mastering Bitcoin

블록체인이 안전한 이유

많은 사람들이 블록체인에 대해서 “보안위협으로부터 안전하다.”라는 말을 하는데요, 그 이유는 무엇일까요?

먼저 블록체인의 노드들은 모두 같은 블록체인 상태를 가지므로 위/변조가 어렵습니다. 여기서 노드란 블록체인 네트워크의 참여자들을 뜻하는 것으로, 컴퓨터라고 생각해도 무방합니다. 이러한 특성으로 인해 많은 사람들이 블록체인을 “탈중앙화된 데이터베이스(Decentralized Database)”라고 부르기도 합니다.

그리고 기존 데이터베이스에서는 CRUD(Create, Read, Update, Delete) 작업이 가능하지만 블록체인에서는 블록을 추가/조회하는 CR(Create, Read) 작업만 가능합니다. 따라서 누군가 고의로 블록 내의 데이터를 수정하면 해당 블록 이후의 해시값이 모두 바뀌게 되므로 공격받은 것을 알 수 있게 됩니다.

AI Network 트랜잭션, 블록, 데이터베이스 살펴보기

AI Network 블록체인은 거대한 탈중앙화 데이터베이스이기 때문에, 서비스 및 프로그램 데이터들을 저장할 수 있는 공간인 App을 설계하였습니다.

이번 예제에서는 AI Network 블록체인 상에 생성된 App에 값을 작성하는 코드와 해당 과정에서 생성되는 트랜잭션을 AI Network Insight를 통해 살펴보겠습니다. AI Network Insight는 AI Network에서의 트랜잭션, 블록, 데이터베이스 등의 정보들을 살펴볼 수 있는 탐색기입니다.

코드 작성에는 ain-py를 이용합니다. ain-py는 AI Network 블록체인에 요청(request)을 보내고, 응답(response)를 받을 수 있는 파이썬 패키지 입니다. ain-py는 현재 pypi에 배포되어 있습니다. 만약 자바스크립트를 이용하여 개발하고 싶으시다면 ain-js를 이용하세요.

AI Network에 트랜잭션 발생시키기

사용한 코드는 아래와 같습니다. 데이터베이스 경로에 값을 작성하는 SET_VALUE 작업을 통해 지정된 경로에 “Hello AI Network”값을 작성하였습니다.

async def set_value():
user_message_path = f'{app_path}/messages/{my_address}'
value = 'Hello AI Network'
result = await ain.db.ref(
f'{user_message_path}/{int(time()*1000)}/user'
).setValue(
ValueOnlyTransactionInput(value=value, nonce=-1)
)
print(result)
loop.run_until_complete(set_value())

위의 코드를 실행하면 tx_hash값을 얻을 수 있는데, 이를 AI Network Insight에서 검색하면 트랜잭션의 내용을 확인할 수 있습니다.

트랜잭션 내용에는 트랜잭션이 속해있는 블록의 번호, 시간, 보낸 유저의 주소, 수행한 작업(SET_VALUE), 값이 작성된 경로, 작성된 값 등이 저장되어 있습니다.

그리고 상단에 있는 Block no.은 해당 트랜잭션이 저장된 블록의 번호를 나타내는데요, 이를 클릭하여 해당 블록의 정보도 확인할 수 있습니다.

블록 정보를 살펴보면, 글 초반에 언급된 것과 같이 블록 해시, 이전 블록 해시, 검증자들의 주소, 현재 블록에 저장된 트랜잭션들을 볼 수 있습니다.

이번에는 AI Network Insight의 Database 메뉴를 통해 지정된 경로에 값이 작성되었는지 살펴보겠습니다. Database 메뉴를 통해 트랜잭션에 저장된 경로를 살펴보면 “Hello AI Network” 값이 작성된 것을 볼 수 있습니다.

해당 코드의 전체 버전을 확인하고 싶으면 링크를 눌러 Ainize Workspace Viewmode를 확인해보세요! 자바스크립트를 이용한 예제를 보고싶다면 AI Network Quick Start를 확인해보세요.

이번 글에서는 블록체인 개념에 대해 간략하게 알아보았습니다. 그렇다면 만약 고의로 잘못된 트랜잭션이 생성되면 블록체인 네트워크가 위험해지지 않을까요? 다음 글에서는 트랜잭션이 올바른 확인하는 방법인 작업 증명(PoW, Proof Of Work)/지분 증명(PoS, Proof Of Stake)에 대해 알아보겠습니다.

Reference

AI 네트워크는 블록체인 기반 플랫폼으로 인공지능 개발 환경의 혁신을 목표로 하고 있습니다. 수백만 개의 오픈 소스 프로젝트가 라이브로 구현되는 글로벌 백엔드 인프라를 표방합니다.

최신 소식이 궁금하시다면 아래 커뮤니케이션 채널을 참고해주시기 바랍니다. 다시 한 번 감사합니다.

AI네트워크 공식 홈페이지: https://ainetwork.ai/

공식 텔레그램: telegram.com/ainetwork_kr

아이나이즈(Ainize): https://ainize.ai

유튜브: https://www.youtube.com/channel/UCnyBeZ5iEdlKrAcfNbZ-wog

페이스북: https://www.facebook.com/ainetworkofficial/

포럼: https://forum.ainetwork.ai/

AIN Price chart: https://coinmarketcap.com/currencies/ai-network/onchain-analysis/

--

--

AI Network
AI Network

Written by AI Network

A decentralized AI development ecosystem built on its own blockchain, AI Network seeks to become the “Internet for AI” in the Web3 era.

No responses yet