블록체인 상 블록이 생성되는 과정은 5가지 단계로 구분 가능하다.
[1] 첫번째 단계는 Transaction의 생성 단계이다.
개인은 지갑(dApp)을 통해 특정 주소 A에 보관된 잔고의 일부 또는 전부를 또 다른 주소 B로 송금하는 Transaction을 실행한다. 이때 Sender는 주소 A에 상응하는 Private Key로 Transaction에 Sign하여야 한다.
Sign이라 함은 Private Key를 통해 진행하는 Transaction의 암호화이며, Public Key로 해독 가능하다. Receiver는 가지고 있는 Sender의 Public Key로 Transaction을 해독하며, 만약 해독이 되지 않는다면 Private Key가 맞지 않으니, Sender의 Transaction은 무효라고 판단하는 것이다.
한편, 단순 송금이 아니라, 스마트 컨트랙트를 체결하고자 하는 경우에는 스마트 컨트랙트의 내용 자체가 Transaction이 된다.
[2] 두번째 단계는 Transaction의 전파 단계이다.
지갑은 해당 Transaction을 블록체인상 여러 노드들에게 동시에 전파한다. 전파되는 속도는 네트워크의 상태에 따라 노드별로 다를 수 있고, 어떤 노드들은 해당 Transaction을 받지 못할 수도 있다.
한편, 모든 노드가 해당 Transaction을 받을 필요는 없다. 다수의 노드에 의해서 해당 Transaction이 아래 서술되는 절차에 따라 확정되면, 개별 노드들은 해당 Transaction이 기록된 블록을 결국 받아들이게 되기 때문이다.
[3] 세번째 단계는 Transaction 검증 단계이다.
송금의 경우에는 송신 주소의 잔고가 송금액 이상인지에 대한 검증 및 Private Key를 통해 수행된 Sign에 대한 검증을 수행한다. 스마트 컨트랙트인 경우에는 계약 이행을 위한 제반 조건(예, Escrow의 설정 등 / Escrow라 하면 통상 계좌에 설정하는 입출금에 대한 조건 등을 말함)들을 점검하는 절차가 된다.
[4] 네번째 단계는 블록을 완성하는 단계이다.
개별 노드의 입장에서 보면, 상기 [1]-[2]-[3] 단계를 거쳐서 복수의 Transaction을 받게 된다. 노드는 Transaction들이 적당히 쌓이게 되면 (비트코인의 경우 10분에 한번씩) 아래 정보들을 신규 블록에 기록하게 된다.
- 직전 블록의 정보 (직전블록 Number, 직전블록의 Hash 값 등)
- 직전 블록 생성 이후에 전파 받은 Transaction들의 내용
- Nonce (임의값)
- 상기 데이터들의 Hash 값 (Resulting Hash)
- Time Stamp
단, Resulting Hash는 특정 조건을 만족시켜야만 한다. 비트코인의 경우에는 Resulting Hash가 일정 개수 이상의 "0"를 문자열의 제일 앞에 포함해야 하며, "0"의 개수가 많아질수록 이 조건을 만족시키기가 어렵다. 노드는 이 조건을 만족시키는 Nonce를 찾아야 하며, 이를 찾기 위해서는 Trial and Error 방법이 사용되고 이것이 바로 Mining이다.
비트코인의 Mining은 경쟁자가 많아지면서 더 빨리 연산을 수행하기 위해 방대한 Computing resource 및 전력을 사용하나 특정 조건을 만족시키는 Nonce를 찾는 것이 블록을 완성하는 것 외에는 무의미하다는 비판을 많이 받는다.
[5] 다섯번째 단계는 최초로 완성된 블록을 기존 블록체인에 연결하는 과정이다.
다수의 노드들(또는 Miner들)은 [4]단계에서 기술한 조건을 만족시키는 블록을 찾기 위해 경쟁한다. 조건에 맞는 블록을 생성한 노드는 이를 네트워크상의 다른 노드들에게 전파한다. 다른 노드들은 조건에 맞는 블록이 전송되어 왔을 경우에는 이를 수용하게 되어, 블록체인이 지속되게 된다.