비트코인은 '통신 프로토콜' 이다.
사카시 나카모토는 비트코인을 위해 컨센서스, 채굴, 비트코인 생성 방법, 트랜잭션과 같은 내용들을 프로토콜로 만들어 두었고, 비트코인 코어와 같은 소프트웨어가 프로토콜을 실제로 구현한 것과 같다.
지금은 비록 사카시 나카모토는 빠졌지만 '비트코인 코어' 는 여전히 권위있는 프로그램이다.
그래서 새로운 아이디어가 등장하면 먼저 코어 프로그램에 적용을 하고, 이후에 다른 버전 소프트웨어에도 적용된다.
비트코인 코어와 같은 프로그램을 다운받아서 실행하면, 코인이 생성이 되고, 이 코인을 하나의 어카운트에서 다른 어카운트로 보낼 수 있다.
그리고 이 보내는 행위를 '트랜잭션' 이라고 한다.
각각의 트랜잭션은 '블록' 에 기록이 되고, 이 블록들이 순서에 따라 연결된 것을 '블록체인' 이라고 한다.
중앙화된 은행 기관 하나가 거래 장부를 관리하는 문제
비트코인이 동작하는 방법을 기존의 중앙화된 은행과 비교해보자.
만약 계좌 이체를 한다고 하면, 먼저 은행이라는 중앙의 기관을 거쳐야만 한다.
은행에서는 계좌 이체를 하는 사람, 그 사람의 행동 등을 모두 검사하고, 은행 데이터베이스에 저장해두어 관리하며, 은행의 승인이 있어야만 내 계좌의 돈을 다른 사람의 계좌로 보낼 수 있다.
사카시 나카모토는 이 과정을 은행을 거치지 않고 개인과 개인 사이에서 수행할 수 있도록 하는 방법을 고안했다.
이에 대한 비트코인의 해결책은 간단하다.
중앙의 신뢰할 만한 존재를 없애는 대신, 거래 내역을 검증하는 역할을 모두가 분담하는 것이다.
이때 이 과정에 참여하는 모든 사람들은 같은 권한을 가지고 있으며, 더 많은 권한을 갖는 노드는 없다.
실제로 블록체인을 구성하는 다수의 블록들은 여러 노드에 의해 복사되어 있고, 거래 기록을 모두가 가지고 있다.
어 과정에 참여할 때는 권한이 필요하지도, 계측적으로 명령을 받지도 않고 독자적으로 판단하고 행동한다.
따라서 원할 때 들어올 수 있고, 원할 때 떠날 수도 있다.
누군가 의도적으로 거래 기록을 조작한다면, 다수의 사람들이 갖고 있는 복사본을 통해 그 기록이 조작되었음을 검증할 수 있으므로 조작된 거래 기록은 다른 사람들이 무시한다.
(이를 역으로 말하면, 비트코인에 참여하고 있는 사람들의 과반이 넘는 사람들을 포섭할 수 있다면 이 시스템을 흔들 수 있다. 하지만 워낙 많은 사람들이 참여하고 있기 때문에 실제로 공격하기란 쉽지 않다.)
나의 계좌를 만들고 권한을 부여하는 문제
은행에서 거래를 한다고 하면 그 은행의 허락을 받아서 계좌를 만들 수 있다.
하지만 이 과정에서 나의 정보를 중앙 기관인 은행에게 넘겨야 한다.
비트코인과 같은 네트워크에서는 중앙의 도움 없이 나의 계좌를 생성할 수 있어야 한다.
사카시 나카모토는 public key 를 이용해서 계좌를 만드는 방법으로 이 문제를 해결한다.
그래서 지갑 소프트웨어를 통해 누구나 자신의 public key 를 직접 만들 수 있고, public key 를 2번 해싱한 값을 account number 로 사용하게 된다.
public key 가 존재한다는 것은 곧, private key 가 존재한다는 것과 같다.
이 private key 는 public key 계좌에 대한 비밀번호와 같은 역할을 수행하기 때문에, 이 계좌가 내 계좌라는 것을 입증하는데 사용한다.
또한 수학적으로 public key로부터 private key를 알아내는 것이 거의 불가능에 가깝다고 알려져 있기 때문에 안전하다.
private key 는 지갑 소프트웨어가 안전하게 보관한다.
거래 내역의 동기화 문제
사람들 간의 거래는 내가 알지 못하는 곳에서도 수시로 발생한다.
은행 서버와 같은 중앙에 신뢰할 만한 존재가 있다면 이 동기화 문제를 해결하기가 매우 쉽다.
모든 거래 내역 (트랜잭션) 이 은행 서버를 통하기 때문에, 서버가 모든 트랜잭션의 순서를 정확하게 처리해서 기록할 수 있기 때문이다.
또 이 기록이 은행 서버 하나에서 일어나기 때문에 은행 서버에 접속하는 모든 사람들이 같은 기록을 볼 수 있어 혼동이 발생하지 않는다.
하지만 비트코인은 마치 분산 데이터베이스와 같은 존재라, 각각의 노드가 복제된 거래 내역을 갖고 있다.
만약 A가 B에게 1 비트코인을 보내고, B는 C에게 1 비트코인을 보낸다고 하면, 밖에 있는 외부 노드는 아직 B가 C에게 1 비트코인을 보낸 것을 알지 못하기 때문에 B가 D에게 1 비트코인을 또 보내려고 해도 그것이 유효하다고 판단할 수 있다.
(실제로 비트코인 네트워크는 p2p 네트워크라 내가 신규 노드로서 참여하면 내 주변 인근 노드에 붙어서 참여하게 되고, 나와 멀리 떨어진 곳에서 발생한 트랜잭션 정보가 전체 노드로 흩뿌려질 때, 각 노드가 이 정보를 받는 시점은 제각각 일 수 있다.)
따라서 비트코인 네트워크를 구성하는 각 노드끼리의 트랜잭션 순서, 어떤 트랜잭션이 유효한지 등의 정보를 동기화하는 것이 중요하다.
그렇다면 각 노드가 갖고 있는 거래 내역을 동기화 하려면 어떻게 해야할까?
사카시 나카모토는 각 트랜잭션 사이의 순서를 모두 동일하게 맞추는 방법을 고안했다.
그런데 이 순서를 '트랜잭션과 트랜잭션' 마다 순서를 맞추려고 하니 트랜잭션은 실시간으로 많이 발생하기에 비용이 많이 들어서 트랜잭션을 여러개 묶은 '블록' 단위로 순서를 맞추자는 아이디어를 떠올렸다.
비트코인은 블록은 10분에 한번씩 생성(채굴)되도록 그 주기가 조절이 되어있고, 모든 트랜잭션은 이 블록 안에 들어와야만 유효해지기 때문에 싱크를 맞추는 기준을 10분으로 정할 수 있다.
그리고 10분마다 싱크를 맞춘다고 하면, 기존의 실시간으로 발생되던 트랜잭션의 싱크를 맞추는 것보다 훨씬 쉬워진다.
이 그림을 보면 A가 B에게 100을 지불하는 트랜잭션이 있고, C가 D에게 50을 지불하는 트랜잭션이 있을 때, 각 노드마다 트랜잭션 정보의 도착 시간이 달라서 서로 다른 순서로 저장할 수 있다.
이처럼 A-B, C-D 와 같이 서로 관련이 없으면 순서가 바뀌어도 문제가 없지만, 순서가 바뀌면 문제가 되는 경우가 충분히 존재할 수 있기 때문에 모두가 같은 순서를 인식하도록하는 '의견 일치' 가 필요하다.
사카시 나카모토는 이에 대해 '블록 단위로 트랜잭션을 묶어서' 순서를 맞추자는 생각을 했다.
그래서 트랜잭션이 발생하면 해당 트랜잭션을 모든 노드에게 뿌리고, 한 노드는 이 트랜잭션들 사이의 순서를 자신이 정해서 블록으로 만든 뒤 그 블록을 전체 노드에게 뿌린다.( 채굴에 성공했음을 다른 노드에게 알린다.)
이때 트랜잭션 사이의 순서를 정할 때는 merkle tree 에서 왼쪽부터 coinbase transaction을 시작으로 임의의 순서를 지정해서 넣으면 된다. 다른 노드가 이 채굴이 유효하다는 것을 확인하고 나면, 채굴에 실패한 다른 노드들은 그 블록 이후에 다시 아직 처리되지 않은 트랜잭션을 묶어서 블록을 만든 뒤 이어붙이려고 할 것이다.
또 이렇게 블락단위로 하다보면 순서를 유지하는데 도움이 되는 다른 점이 있다.
내가 마지막 블록이 생성되고 9분인 지난 후의 트랜잭션이 있다고 하면 그 트랜잭션을 새로 채굴하는 블록에 포함하려고 할까?
그 트랜잭션을 새로 채굴하려는 블록에 포함하면 10분에 한번 블록이 채굴되기 때문에 나는 1분안에 블록을 채굴해야만 한다.
하지만 그 이전에 9분동안 채굴을 진행했던 사람들이 채굴에 성공할 확률이 더 높을 것이다.
따라서 비트코인은 최근에 생성된 트랜잭션의 경우, 꽤 오랜시간동안 블록에 포함되지 않기 때문에 싱크를 맞추는 게 더 쉬워진다.
(즉, 컨센서스, 합의를 이루는 것이 더 쉬워진다.)
누가 블록을 만들고, 얼마나 자주 만들까?
비트코인에서는 누구나 블록을 만들 수 있다.
따라서 한 명의 채굴자가 여러개의 블록을 연달아서 계속 채굴하는 것도 가능하다.
(이후의 비트코인 프로젝트에서는 블록을 생성할 사람을 랜덤하게 정하는 경우가 있기도 하다. 마이너 역할의 노드를 정하고 나머지는 이를 검증하는 것이다. 이더리움의 경우에는 채굴자를 결정하는 알고리즘이 있어서 규칙적으로 블록을 만들 수 있다.)
비트코인의 블록들은 평균적으로 10분에 한번 생성되도록 주기가 정해져있다.
이 부분이 '지불'의 관점에서는 조금 아쉬운 점이 있다.
내가 결제한 그 결제 내역이 최소한 10분은 지나야만 '정말 지불된 것이 맞다' 라는 확인이 되는 것이다.
또 운이 없는 경우에는 내 트랜잭션이 블록에 들어가서 채굴되었는데, 나중에 대세 블록이 뒤집히는 경우가 있을 수도 있다.
(이런 점이 비트코인의 약점이기도 하다. light network 라는 실시간 결제를 지원하는 솔루션이 있다.)
비트코인에서는 블록을 만들 사람을 결정하고, 그 생성 주기를 조절하기 위해 '작업 증명' 이라는 과정을 거친다.
Proof of Work 는 공평하게 프로토콜에 의해서 누구나 비트코인 블록을 만들고자 한다면 해시 계산을 하도록 시킨다.
작업 증명은 먼저 여러개의 트랜잭션을 모은다. 이때 어떤 트랜잭션을 선택하여 모을 지는 채굴자가 결정한다.
채굴자는 유효하다고 판별되는 unspent transaction output (UTXO) 중에서 트랜잭션 수수료가 높은 순으로 집어넣고자 할 것이다.
채굴자는 이 트랜잭션들을 블록에 넣고, 블록에서 nonce 값을 조절하면서 해시 결과가 특정 수보다 작은 결과가 나오는 해시값을 찾는다.
비트코인에서는 32bit 의 nonce 값이 블록에 존재하는데, 만약 2^32 을 모두 다 해봤음에도 원하는 결과를 찾지 못했다면 coinbase transaction 의 input script에 넣을 nonce 값을 조정해서 다시 해시 계산을 한다.
보통 컴퓨팅 파워가 높은 채굴자라면 더 많은 해시 계산을 할 수 있으니 확률적으로 유리해지므로, 많은 사람들이 모여서 해시 전용 머신을 만들어 채굴 공장을 돌린다. 정말 노력한 만큼 결과가 나오도록 하는 것이다.
이 해시 계산에 성공했다는 것을 검증하는 것도 어렵지 않다.
누군가 해시 계산 결과를 제시하면 그 결과가 올바른 것을 검증하는 것은 매우 빠르게 끝난다.
(이게 오래 걸리면 누구도 해시 계산 결과를 검증하길 꺼릴 것이다. 하지만 검증은 해시 계산 한번으로 금방 할 수 있기 때문에 다른 채굴자들이 부담없이 검증할 수 있다.)
마지막으로 해시 계산에 성공해서 성공적으로 블록을 채굴한 사람들에게는 그만큼의 시간과 노력을 투자하였으므로 비트코인을 보상으로 지급한다.
채굴자에게 어떻게 보상을 줄 것인가?
채굴자는 컴퓨팅 자원과 시간, 네트워크 자원, 전기, 쿨링 등의 비용을 투자하여 트랜잭션을 모아 블록을 만들어 컨펌하고 유효성까지 검증한다.
심지어 내가 채굴한 블록이 선택된다는 보장도, 채굴할 수 있다는 보장도 없다. (확률 싸움이다.)
따라서 채글자들에게 이런 작업에 대해 보상을 해주어야 하는데, 사카시 나카모토는 기존의 화폐 대신 시스템 내부적으로 사용되는 비트코인이라는 화폐 (native currency) 를 만들어서 보상으로 지급한다.
따라서 채굴자들은 내가 받은 비트코인의 가치가 훼손되지 않도록 꾸준히 비트코인을 채굴하고자 하는 동기부여를 얻을 것이다.
채굴자에게 비트코인을 지급할 때는 크게 2가지 방법으로 지급한다.
1. 트랜잭션 수수료 (transaction fee)
각각의 트랜잭션에는 이 트랜잭션을 블록에 담아 채굴한 채굴자에게 지불할 fee 가 명시되어있다.
채굴자들은 자신이 채굴할 때 담은 트랜잭션들에 있는 모든 수수료의 합을 보상으로 받는다.
따라서 채굴자들은 높은 fee 가 설정된 트랜잭션을 우선적으로 채굴하고자 할 것이다.
트랜잭션 수수료는 보통 시장 가격에 따라 정해지며 매번 변동된다.
트랜잭션 수수료가 너무 높아지면 트랜잭션이 줄어들면서 자연스럽게 수수료도 내려갈 것이고, 너무 내려가면 트랜잭션이 활발히 일어나면서 다시 수수료가 높아지면서 변동되는 것이다.
가끔 수수료가 매우 높게 책정될 때가 있는데, 대표적으로 4년에 한번 비트코인에 반감기가 올 때 반감기 이후 처음 채굴되는 블록에 대해서 자신의 트랜잭션이 그 안에 들어가길 원하는 사람들이 많아서 이때는 트랜잭션 수수료가 매우 높게 책정되기도 한다.
* 비트코인의 블록 크기는 원래 1MB 제한이 있었는데, 지금은 그 제한을 우회하는 소프트 포크가 존재한다.
(2017년에 일어난 segregate witness) 그래서 4MB 까지 블록 사이즈가 커져서 더 많은 트랜잭션을 담을 수 있게 되었다.
2. Block Reward
채굴자들은 transaction fee 말고도 비트코인 시스템이 신규로 발급하는 비트코인도 보상으로 함께 받는다.
만약 기존의 화폐로 보상을 지급했다면 충분히 수익을 얻은 이후에는 채굴자들이 빠져나갔겠지만, 비트코인으로 보상을 받았기 때문에 자신이 받은 비트코인의 가치를 지키기 위해서 채굴자들은 계속 채굴을 할 동기를 얻는다.
비트코인 시스템을 어떻게 활성화 시킬 것인가?
초기에 비트코인은 유명하지 않았다.
어떻게 해야 많은 사람들이 비트코인에 관심을 가지고 참여하도록 유도할 수 있을까?
그래서 비트코인은 초기에 참여하는 사람들에게는 Block Reward 라는 채굴 보상을 제공하는 방법을 선택했다.
이 채굴 보상은 초기에 채굴하는 사람들에게는 많이 지급하고, 나중으로 갈 수록 보상을 줄어든다.
초기에는 블록 채굴에 성공하면 50 비트코인을 리워드로 지급했다.
블록 리워드는 coinbase transaction 이라는 특별한 트랜잭션을 통해 채굴자의 비트코인 계좌로 지급된다.
이 트랜잭션은 비트코인을 생성하는 유일한 트랜잭션이다.
이 채굴보상은 21만 블록이 채굴될 때마다 반씩 줄어든다. (거의 4년에 한번)
현재는 블록당 3.125개의 비트코인을 지급한다.
비트코인의 총 발행량은 2100만 개로 프로토콜에 의해 제한되어있다.
(그래서 비트코인은 그 희소성 때문에 가치가 유지된다.)
나중에 비트코인 발행량이 완료되면 그때는 비트코인이 점점 유명해질 것이고, 거래의 수단으로 사용되기 시작하면 트랜잭션 수수료가 증가하는 방향으로 갈 것이다.
채굴자들 입장에서는 받는 비트코인이 줄어드니 수수료라도 받아야겠다는 생각을 할 것이기 때문이다.
현재 아직까지도 채굴자들이 남아있는 이유는 반감기가 올 때마다 비트코인의 가격이 US 달러 기준으로 오르고 있기 때문에 그렇다.
즉, 지금은 3.125 개의 코인을 받지만, 이렇게 받은 코인의 가치가 나중에는 더 오를 것이라고 기대하는 것이다.
해시 파워의 증가로 채굴 속도가 빨라지는 문제
점점 많은 사람들이 동시에 채굴에 참여하고, 더 좋은 성능의 장비를 사용하여 채굴하다보면 비트코인을 채굴하는 속도가 증가할 것이고, 그만큼 비트코인은 빠르게 발행되어 고갈될 것이다.
비트코인은 이 문제를 난이도 조절을 통해 해결한다.
블록의 평균 채굴 시간이 10분이 되도록, 2016개 블록이 채굴될 때마다 그때의 평균 채굴 시간을 계산해서 10분보다 짧은 경우에는 난이도를 높이고, 10분보다 길다면 난이도를 낮춘다.
그리고 이때의 채굴 난이도는 해시퍼즐의 조건을 더 까다롭게 만드는 것이다.
이를 통해 비트코인의 발행 속도를 조절하여 비트코인의 가치를 지킬 수 있다.
채굴 난이도는 위와 같은 식으로 계산된다.
현재 난이도에 대해서 지난 2주라는 시간 대비 2016블록이 채굴되는데 걸린 시간이 더 길었다면 분모가 커지면서 채굴 난이도는 낮아지고, 짧았다면 분모가 더 작아지면서 난이도가 증가한다.
그리고 이런 조절은 중앙에 의해 조절되는 것이 아니라, 순순하게 프로토콜에 의해 조절된다.
블록의 채굴 순서
반감가기 오기 전까지 블록 하나를 채굴했을 때 받는 보상은 똑같다.
비트코인 블록에는 1씩 증가하는 번호가 부여되는데, 만약 100번 블록이 채굴되어 모든 채굴자가 101번 블록을 채굴하기 위해 노력하고 있을 때, 나는 102번 블록을 한 수 앞서서 미리 채굴할 수는 없을까?
이건 비트코인의 블록 구조상 불가능하다.
블록은 마치 링크드리스트처럼 연결되어 있어서 현재 블록이 채굴되려면 반드시 직전에 채굴된 블록의 해시값이 필요하기 때문이다.
따라서 101번이 채굴되기 전까지는 101번 블록의 해시값을 알 수 없으므로 102번 블록을 미리 채굴할 수는 없다.
102번 블록을 미리 채굴해놓고 나중에 101번 블록이 채굴되면 그때 해시값을 넣겠다는 것도 불가능하다.
애초에 블록을 채굴할 때 직전 블록의 해시값을 포함하여 해싱한 결과를 가지고 퍼즐을 풀어야 하기 때문이다.
따라서 101번 블록이 채굴되기 전에는 102번 블록의 채굴을 시작조차 할 수 없다.
이렇게 블록들이 서로 체인처럼 서로서로 연결되어있어서 '블록 체인' 이라고 부른다.
만약 어떤 사람이 채굴된 블록의 해시값을 임의대로 조작한다면 체인이 끊어져서 다른 채굴자들에게 조작이 발각된다.
이미 채굴된 블록의 데이터를 조작하면 그 블록의 해시값이 바뀌므로 그 블록 이후에 연결된 블록들의 체인이 끊어진다.
정말 바꾸고 싶다면 각 채굴자들이 가지고 있는 블록 정보를 모두 (적어도 반 이상) 바꿔야 하며, 이는 불가능에 가깝다.
따라서 비트코인의 블록에는 immutability 가 보장된다.
블록이 거의 동시에 채굴되는 문제
채굴 경쟁이 매우 치열하다보니 100번 블록까지 채굴이 되었을 때, 서로 다른 사람이 101번 블록을 거의 동시에 채굴할 수도 있다.
이때는 어떤 블록을 100 번 블록 뒤에 붙이는 블록이라고 생각할 수 있을까?
비트코인에서는 이 문제는 자연스럽게 해결될 것이라고 여긴다. (Longest Chain Rule)
일시적으로는 채굴에 참여하는 노드마다 어떤 블록이 유효한 블록이고 대세 블록이 될 지 의견이 갈릴 수 있지만, 결국 하나로 수렴할 것이라는 것이다. (보통은 조금이라도 자신에게 먼저 도착한 블록 뒤에 이어서 채굴하려고 한다.)
그래서 특정 시점에서 스냅샷을 찍는다면 각 노드가 생각하는 가장 최신 블록이 다를 수 있다.
지금 당장은 101번이 거의 동시에 존재하는 것처럼 보일지라도, 102, 103 번도 매번 그럴 수는 없다.
결국 두 브랜치 중에서 먼저 앞서 나가는 블록이 발생할 것이고, 그 블록이 있는 방향이 대세가 되어 채굴자들은 해당 블록 뒤에 이어서 채굴하고자 할 것이다. 왜냐하면 먼저 102번 블록이 채굴된 곳이 존재하면, 그 뒤에 103번 블록도 먼저 채굴될 가능성이 높기 때문에 굳이 반대 방향에서 채굴하는데 시간을 쓸 이유가 없다.
(길이가 짧은 블록에 추가적으로 채굴해서 기존의 대세 블록을 따라잡는 것은 비효율적이기 때문이다.)
이렇게 길이가 제일 긴 체인을 canonical chain 으로 보고 이 체인을 대세로 따라 가는 합의가 자연스럽게 이루어진다.
(그러면 한 트랜잭션이 서로 다른 블록에 동시에 들어있을 수 있는걸까?)
(한 트랜잭션이 채굴되어 컨펌 되었다가 대세가 바뀌면 컨펌된 것이 취소될 수도 있을까?)
(먼저 채굴해서 트랜잭션 수수료를 챙겼는데, 나중에 자신의 블록이 대세에서 밀리면 수수료를 회수당할까?)
정리하면 비트코인에서는 항상 모든 순간에 의견이 일치하지는 않는다.
비트코인 네트워크가 전세계에 퍼져있기 때문에 블록의 채굴 결과가 도착하는 시점도 서로 다르고, 각자가 생각하는 최신 블록이 일시적으로 다를 수 있다.
하지만 결국에는 Logest Chain Rule 에 따라 다수가 인정하는 블록이 자연스럽게 결정된다.
그리고 대세 체인에 속하지 않은 블록들은 고아 블록이 되며, 그 블록 안에 들어있는 트랜잭션은 유효하지 않다고 본다.
(물론 그 트랜잭션이 대세 블록 체인을 구성하는 블록에 똑같이 들어있다면 그 트랜잭션은 유효하다.)
이중 지불 문제
같은 비트코인을 사용하는 트랜잭션이 두번 만들어 지는 문제를 말한다.
비트코인은 실제로 돈을 지불하는 것이 아니기 때문에 A 라는 사람이 영화관에서 비트코인을 지불하는 트랜잭션을 만들고, 같은 비트코인을 골프장에서 지불하는 트랜잭션을 이중으로 생성할 수도 있다.
또는 어떤 사람이 영화관에 지불하는 트랜잭션을 생성한 뒤에, 이 트랜잭션이 퍼지기 전에 같은 비트코인을 자신의 또 다른 계좌로 보내는 트랜잭션을 발생시킬 수 있다. 영화관에서 부주의하게 일단 트랜잭션이 생성된 것만 보고 영화 티켓을 제공했는데 마침 나의 다른 계좌로 보내는 트랜잭션이 대세 블록에 포함되어 컨펌되면 영화관에는 돈이 가지 않을 수 있다. (고아 블록에 포함된 트랜잭션 속 비트코인은 꺼내서 쓸 수 없다.)
이런 시도를 비트코인에서 막을 수는 없지만, 이런 시도를 했을 때 그 성공확률이 매우 낮도록 만들어야 비트코인 시스템이 유지될 것이다.
따라서 이런 문제를 방지하기 위해 보통 블록이 컨펌되고 6개의 블록이 컨펌될 때까지 기다린다.
(트랜잭션이 포함된 블록이 첫번째 블록이고, 그 뒤로 5개의 블록이 추가적으로 더 생성될 때까지 기다린다.)
즉, 어떤 트랜잭션이 발생하고 대략 60분이 지나면, 이 트랜잭션이 유효하지 않게 될 확률이 매우 낮다는 것이다.
하지만 지불 액수가 크다면 이것보다는 조금 더 기다린다.
실제로 비트코인을 지불할 때는 너의 트랜잭션이 컨펌될 때까지 60분을 기다렸다가 물건을 주겠다고 하기는 힘드므로 트랜잭션이 발생된 것만 보고 주어야 할 것이다. 이것이 비트코인의 한계점 중 하나이다.
'CS > 블록체인' 카테고리의 다른 글
[블록체인] 12. 비트코인 script (1) (0) | 2024.10.25 |
---|---|
[블록체인] 11. 비트코인 트랜잭션 (1) | 2024.10.25 |
[블록체인] 9. 암호학 개념들 (0) | 2024.10.24 |
[블록체인] 8. 비트코인 스크립트 (0) | 2024.10.17 |
[블록체인] 7. 비트코인 네트워크 (0) | 2024.10.15 |