Cách một khối (block) hoạt động bên trong blockchain Bitcoin
1. Giới thiệu về khối Bitcoin
1. Giới thiệu về khối Bitcoin
Mạng Bitcoin duy trì một cuốn sổ cái phân tán và công khai ghi lại toàn bộ quyền sở hữu và giao dịch của Bitcoin (BTC), loại tiền số gốc của mạng lưới Bitcoin. Khi các giao dịch diễn ra trong mạng lưới, dữ liệu của chúng được nhóm lại với nhau thành các “khối", các khối này lại được kết nối tuần tự vào một chuỗi khối nên nó mới có thuật ngữ “blockchain”.
Các khối bên trong blockchain đều sở hữu cấu trúc tương tự nhau. Mỗi khối chứa một tiêu đề khối (block header) và dữ liệu giao dịch - đây là hai bộ thông tin thiết yếu giúp mạng lưới được hoạt động trơn tru và dễ dàng chuyển giao giá trị. Mỗi khối cũng phải chứa một số thông tin cụ thể nào đó để được mạng công nhận, xác thực và gắn vào blockchain.
Cấu trúc tổng thể của một khối trong Bitcoin luôn bao gồm các yếu tố sau:
Số ma thuật (Magic number): Trường 4 byte này luôn chứa giá trị 0xD9B4BEF9, dòng chữ số này dùng để xác định xem định dạng tập tin có tương ứng với mạng Bitcoin không.
Kích thước khối (Blocksize): Trường 4 byte này sẽ giới hạn dữ liệu chứa trong một khối. Kích thước khối của Bitcoin bị giới hạn ở 1 megabyte (MB).
Tiêu đề khối (Blockheader): Trường 80 byte này bao gồm sáu thành phần riêng lẻ (chi tiết ở phần dưới).
Bộ đếm giao dịch (Transaction counter): Trường này có kích thước từ 1-9 byte và là một số nguyên đại diện cho số lượng giao dịch có trong một khối Bitcoin.
Giao dịch (Transactions): Trường này có kích thước đa dạng, nó sở hữu danh sách về mọi giao dịch trong khối và thường được lấp đầy những giao dịch sao cho đạt tới giới hạn kích thước khối 1MB của Bitcoin.
Tiêu đề khối và dữ liệu giao dịch là hai loại dữ liệu chính trong một khối, Chúng ta sẽ chia nhỏ từng loại dữ liệu này và thảo luận chi tiết chúng ở các phần sau.
Mạng Bitcoin (Nguồn: 3.bp.blogspot)
2. Tiêu đề khối và đào Bitcoin
2. Tiêu đề khối và đào Bitcoin
Mạng Bitcoin dựa trên một mạng lưới các node phi tập trung cùng duy trì cuốn sổ cái công khai phân tán chứ mọi giao dịch được thực hiện bằng Bitcoin. Các node trên mạng lưới cũng có thể tham gia vào một quá trình gọi là đào, đây là quá trình bảo mật mạng và xác thực các khối mới cũng như các giao dịch bên trong chúng.
Các thợ đào có trách nhiệm ghi các khối mới này vào blockchain, và đây cũng chính là vai trò quan trọng nhất trong việc xác minh tính toàn vẹn của thông tin trong một khối. Thời gian xử lý một khối Bitcoin trung bình là mười phút, hay khoảng 6 khối sẽ được ghi vào Bitcoin mỗi giờ.
Tiêu đề khối chứa 80 byte thông tin được mã hóa:
Phiên bản (version): Trường 4 byte này cho biết số phiên bản của giao thức Bitcoin đang sử dụng và thường chứa giá trị “1.”
hashPrevBlock: Trường 32 byte này chứa hàm băm (hash) 256-bit của tiêu đề khối trước đó.
hashMerkleRoot: Trường 32 byte này chứa hàm băm 256-bit dữ liệu dạng gốc cây Merkle của toàn bộ các giao dịch trong khối hiện tại.
Thời gian (time): Trường 4-byte này chứa dấu thời gian của khối hiện tại được sử dụng để định vị nó theo thứ tự thời gian trong chuỗi khối.
Bits: Trường 4-byte này chứa độ khó mục tiêu của khối Bitcoin hiện tại, thứ này xác định độ khó của quá trình kiếm hàm băm mục tiêu.
Nonce: Trường 4-byte này chứa một con số 32-bit, mà các thợ đào cần phải tìm ra để giả câu đó cho khối.
Các thợ đào Bitcoin cạnh tranh để giải một câu đố toán học Proof-of-Work (PoW). Để giải câu đố này, thợ đào cần lấy toàn bộ giao dịch của mạng cũng như thông tin từ khối trước đó (tức là tiêu đề khối của nó) và "băm" chúng bằng thuật toán SHA-256. Thợ đào đầu tiên hoàn thành câu đố này được phép tạo một khối mới, đổi lại họ sẽ được thưởng lượng BTC mới đúc.
Nói chung, băm là một quá trình mà một đầu vào cụ thể- trong trường hợp này là dữ liệu giao dịch gần đây và tiêu đề khối - được nhập vào một thuật toán để tạo ra một loại đầu ra cụ thể. Thợ đào phải lấy đầu vào này và đoán một số được gọi là “nonce”, khi được nhập vào hàm băm SHA-256, sẽ tạo ra một đầu ra tương ứng với một đầu ra khác được thiết lập bởi giao thức Bitcoin.
Đào Bitcoin tóm lại là quá trình đoán số nonce càng nhanh càng tốt. Nếu một thợ đào đã tìm ra số nonce chính xác, họ sẽ thông báo và phát khối này (bao gồm cả nonce) cho những thợ khác trên mạng lưới để họ tự băm và xác thực nó. Nếu đa số thợ đào - 51% thợ đào trở lên cùng chấp thuận thuật toán này, Thợ đào tìm ra nonce sẽ được phép thêm khối mới vào blockchain và nhận phần thưởng khối. Quá trình này sẽ được lặp lại sau mỗi 10 phút trên mạng Bitcoin nhằm tiếp tục phát triển dữ liệu trong chuỗi.
Block height của khối Bitcoin sẽ đo số lượng khối có trước nó trên giao thức Bitcoin. Ví dụ: đợt giảm nửa khối Bitcoin tiếp theo (của phần thưởng khi đào) sẽ xảy ra khi block height đạt 840.000 vào năm 2024. Nói cách khác, phần thường từ việc đào Bitcoin sẽ bị giảm một nửa khi số lượng khối được ghi trong giao thức bitcoin đạt 840,000 khối tính từ genesis block.
Đào Bitcoin (Nguồn: media.vneconomy)
3. Dữ liệu giao dịch bên trong một khối Bitcoin
3. Dữ liệu giao dịch bên trong một khối Bitcoin
Một thành phần chính tạo nên khối Bitcoin là dữ liệu giao dịch, nó chiếm phần lớn thông tin bên trong cấu trúc dữ liệu khối blockchain. Giao dịch đầu tiên chứa trong mỗi khối mới được gọi là generation transaction hoặc transaction coinbase (đây không phải là sàn giao dịch tiền số Coinbase), nó có trách nhiệm tạo ra BTC mới để thưởng cho thợ đào thắng cuộc. Giao dịch đầu tiên này sẽ chỉ định địa chỉ Bitcoin được nhận phần thưởng khối.
Trong khi các giao dịch Bitcoin cũ có chứa cả đầu vào lẫn đầu ra, thì generation transaction sẽ tạo BTC mới từ chính giao thức. Các phần còn lại trong dữ liệu giao dịch khối bao gồm: địa chỉ của người gửi và người nhận, số lượng BTC trong mỗi giao dịch, chữ ký khóa cá nhân cho phép gửi BTC và dấu thời gian xác minh bằng mật mã chính xác khi mỗi giao dịch xảy ra.
Như đã đề cập trước đây, kích thước khối Bitcoin trước đây được giới hạn ở một MB dữ liệu. Tuy nhiên, mạng Bitcoin cũng tích hợp một tính năng mới tên là “Segregated Witness” (Cách ly vật chứng hay SegWit) cho phép dữ liệu chữ ký được “cách ly” và biên soạn một cách hiệu quả - vẫn giữ dung lượng khối Bitcoin ở một mức MB nhưng tăng không gian khối cho dữ liệu giao dịch.
Mỗi giao dịch riêng lẻ sẽ sở hữu các dữ liệu như:
Txin_count: Dữ liệu này cho biết biết tổng đầu vào giao dịch.
Txins: Dữ liệu này chứa danh sách tất cả các đầu vào giao dịch.
Txout_count: Dữ liệu này cho biết tổng số đầu ra của giao dịch.
Txouts: Dữ liệu này chứa danh sách tất cả các kết quả đầu ra của giao dịch.
Script_witnesses: Dữ liệu này chứa tuần tự hóa tất cả dữ liệu nhân chứng cho các giao dịch SegWit.
Lock_time: Trường 4 byte này đặt số khối hoặc dấu thời gian cho đến khi giao dịch bị khóa. Nó thường được đặt thành 0, nghĩa là giao dịch trở nên hợp lệ ngay sau khi khối được hoàn tất.
Các khoản giao dịch SegWit sẽ sở hữu độc quyền các dữ liệu như:
Version: Trường 4 byte này cho biết số phiên bản của giao thức Bitcoin đang được sử dụng và thường chứa giá trị “1.”
Marker: Nếu có, trường 1 byte này cho biết rằng giao dịch có sử dụng SegWit và chứa giá trị “0x00”. Nếu giao dịch không sử dụng SegWit, trường này chứa giá trị “null”.
Flag: Nếu có, trường 1 byte này cho biết giao dịch có sử dụng SegWit và chứa giá trị “0x01”. Nếu giao dịch không sử dụng SegWit, trường này chứa giá trị “null”.
Người gửi phát dữ liệu giao dịch của họ lên mạng lưới, và những thợ đào cạnh tranh để tạo ra các khối Bitcoin mới sẽ được khuyến khích thêm các giao dịch riêng lẻ vào các khối của họ do phí giao dịch đã bao gồm.
4. Tương lai của việc tạo khối Bitcoin
4. Tương lai của việc tạo khối Bitcoin
Thứ công nghệ blockchain mà Bitcoin đang sử dụng tương tuy đơn giản nhưng lại là một hệ thống tạo khối và duy trì mạng lưới tao nhã. Mặc dù cấu trúc khối này chỉ được tạo ra cho blockchain Bitcoin, nhiều mạng PoW khác sử dụng cấu trúc dữ liệu khối giống như vậy. Các mạng lưới này sẽ thêm thắt một vài điểm khác biệt - chẳng hạn như kích thước khối hoặc thời gian khối khác nhau - nhưng hệ thống tổng thể như thợ đào, khối và kiến trúc blockchain của chúng đều giống nhau.