Dù biết là cái này xưa như trái đất rồi và hầu như ai cũng đã hiểu ít nhiều. Nhưng mà cứ thử lôi lại ra để một số bạn mới có thể hiểu hơn về blockchain cũng như những cải tiến sau này, chúng đều dựa trên những vấn đề cốt lõi của những thứ cơ bản ban đầu này. Vậy blockchain là gì hoạt động ra sao?

Blockchain có thể hiểu như là một cơ sỡ dữ liệu của hệ thống ngân hàng, nơi mà ở đó sẽ lưu trữ số tiền trong tài khoản ngân hàng (balance) của mỗi cá nhân khi mở tài khoản và lịch sử giao dịch của họ.

Điểm khác biệt lớn nhất ở đây chính là thay vì chỉ bạn và ngân hàng bạn dùng có thể xem được những thứ này thì blockchain sẽ public những thông tin này cho toàn bộ mọi người. Để làm được điều này thì blockchain sẽ hoạt động như sau.

Một số khái niệm bổ trợ

  • Transactions: Các giao dịch chuyển coins/ tiền từ bên A cho bên B trên mạng lưới blockchain.
  • Hash function: Hàm băm, đây là thuật toán mã hóa dữ liệu một chiều dùng để mã hóa các dữ liệu đưa vào blockchain.

Ví dụ: Mã hóa chữ  “Pzo”  thì sẽ ra được: “3a996bf62626822ac63e055e82ae67d6a83248d7a6417b6417d1d6239f5d0905”

Điểm quan trọng nhất của Hash Function chính là không mã hóa ngược lại được và kết quả mã hóa là Deterministic. Tính tất định có nghĩa là dù mã hóa “Pzo” bao nhiêu lần thì kết quả ra cũng là: “3a996bf62626822ac63e055e82ae67d6a83248d7a6417b6417d1d6239f5d0905”

Nhờ đặc tính này mà chúng ta sẽ có cấu trúc dữ liệu Merkle Tree.

  • Block: Là các khối chứa dữ liệu giao dịch của người dùng. Mỗi khối chứa một lượng dữ liệu giao dịch nhất định. Dữ liệu một khi đã đưa vô khối thì không thể đảo ngược.
  • Block Headers: Là bản tóm gọn của block, sẽ giải thích kĩ hơn ở dưới.
  • Nodes: Các máy tính/ miners tham gia vào mạng lưới blockchain.
    • Full-nodes miners: Miners chạy full nodes sẽ phải tải toàn bộ blocks trước đó của chain và là những nodes sẽ tạo block.
    • Light node miners: Miners chạy light nodes chỉ cần lưu trữ dữ liệu của Block Headers.
  • Mempool: Phòng chờ trước khi các giao dịch được xác nhận và đưa vào block.

Cấu trúc của Blockchain

Blockchain có cấu trúc dữ liệu dạng chuỗi bao gồm các blocks liên kết với nhau. Mỗi block sẽ chứa một lượng transactions cố định và gần như không thể thay đổi nội dung của bất kỳ transaction nào, một khi giao dịch đó đã được đưa vào block.

Bên trên là hình mô tả cấu trúc của blockchain và block trên Etherscan. Với Blockchain, mọi transaction sẽ được public để xem. Các bạn có thể vào Etherscan để kiểm tra quá trình tạo block của Ethereum. Hình bên dưới là trang chủ của Etherscan. Ở đây bạn sẽ thấy các thông tin cơ bản của một blockchain ví dụ như :

  • Lastest Blocks: Những block mới nhất của Ethereum.
  • Latest Transactions: Những transactions mới nhất được đưa lên trên chains.
  • Các thông tin khác: Số lượng transactions, giá ETH, Hash rate,..
  • Search Engine: Để tra nội dung của transaction hay block.

Khi click vào 1 block nào đó, ta sẽ có bản chi tiết các thông tin của block đó như hình bên dưới:

  • Block Height: Độ dài của chain hay nói cách khác là số lượng blocks.
  • Transactions: Có bao nhiêu transactions trong block đó.
  • Hash: Đoạn mã hash của block, bổ trợ cho việc truy xuất block.

Cách Blockchain đạt được Immutability

  • Merkle Tree: Merkle Tree là dạng cấu trúc dữ liệu hình nhánh cây bao gồm Merkle Branch, Merkle LeafMerkle Root như hình bên trên.

Mỗi một transaction (như trong hình bên trên) có thể coi là 1 Merkle Leaf. Sau khi mã hóa bằng hash function những Leafs này sẽ cho ra các đoạn hash khác nhau (hash0, hash1, hash2, hash3).

Tiếp tục dùng hash function cho 2 hashes vừa mới tạo ra để tạo ra 1 hash mới. Các đoạn hash mới này ta gọi là Merkle Branches. Hai branches hash lại với nhau ta có branches mới, cho tới khi chỉ còn lại 1 hash thì hash đó gọi là Merkle Root.

Block Header sẽ là thứ đáng quan tâm nhất của 1 block khi nó chứa những thông tin căn bản nhất của block đó và giúp truy xuất dữ liệu dễ dàng.

Một Block Header sẽ chứa các thành phần chính như sau

  • Previous Block Hash : Hash của Block Header của block trước đó.
  • Timestamp: Thời điểm tạo ra block đó.
  • Nonce: Một con số random mà các miners thi nhau giải thuật toán để tìm ra nó. Miner nào tìm ra được số này thì coi như được quyền tạo block mới và nhận phần thưởng block rewards (BTC,ETH,…).
  • Hash: Tất cả thứ này với nhau ta được Hash của block header hiện tại.

Một khi ai đó can thiệp và thay đổi transactions trong 1 block bất kì thì hash của block đó sẽ thay đổi theo. Điều này dẫn đến việc block sau đó sẽ không có hash giống với block đã bị thay đổi dẫn tới hệ thống sẽ từ chối sự thay đổi này.

Flow của Transactions trong Blockchain

Transactions trong lúc chờ đợi được đưa vô block thì sẽ nằm trong Mempool.

Full node miners sẽ cần các thứ chính sau để được quyền tạo block mới:

  • Nonce
  • Previous Block Hash: Hash của block header của block trước.
  • Previous Block Data: Dữ liệu lịch sử của toàn bộ chain trước đó.

Trong lúc này các miners sẽ phải thi nhau giải mã các thuật toán để tìm ra số nonce. Với số này và các data của các block trước đó thì miner đó mới có quyền tạo block mới. Transaction một khi được đưa vào block mới thì coi như không thể đảo ngược.

Transactions trong Mempool sau khi được đưa vào block sẽ được miners tạo ra block đó gửi thông tin đi các nodes còn lại. Nhiệm vụ của các nodes này chính là kiểm tra các giao dịch mới này có hợp lệ không. Sau khi không có conflict gì giữa các giao dịch thì block mới sẽ tiếp tục sinh ra. Lúc này sẽ xuất hiện 2 trường hợp:

  • TH 1: Không có miner nào sở hữu 51 % sức mạnh máy tính của mạng lưới. Miner A đóng block xong và gửi giao dịch đi đến các miner khác. Giao dịch này được chấp nhận, block mới sẽ tiếp tục được tạo ra. Giao dịch nằm trong block của miner A gửi đi sẽ có mức độ tin cậy càng cao khi càng có nhiều block phía sau nó. Số lần confirmations tương đương với số block sau block chứa transaction này.
  • TH 2: Có ai đó sở hữu 51% sức mạnh máy tính và cố tình tấn công network. Khi này giả sử Miner A (Bad actor) đóng block xong, gửi giao dịch sai đi cho các miner còn lại và dùng 51% sức mạnh máy tính để khiến 49% miner phải chấp nhận là giao dịch này hợp lệ thì coi như network bị tấn công. Chi phí để tấn công mạng lưới tương đương với chi phí actor này bỏ ra để sở hữu 51 % sức mạnh máy tính. Chi phí này sẽ tăng theo thời gian. Chiếm được càng lâu thì các transaction ở block bị compromised sẽ càng khó đảo ngược do chain đã đi qua thêm nhiều block khác.
  • Uncle Blocks: Trường hợp có 2 miner cùng tìm được số nonce và được phép tạo block, thì chain sẽ tạm thời tạo ra thành 2 chains song song.
    • Khi 2 miner này gửi block của mình cho các miner còn lại.
    • Chain của miner nào đạt được số blocks mà network quy định trước (Ví dụ như Ethereum là 6 blocks) thì chain đó sẽ được chọn để tiếp tục.
    • 2 Miners đều sẽ được nhận block rewards (Đối với Ethereum, Bitcoin thì miner nào được chọn thì mới nhận). Blocks bị bỏ đi sẽ gọi là Uncle Blocks.
    • Việc này gọi là temporary fork và nó xảy ra mỗi ngày trên chain và ảnh hưởng trực tiếp tới Finality rate (Giải thích bên dưới).

Understand Blockchain Scaling Metrics

Latency

Trong khi tất cả mọi người đều quan tâm tới TPS (Transactions per second) và dùng nó để đánh giá Perfomance của blockchain thì lại quên đi Latency. Latency thực chất chính là khoảng thời gian bạn thực hiện giao dịch cho tới khi giao dịch đó được đưa vào block. Latency có thể bị ảnh hưởng bởi các yếu tố như tốc độ internet của bạn, block time của chain mà bạn đang sử dụng và đôi khi là do quyết định của miner.

Khi thực hiện 1 transaction, thì transaction đó được gửi tới Mempool, Miner nào được tạo block sẽ chọn trong pool này những giao dịch mà miner này muốn đưa vào block tiếp theo. Do đó Latency sẽ bảo gồm:

  • Thời gian từ máy tính bạn tới máy tính của miner
  • Thời gian giữa các block (block time)
  • Thời gian chờ miner chọn transaction của bạn bỏ vào block.

Những blockchain có block time càng ngắn, thì thời gian mà miner cho transaction của bạn vào block sẽ càng ngắn. Do yếu tố quyết định của miner và thời gian bạn gửi transaction của mình vào Mempool ta không kiểm soát được cho nên những design của blockchain sau này sẽ tập trung cải thiện block time.

Finality

Khái niệm thứ hai chính là Finality. Finality chính là thời gian để 1 transaction được đưa vào block và không thể đảo ngược. Khác với Latency, khi mà 1 transaction đưa vào block đôi khi vẫn có thể bị đảo ngược/ thay đổi/ hủy.

Finality chính là thời gian ước tính để transaction gần như không thể bị đảo ngược (Trừ khi có 51% attack trong thời gian tương đối, càng nhiều block sau nó thì càng cần attack lâu). Transactions sẽ càng ngày càng final khi có càng nhiều block phía sau nó (nhiều confirmations).

Đối với các blockchain khác nhau thì sẽ cần số lượng confirmations khác nhau để đạt Finality như Bitcoin sẽ cần khoảng 6 confirmations tương đương với 6 blocks trôi qua. Thời gian cho 1 block sẽ là 10 phút ⇒ mất 60 phút để finalized.

Capacity

Băng thông của 1 blockchain được đo lường thông qua TPS (Transactions Per Second). Có thể hiểu là trong 1 giây có thể xử lý được bao nhiêu transactions.

Bandwidth = Transactions Per Second = TPS.

TPS có dùng 2 biến số : Block Time và Block Size để đo lường.

Hình bên dưới là ví dụ cách tính TPS của Bitcoin.

https://miro.medium.com/max/1400/1*xyMSOU0cmg7bshSas0TaxA.png
Cách tính TPS của Bitcoin

Như vậy, Để Scale blockchain về lý thuyết chúng ta phải cố gắng cải thiện các metrics sau:

  • Block Time ⇒ Thời gian để tạo block tiếp theo phải càng ngắn càng tốt.
  • Block Size ⇒  Gia tăng diện tích block để 1 block có thể chưa được nhiều giao dịch hơn.
  • Finality rate ⇒ Giảm số lượng block cần thiết để finalized xuống thấp nhất để nhanh chóng đạt được finality.
  • Xử lý Mempool ⇒ Thay thế mempool bằng 1 hệ thống truyền tải giao dịch khác công bằng và nhanh hơn ít phụ thuộc vào miner.

Điều quan trọng nhất chính là giải quyết những bài toán scaling này nhưng vẫn giữ được tính decentralized và security ở mức cao.

Một số giải pháp đã được offers

Những ai trong thị trường crypto hay có tìm hiểu về blockchain thì đều biết những giới hạn của nó. Những năm gần đây, đã có rất nhiều teams đã và đang cố gắng để giải quyết bài toán scaling này. Hãy nhìn qua các giải pháp nổi trội.

  • Tăng Block Size: Một trong những giải pháp thuần túy nhất đó chính là trực tiếp tăng Block Size. Bitcoin bình thường sẽ có Block Size cỡ 1Mb. Ngưỡng lý thuyết cho Block Size của Bitcoin là 4Mb dù chưa bao giờ đạt được như vậy. Bitcoin Cash, bản fork của Bitcoin đã cố gắng tăng Block Sizes của chain mình lên 32Mb. Điều này có thể sẽ dẫn tới việc, miners sẽ cần máy tính cấu hình cao hơn để tham gia vào mạng lưới ⇒ Ít miners có điều kiện tham gia ⇒ Centralize Chain.
  • Sharding:  Sharding cũng là giải pháp được đề cập tới nhiều tuy chưa được áp dụng thực tế nhiều và có nhiều design khác nhau. Sharding về cơ bản là chia nhỏ blockchain thành nhiều mảnh và cho các mảnh này xử lý giao dịch theo cụm và chạy song song. Việc chia nhỏ này sẽ giảm workload giữa các nodes và tăng hiệu quả xử lý dữ liệu. Ethereum sẽ cố gắng thực hiện sharding sau khi thực hiện xong The Merge. Giải pháp này có một dấu hỏi về Security. Khi mà 1 Shard sẽ dễ tấn công hơn là toàn bộ chain lớn. Khi 1 shard bị tấn công nó có thể gửi thông tin sai lệch đi toàn mạng lưới. Với giải pháp của Ethereum, Ethereum sẽ giao các nodes một cách ngẫu nhiên đến 1 shards cụ thể nào đó và vào các khung thời gian ngẫu nhiên sẽ cho các nodes này xác minh trên shards này để ngăn chăn rủi ro này. Một số projects cố gắng áp dụng sharding khác đó chính là Near & Elrond. Dù rằng sharding của họ chưa toàn diện
  • State Channels: State channel cho phép users thực hiện các giao dịch chuyển tiền qua lại thông qua hệ thống off-chain. Việc này chỉ có thể áp dụng với 1 số users được chọn. Lightning Network chính là giải pháp nổi tiếng nhất áp dụng cộng nghệ này và dùng cho Bitcoin. State Channel điểm mạnh là sẽ giúp bạn giao dịch nhanh, riêng tư và chi phí thấp. Điểm yếu chính là buộc phải lock một lượng lớn token để tăng tốc độ giao dịch cho Users. Việc này sẽ hy sinh tính Decentralized và Security cũng không chắc được đảm bảo. Plasma Chain cũng hoạt động với concept gần như vậy nhưng là cho Ethereum.
  • Rollups: Các bạn có thể đọc thêm ở đây:
Layer 2: Rollups
Hôm nay sẽ là một bài viết về Rollups để các bạn hiểu hơn về concept này. Sắp tới có thể Rollups cũng có thể sẽ là một trong những đột phá mới ở infrastructure layer. Như đã biết, Ethereum nói riêng và các Layer 1 khác nói chung đều

Ngoài ra còn rất nhiều giải pháp khác như design PoH của Solana, Appchains của Cosmos hay Kadena Sidechain Model, Modular Blockchain của Ethereum, Celestia. Những giải pháp này cốt yếu cũng xoay quanh việc giảm tải cho chain chính bằng cách chia bớt workload cho các chain phụ, hay tìm cách để xử lý tính toán các transaction sao cho tối ưu. Để làm được việc này, trade-offs là điều không thể tránh khỏi. Ở những bài sau, mình sẽ cố gắng cover những design nổi trội nhất để cho các bạn có cái nhìn tổng thể hơn.