블록체인 용어 정리 (23/05/04)

nazzzo·2023년 5월 16일
0

분산 원장에 대해

블록체인 기술에서는 모든 거래 내역과 사용자 정보가 블록체인 네트워크에 분산되어 저장됩니다
이 말은 사용자 계정에 관한 정보를 얻으려면 요청과 응답, 그리고 내부적으로 여러 연산 과정을 거쳐야 함을 뜻합니다
(*metamask가 유명)

먼저 블록체인 네트워크에서 사용자의 어카운트에 관한 정보를 얻으려면 해당 사용자의 공개키를 요청에 실어보내야 합니다
이 요청은 블록체인 네트워크 상의 여러 노드들을 통해 전파되고, 해당 계정의 정보를 담은 트랜잭션이 생성됩니다
이 트랜잭션은 생성이 예정된 블록에 포함되어 검증 과정을 거치게 됩니다

블록체인 기술에서는 블록 생성 주기가 일정하게 설정되어 있는데, 비트코인의 경우 생성 주기가 10분입니다
그래서 비트코인 네크워크에서 가져올 수 있는 최신 정보에는 최대 10분의 텀이 생길 수 있습니다

그리고 블록체인에서는 모든 거래 내역이 블록 단위로 저장되기 때문에
특정 거래 내역을 조회하려면 해당 거래가 포함된 블록을 찾아야 합니다

이 과정에서 여러 노드들에게 요청을 보내고 응답을 받는 과정을 거치게 되는데,
요청과 응답이 여러 번 오가기 때문에 일반적인 중앙집중식 데이터베이스보다는 다소 느릴 수 있습니다
하지만 중앙집중식 데이터베이스에 비해 데이터를 위조하는 것이 훨씬 어렵기 때문에 높은 보안성을 지녔다고 평가받습니다



트랜잭션

트랜잭션을 보내려면 서명을 위해 사용자의 개인키(Private Key)를 필요로 합니다
트랜잭션의 형태는 일반적으로 다음과 같은 객체 형태를 따르는데요

영수증 = { 인풋(보내는이), 아웃풋(받는이), 서명 }

  • 인풋 데이터는 보내려는 비트코인 양과 이전 트랜잭션의 출력을 가리키는 정보를 담고 있습니다
  • 아웃풋 데이터는 받는 이의 비트코인 주소와 송금액을 가리키는 정보를 담고 있습니다
  • 서명은 개인키를 통해 생성되며, 트랜잭션의 무결성과 보안성을 보장합니다

트랜잭션 생성 과정에서는 이전 트랜잭션의 아웃풋 데이터를 인풋에서 참조하는 것이 아주 중요합니다
이는 블록체인 기술에서 이중 지불 문제를 방지하기 위한 로직 중 하나입니다
(만약 이전 트랜잭션의 출력 정보를 다른 트랜잭션에서도 사용하게 되면,
동일한 비트코인을 두 번 이상 사용하는 것이 가능해지기 때문)


트랜잭션 풀 & UTXO

트랜잭션을 생성한 후에는 이를 블록체인 네트워크에 전송하기 위해 트랜잭션 풀에 담아야 합니다
트랜잭션 풀은 아직 블록에 채굴되지 않은 트랜잭션을 한 데 모아 보관하는 곳([{tx}, {tx}...])으로
채굴이 끝났을 때 생성된 최신 블록에 이 트랜잭션 내용들이 반영됩니다

그리고 트랜잭션을 보내기 위해서는 해당 트랜잭션의 인풋에 해당하는 비트코인이 충분한지를 확인해야 합니다
이는 UTXO(Unspent Transaction Output, 미사용 객체)를 활용하여 확인할 수 있습니다

UTXO란 이전에 생성된 트랜잭션 아웃풋 중에서 아직 소비되지 않은 아웃풋을 말합니다
이전 트랜잭션의 아웃풋은 UTXO로 존재하며, 이 UTXO를 인풋으로 사용하여 새로운 트랜잭션을 만들 수 있습니다

트랜잭션을 생성할 때 소비하고자 하는 UTXO의 금액과 받는이의 어카운트를 인풋으로 지정합니다
이때, 소비하고자 하는 UTXO의 금액보다 큰 금액을 입력으로 사용하면 거스름돈이 발생합니다
거스름돈은 새로운 트랜잭션의 아웃풋으로 생성되며, 이 출력은 새로운 UTXO가 됩니다


이중지불 문제에 관한 해법

블록체인 네트워크에서 이중지불 문제를 막기 위한 가장 간편한 방법은
트랜잭션 상태(트랜잭션 풀)를 다른 노드들과 공유(broadcast)하는 것입니다

각 노드들은 트랜잭션 풀에 있는 트랜잭션들이 블록에 포함될 수 있는지 검증을 거친 후,
블록에 포함될 수 있는 유효한 트랜잭션들을 블록에 추가합니다
이렇게 블록에 추가된 트랜잭션들은 해당 블록이 생성(체인에 연결)되면 UTXO 리스트에 반영됩니다

이렇게 싱크를 맞춤으로써 블록체인 네트워크의 모든 노드들이 동일한 UTXO 리스트를 가지게 되며,
각각의 노드들 안에서는 내부 검증 처리과정을 거치게 됩니다
이러한 검증과정을 통해 통해 이중지불 문제를 예방할 수 있습니다

하지만...


서로의 채굴 결과가 거의 동시에 이루어졌다면

n번 블록이 거의 동시에 생성돼서 각 블록이 내부적으로 서로 다른 데이터를 담고 있을 때는
각 노드들은 자신이 받은 블록들 중에서 높이가 가장 긴 블록체인을 따르게 됩니다
즉, 블록 높이가 긴 쪽을 우선해서 짧은 쪽을 덮어씁니다

덮어씌워진 블록은 더 이상 유효하지 않은 블록이 되며, 다음 블록이 생성될 때 해당 블록의 내용은 블록체인 네트워크에서 제외됩니다
따라서 해당 블록에 대한 보상 또한 무효화되며, 채굴자는 해당 블록에 대한 보상을 받지 못하게 됩니다


메인넷, 테스트넷

메인넷은 블록체인의 본래 네트워크 또는 본래 버전을 가리킵니다
예를 들어, 이더리움의 메인넷은 실제로 이더(ETH)를 사용하는 공식 네트워크입니다

메인넷에서는 실제로 가치를 가지는 토큰이 교환되고, 트랜잭션이 발생하며, 채굴이 이루어집니다
반면, 테스트넷(Testnet)은 메인넷과는 별개의 테스트용 네트워크이며,
가치를 갖지 않는 테스트용 토큰을 사용하여 개발자가 블록체인 애플리케이션을 실험하고 테스트할 수 있도록 합니다


코인? 토큰?

이 명칭들은 메인넷의 존재여부에 따라 나뉩니다
일반적으로 코인은 독립적으로 자체적인 블록체인을 가진 암호화폐를 말합니다

예를 들어 비트코인은 독자적인 블록체인을 가지고 있으므로 코인입니다

반면에 토큰은 이미 존재하는 블록체인 위에서 동작하는 암호화폐입니다
대부분의 토큰은 이더리움과 같은 블록체인 네트워크를 기반으로 작동하며, 스마트 컨트랙트를 통해 발행되고 관리됩니다

+_앞으로 배울 솔리디티의 런타임은 이더리움 네트워크 내부에 있다는 점

0개의 댓글