20 minute read

Terms:

  • Nonce: number only used once
  • satoshi: 1/100.000.000th of a bitcoin
  • Genesis block: Block #0
  • Blockchain explorer: phần mềm hoạt động như một bitcoin search engine.
  • BIP: Bitcoin Improvement Proposal
  • UTXO: unspent transaction outputs
  • Byzantine Generals Problem: a reliable computer system must be able to cope with the failure of one or more of its components. A failed component may exhibit a type of behavior that is often overlooked - namely, sending conflicting information to different parts of the system. The problem of coping with this type of failure is expressed abstractly as the Byzantine Generals Problem.
  • KYC: the process of a business, identifying and verifying the identity of its clients. The term is also used to refer to the bank regulation which govens these activities.

Ngoài ra, có thể xem thêm các thuật ngữ khác ở Quick Glossary (trang 25).

Bitcoin

/handbook/assets/images/bitcoin/Untitled.png

Bitcoin Overview

Bitcoin là một tập hợp các khái niệm và công nghệ hình thành nên nền tảng của hệ sinh thái đồng tiền kỹ thuật số. Bitcoin bao gồm:

  • A decentralized P2P network (the bitcoin network)
  • A public transaction ledger (the blockchain)
  • A set of rules for independent transaction validation and currency issuance (consensus rules) (quy tắc đồng thuận)
  • A mechanism for reaching global decentralized consensus on valid blockchain (Proof-of-Work algorithm)

Nói một cách đơn giản thì Bitcoin là mạng lưới cho phép giao dịch và sở hữu một cách an toàn các digital assets thông qua tính toán phi tập trung.

Bitcoin Core: reference implementation of the bitcoin system

(Em đã cài thử bitcoin core trên linux và chạy một số command theo sách)

Tại sao Bitcoin có giá trị ?

  • Bitcoin currency is deflationary.
  • Bitcoin is reliable and secure

Keys, Address

Ownership in bitcoin: digital keys, bitcoin addresses and digital signatures.

→keys và address có thể thay đổi thường xuyên để đảm bảo sự riêng tư (khó để trace các giao dịch của người đó).

→ownership chỉ phụ thuộc vào private key, không liên kết với danh tính người dùng.

/handbook/assets/images/bitcoin/Untitled%201.png

Private key: 256bit random number. (64 hex digits)

  • Generate một chuỗi bit random rồi cho vào SHA256 rồi kiểm tra điều kiện < n-1 (với n là constant thể hiện order of the elliptic curve trong bitcoin → tìm hiểu Elliptic Curve Cryptography).
  • Encrypted Private Keys (BIP-38): mã hóa private key với passphrase và Base58Check để lưu trữ an toàn.

Public key:

  • Generate from k using elliptic curve multiplication.

Bitcoin address: 160 bits

  • A bitcoin address can represent the owner of a private/public key pair (P2PKH - start with “1”), or it can represent something else, such as a payment script (P2SH - start with “3”).
  • A = RIPEMD160(SHA256(K))
  • Cuối cùng là mã hóa Base58Check Encoding.

Ưu điểm của Base58Check Encoding:

  • Có error detection code
  • Loại bỏ một số ký tự dễ gây nhầm lẫn (từ 64 rút xuống còn 58 ký tự).

Sử dụng asymmetric cryptography (public key và private key) chủ yếu là vì nó hỗ trợ digital signature chứ không chỉ vì vấn đề bảo mật.

Wallet

Bản chất của wallet là keychain. Key pairs và addresses thường được tạo bởi ví. Có 2 loại ví:

  • Nondeterministic wallet: các key không liên quan đến nhau. Khó quản lý, backup, import. (discouraged to use).

    /handbook/assets/images/bitcoin/Untitled%202.png

    Type-0 nondeterministic wallet.

  • Deterministic wallet: các key được sinh ra từ master key (seed). Các key có liên quan đến nhau và có thể sinh lại lần nữa nếu biết được seed. Dạng derivation phổ biến nhất là hierarchical deterministic or HD wallet (tree-like structure). Để dễ nhớ thì seed thường là mnemoic code words.
    • Điểm mạnh 1: có thể chia nhiều branch of key để quản lý.
    • Điểm mạnh 2: có thể sinh public keys mà không cần access private keys.

    /handbook/assets/images/bitcoin/Untitled%203.png

    Type-1 deterministic wallet

    /handbook/assets/images/bitcoin/Untitled%204.png

    Type-2 deterministic wallet

  • Mnemonic to seed: mnemonic code words + salt + passphrase (optional)→ key stretching function (2048 hashing rounds) → 512-bit seed.

Balance trong ví là tổng số UTXO mà ví sở hữu (keep track bởi ví). Có thể sử dụng blockchain explorer để truy vấn total balance của 1 public key hash, tuy nhiên con số có thể không chuẩn do có độ trễ trong quá trình đồng bộ.

Transactions

/handbook/assets/images/bitcoin/Untitled%205.png

Transaction are data structures that encode the transfer of value between participants in the bitcoin system. →sẽ được lưu trong sổ cái là blockchain. Transactions có thể bao gồm nhiều input, nhiều output. Phần chênh giữa input và output là transaction fee.

Có một giao dịch ngoại lệ gọi là coinbase transaction, đây là giao dịch đầu tiên xuất hiện ở mỗi block, dùng để reward cho winning miner. Thay vì input là UTXO thì là một loại input đặc biệt gọi là coinbase.

  • Example of normal transaction:

      {
      	"version": 1,
      	"locktime": 0,
      	"vin": [
      		{
      			"txid":
      			"7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
      			"vout": 0,
      			"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204
      			b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL]
      			0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d1
      			72787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
      			"sequence": 4294967295
      		}
      	],
      	"vout": [
      		{
      			"value": 0.01500000,
      			"scriptPubKey": "OP_DUP OP_HASH160
      			ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"
      		},
      		{
      			"value": 0.08450000,
      			"scriptPubKey": "OP_DUP OP_HASH160
      			7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",
      		}
      	]
      }
    

Transaction Outputs gồm 2 phần chính:

  • An amount of bitcoin (in satoshi).
  • A cryptographic puzzle that determines the conditions required to spend the output. Also known as a locking script, or witness script or scriptPubKey.

Transaction inputs bao gồm 3 phần chính:

  • Pointer to an UTXO thông qua transaction hash. (txid)
  • Output index (vout): chỉ ra UTXO nào từ transaction trên được sử dụng.
  • Unlocking script (scripSig): wallet constructs in order to satisfy the spending conditions set in the UTXO. Thường thì unlocking script là chữ ký điện tử và public key để chứng tỏ quyền sử hữu.

Transaction Fees:

  • Fees = Sum(Inputs) - Sum(Outputs)
  • Dùng để trả cho miner, cũng như để hạn chế attacker spam transaction trong hệ thống. Fee không bắt buộc, nhưng ảnh hưởng đến processing priority. (thời gian để validate transaction)
  • Khi tạo transaction cần tự động tính fee (dynamic fees), thường là dùng dịch vụ của 3rd party.
  • Thường được tính dựa vào size of transaction (in bytes). →dựa vào độ phức tạp của transaction (số lượng input, output), không dựa vào amount của transaction.

Transaction Scripts and Script Language

Locking script: a spending condition placed on an output.

  • Other names: scriptPubKey, witness script, cryptographic puzzle

Unlocking script: a script that satisfies the conditions placed on an output by locking script and allows the output to be spent.

  • Có ở tất cả transaction input.

Để tiêu dùng, ví sẽ cần nhìn vào locking script của UTXO và tạo unlocking script tương ứng. Ngoài ra, cũng phải truy vấn giá trị đầu vào từ transaction để còn tính transaction fee. Tất cả các node tham gia validating đều phải truy vấn để tính transaction fee.

  • Bitcoin address start with “1”: pay-to-public-key-hash (P2PKH) are derived from the public key.
  • Bitcoin address start with “3”: pay-to-script-hash (P2SH) address, còn gọi là multisignature or multisig address. → người thụ hưởng là hash of a script, thay vì owner of a public key. Cách hash và mã hóa tương tự với public key, nhưng đầu vào là script.
    • Thường thì sẽ yêu cầu M-of-N signatures để có thể spend.
  • 2 tính chất của Bitcoin transaction scripting language:
    • Turing incompleteness: limited complexity and predictable execution times, no loops or complex flow control capabilities other than conditional flow control.
    • Stateless verification: a script will predictably execute the same way on any system.
  • Cách validate transaction:

    Tất cả các bitcoin validating node sẽ validate transaction bằng cách thực thi locking script và unlocking script đồng thời (thực hiện các operation trên stack) để kiểm tra điều kiện. Sau khi validate thành công thì input đó sẽ bị xóa khỏi UTXO set. → việc dùng lại output đã được mở sẽ không thành công.

    Cách validate ban đầu:

    • Concat unlocking script + locking script
    • Xử lý trên stack. Khi kết thúc, nếu chỉ còn TRUE ở trong stack là validate thành công.

    Cách cải tiến (2010 cho đến nay):

    • Không concat 2 script nữa. Xử lý unlocking script trước rồi truyền stack sang để xử lý locking script.

Pay-to-Pubic-Key-Hash (P2PKH): dạng locking script cho phép mở khóa bằng signature và public key.

Unlocking Script:

Locking Script:

OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG

→Transaction không show trực tiếp bitcoin address, cần lấy public key hash từ locking script, từ đó tìm ra được bitcoin address.

  • Chi tiết về Digital Signature trong bitcoin
    • Bitcoin use Elliptic Curve Digital Signature Algorithm (ECDSA)
    \[Sig = F_{sig}(F_{hash}(m), dA)\]
    • Signature is composed of two values: Sig = (R, S)
    • Signature is serialized by Distinguished Encoding Rules (DER).
    • SIGHASH flag: indicate which path of transaction’s data is included in the hash signed by the private key. Most used: SIGHASH_ALL

Multisignature: cho phép có ít nhất M chữ ký tương ứng với M public key trong tổng số N public key là có thể mở được khóa.

Pay-to-script-hash (P2SH): giải quyết vấn đề độ dài của locking script mà vẫn tận dụng được cơ chế multisignature.

/handbook/assets/images/bitcoin/Untitled%206.png

  • P2SH addresses start with “3”.

The Bitcoin Network

Peer-to-Peer Network Architecture

  • Decentralization of control is a core design principle that can only be achieved and maintained by a flat, decentralized P2P consensus network.
  • “Bitcoin network” chỉ tập hợp các node chạy bitcoin P2P protocol. Ngoài bitcoin P2P protocol, thì còn Stratum protocol dành cho mining và lightweight node.
  • “Extended bitcoin network” chỉ tổng thể hệ thống bao gồm của bitcoin P2P protocol, pool-mining protocol,…

Functions of a bitcoin node:

  • Routing
  • The blockchain database
  • Mining
  • Wallet service

/handbook/assets/images/bitcoin/Untitled%207.png

A full node with 4 functions

Không phải node nào cũng cần đủ 4 function →sinh ra các biến thể khác nhau. Vd: full block chain node, solo miner, lightweight wallet, mining nodes,…

Bitcoin P2P network không phù hợp với miner do có độ trễ kết nối lớn. →Bitcoin Relay Network là mạng lưới sinh ra nhằm tối giản độ trễ trong việc truyền các block giữa các miner.

→FIBRE: UDP-based relay network (mạng cải tiến hơn nữa, 2016).

Network Discovery

Khi node mới được tạo, nó cần tìm peer để kết nối. Làm thế nào để tìm ? →query DNS từ một số “DNS seeds” (server chứa các IP addresses của các bitcoin node ổn định).

  • Node 1 yêu thiết lập kết nối TCP với Node 2. Node 2 kiểm tra thông tin và xác nhận kết nối.
  • Node 1 gửi yêu cầu lấy thêm IP của các peer của Node 2. Node 2 gửi lại dãy các IP
  • Node 1 lặp lại quá trình kết nối với các node khác dựa trên dãy IP mà node 2 gửi.

Các node sẽ gửi tin nhắn định kì để check kết nối →quá trình này đảm bảo mạng lưới sẽ tự co giãn mà không cần có trung tâm điều khiển.

Full Nodes:

  • Chứa bản copy đầy đủ của blockchain.
  • Có thể verify bất kì transaction nào một cách độc lập.
    • Verify dựa trên height của blockchain. Giả sử muốn verify tx trong block 10000 thì sẽ duyệt 10000 block trước đó để xây dựng nên UTXO set.
  • Liên tục cập nhật blockchain bằng cách gửi request getblocks đến các peers.

Simplified Payment Verfication (SPV) Nodes

  • Chỉ lưu block headers chứ không tải các transaction kèm theo các block.
  • SPV verify transaction
    • Verify dựa vào depth of blockchain. Giả sử muốn verify tx trong block 10000 thì kiểm tra nếu có nhiều block nằm trên block 10000 thì tx được xác thực.
    • Kiểm tra được sự tồn tại của tx trong block (dựa vào merkle path proof và validating proof-of-work in the chain of blocks).
    • Không kiểm tra được UTXO đã được dùng hay chưa (không kiểm tra được rằng tx này không tồn tại).
      • Cần kết nối đến một sô node để tăng xác suất gặp ít nhất 1 node trung thực.

Các pool trong node:

  • Transaction Pools: một danh sách các unconfirmed tx (gọi là transaction Pools). Danh sách này sẽ được lưu ở local storage của các node và được lưu truyền tới các node trong mạng.
  • Orphan pool: chứa các transaction chưa rõ parent. Nếu node đó nhận được parent khớp transaction trong orphan pool thì nó sẽ được chuyển sang transaction pool.
  • UTXO pool: chứa toàn bộ UTXO trong mạng.

Blockchain

Blockchain: a data structure which is an ordered, back-linked list of blocks of transactions.

Block:

  • định danh bởi block header hash (block hash). →nếu cha thay đổi thì con sẽ bị thay đổi. →khiến cho block sẽ rất khó để thay đổi, khi mà phải tính toán lại tất cả các block có sau nó.
  • Cách thứ 2 để định danh đó là dựa vào block height. (có thể có nhiều block trùng block height do blockchain fork).
  • chỉ có 1 cha duy nhất (1 previous block hash field), tuy nhiên có thể có nhiều con (do blockchain fork)

/handbook/assets/images/bitcoin/Untitled%208.png

Block structure

Block header:

/handbook/assets/images/bitcoin/Untitled%209.png

Structure of block header

Merkle Trees:

  • Mỗi block chứa summary của tất cả tx có trong nó bằng merkle tree (binary hash tree).
  • Merkle Root: 32-byte hash, stored in the block header.

    /handbook/assets/images/bitcoin/Untitled%2010.png

    • Nếu tree lẻ thì tx sẽ được duplicate để đảm bảo balanced tree.
  • Giúp verify tx có trong block hay không một cách nhanh chóng.
    • Để verify, cần tạo authentication path (merkle path) nối transaction đó đến root. Độ dài path là log2(N) * 32 bytes (or log2(N) hashes).

    /handbook/assets/images/bitcoin/Untitled%2011.png

    • SPV verify tx nằm trong block bằng cách truy vấn merkle path từ peer (không cần tải blockchain)

Bitcoin’s Test Blockchains

Testnet:

  • Public, sử dụng để test
  • Testnet coins: vô giá trị và sẽ giữ độ khó của việc đào dễ để đồng tiền vô giá trị.
  • Testnet được “restared” thường xuyên để đảm bảo testnet coin vô giá trị.

Regnet - local blockchain:

  • Môi trường đóng, có thể tạo local genesis block.

Mining and Consensus

Mining đối với Bitcoin:

  • Tạo lượng bitcoin mới sau 10 phút, số lượng bitcoin được sinh ra sẽ giảm một nửa sau khoảng 4 năm (chính xác là 210,000 blocks).
    • Quy định rate như thế để đảm bảo deflationary money.
    • Nó được gọi là mining bởi vì reward giảm dần, tương tự việc đào đá quý.
  • Khi mà giao dịch được truyền trong bitcoin network, nó chưa nằm trong blockchain cho đến khi nó được xác nhận và thêm vào block thông qua quá trình mining.
  • Mining is the mechanism that underpins the decentralized clearinghouse, by which transactions are validated and cleared. Mining is the invention that makes bitcoin special, a decentralized security mechanism that is the basis for P2P digital cash.

Decentralized Consensus

  • Thể hiện qua sự thống nhất về blockchain.
  • Xuất phát từ 4 quá trình diễn ra độc lập giữa các node trong mạng:
    • Independent Verification of each transaction, by every full node, based on a comprehensive list of criteria (1)
    • Indepedent aggregation of those transactions into new blocks by mining nodes, coupled with demonstrated computation through a Proof-of-Work algorithm (2)
    • Indepedent verification of the new blocks by every node and assembly into a chain (3)
    • Independent selection, by every node, of the chain with the most cummulative computation demonstrated through Proof-of-Work. (4)

Independent Verification of Transactions (1)

  • Trước khi forward, mỗi node phải verify transaction được nhận.
  • Từ đó, mỗi node sẽ thêm tx vào transaction pool (valid but unconfirmed)

Mining the Block (2)

Công việc của Miner:

  • Đào: giải Proof-of-Work →tốn computation resource (phụ thuộc vào độ khó của bài toán)
    • Đây là quá trình tạo ra block: tập hợp các tx từ transaction pool vào 1 block. Giải PoW để block đó valid.
  • Giải càng nhanh càng tốt để block được thêm vào blockchain.

Lợi ích của Miner khi tham gia:

  • Lấy được coinbase reward.
  • Lấy được transaction fee. Khi mà số lượng bitcoin gần hết thì nguồn thu chính của miner sẽ là từ transaction fee.

Constructing the Block

Xây dựng Coinbase Transaction:

  • Amount = coinbase reward
  • Được tính dựa trên block height (công thức: giảm một nữa sau mỗi 210000 blocks)
  • Coinbase tx không có unlocking script mà sẽ được thay thế bởi coinbase data

Constructing the Block Header

  • Previous block hash: set field này để “vote” for the longest-difficulty valid chain.
  • Xây dựng merkle tree từ toàn bộ transaction →ghi merkle root vào block header.
  • Target field: defines the required Proof-of-Work to make this a valid block.
  • Nonce: init to 0.

Now, the block header is complete, the process of mining can begin. The goal is to find a value for the nonce that results in a block header hash that is less than the target.

Bản chất về kỹ thuật: Mining is the process of hasing (SHA256) the block header repeatedly, until the resulting hash matches a specific target.

Proof-of-Work Algorithm

Vd:

  • Tìm nonce để hash bắt đầu bằng số 0 ↔ Tìm nonce để hash nhỏ hơn 0x1000000000000000000000000000000000000000000000000000000000000000. →Gọi threshold này là target. Càng giảm target thì sẽ càng khó để tìm.
  • Vì sử dụng deterministic function như SHA256 thế nên input đã ẩn chứa proof rằng đã cần một lượng work để tính được kết quả. →Proof-of-Work

Tại sao độ khó có thể thay đổi ?

Dựa vào công thức tính new target.

New Target = Old Target * (Actual Time of Last 2016 Blocks / 20160 minutes)

Ai là người thay đổi nó ? và làm như nào ?

Bitcoin’s blocks được sinh ra sau trung bình 10 phút →This is bitcoin’s hearbeat and underpins the frequency of currency inssuance and the speed of transaction settlement. →Phải giữ cố định tốc độ này.

→ Độ khó phụ thuộc lớn vào giá điện và tỉ giá giữa bitcoin và các loại đồng tiền để chi cho tiền điện.

Validating a New Block (3)

Khi “đào” thành công, miner sẽ gửi block của mình đi khắp network để cập nhật vào blockchain.

Khi node nhận được block mới, nó sẽ phải validate block dựa trên một loạt các tiêu chí, trong đó có:

  • Số tiền thưởng hợp lệ
  • Solution to PoW hợp lệ

Assembling and Selecting Chains of Blocks (4)

Mỗi node duy trì 3 set of blocks:

  • Those connected to the main blockchain
    • Mainchain dùng để mining, để verify transaction,…
    • Các mainchain trong hệ thống sẽ đến một lúc hội tụ làm 1 mainchain duy nhất. (do cách lựa chọn mainchain độc lập ở mỗi node).
  • Those that form branches off the main blockchain (Secondary chains)
    • Xảy ra khi node nhận được 2 block đồng thời hợp lệ để đưa vào blockchain →blockchain fork
  • Blocks do not have a known parent in known chains (orphans)
    • Xảy ra do độ trễ của việc lan truyền các block. Xác suất xảy ra rất nhỏ, nhưng vẫn có thể xảy ra.

Lựa chọn main chains: là lựa chọn tip of chain để tiếp tục.

  • Chọn greatest-cummulative-work chain.

Consensus Attacks

Consensus machanism depends on having a majority of the miners acting honestly out of self-interest.

→ vulnerable to attack by miners or (pools) that attempt to use their hashing power to dishonest or destructive ends.

→ Can only affect future consensus or at best, the most recent past (tens of blocks).

  • Not stealing bitcoin
  • Not affect the security of the private keys and signing algorithm

51% attack

Attacking miners can:

  • cause deliberate “forks” in the blockchain and double-spend transactions
  • execute DDOS attacks against specific transactions or addresses.

Với dạng tấn công double-spend:

  • Fork sang nhánh khác, khiến cho các block đã được validate trở thành invalidated. → có thể double-spend các transaction ở block đó.
  • Nếu mà thực hiện giao dịch lớn, thì rủi ro bị double-spend attack sẽ lớn.
    • Attackers sẽ spam transaction của mình với same input (UTXO) để loại bỏ transaction thật.
    • để tránh bị tấn công, bên B sẽ phải đợi ít nhất 6 confirmations rồi mới đưa hàng cho A.

Với dạng tấn công DDOS:

  • Tập trung vào một bitcoin address. Ignore các transaction đến từ địa chỉ đó.
  • Nếu mà transaction đó lọt ra và được confirm vào một block nào đó thì attacker thực hiện blockchain forking để ignore nó.

Ngưỡng 51% chỉ là ngưỡng để đảm bảo cuộc tấn công có khả năng thành công cao.

  • Nghiên cứu thống kê chỉ ra các loại tấn công kiểu này thành công chỉ với 30% hashing power.

Việc điều khiển tập trung mining pool cũng tăng rủi ro bị tấn công vào mining pool operator.

Changing the Consensus Rules

Trong dài hạn, việc thay đổi luật là hoàn toàn có thể xảy ra. Việc nâng cấp consensus system đòi hỏi định hướng giữa các bên tham gia.

Hard Forks

Ngoài trường hợp mạng lưới bị chia bởi quá trình đẩy block vào blockchain thì còn bị chia bởi sự thay đổi consensus rules. → hard forks.

  • Không thể hội tụ lại về 1 nhánh được.
  • Hard fork đòi hỏi sự định hướng chung giữa các bên tham gia trong hệ thống.
  • Nếu phần mềm ko upgrade phiên bản mới thì ko process được block của phiên bản mới. Trên thực tế là sẽ không nhận được block đó luôn.
  • Còn nhận block phiên bản cũ thì sẽ hard fork sang nhánh mới. → Cả 2 nhánh đều được validate, khác với soft fork.

Conceptually, we can think of a hard fork as developing in four stages: a software fork, a network fork, a mining fork, and a chain fork.

The hard fork process will begin when a block is mined under the new rules.

Diverging Miners and Diffifulty

Miner có thể chia hashing power cho 2 nhánh. Giả sử là chia 80/20, nhánh 80 là nhánh với new rules.

→ Mining power giảm 20% so với trước đó → trung bình 12 phút. → Sau 2016 blocks (hay 16.8 ngày) thì retarget sẽ xảy ra để đảm bảo trung bình 10 phút.

Nhánh nhỏ hơn với 20% sẽ đối diện với task khó → trung bình 50 phút, mất 10 tuần để retarget.

Contentious Hard Forks

Hard forks are seen as risky because they force a minority to either upgrade or remain on a minority chain. → việc chia nhỏ hệ thống là rủi ro không thể chấp nhận.

→ các hard fork proposals mà không được đồng thuận cao thì được coi là contentious hard forks.

Hard fork là một vấn đề gây nhiều tranh cãi trong cộng đồng phát triển bitcoin.

Soft Forks

Soft forks: fork with forward-compatible.

Trên thực tế, soft fork không thực sự fork. A soft fork is a forward-compatible change to the consensus rules that allows unupgraded clients to continue to operate in consensus with the new rules.

→ có thể thấy rằng soft fork chỉ có thể sử dụng để hạn chế consensus rules chứ không để mở rộng nó. (thì thế mới tương thích).

Soft forks redefining NOP opcodes

BItcoin Scripts để dành ra 10 opcodes NOP1 - NOP10. Các phiên bản cải tiến có thể thay đổi ngữ nghĩa của NOP opcode mà vẫn tương thích với phiên bản cũ (ver cũ đơn giản là ignore)

Ngoài cách sử dụng NOP thì người ta có thể nghĩ ra cơ chế khác để biến cải tiến thành soft fork thay vì hard fork.

Criticisms of Soft Forks

Việc sử dụng NOP thì ko đáng lo ngại, vì mục đích ban đầu của nó vốn là để thay đổi. Tuy nhiên với các phương pháp khác thì có thể có các cái tradeoff:

  • Technical debt: soft fork thì thường được thiết kế phức tạp hơn hard fork.
  • Validation relaxation: các node ver cũ vẫn xác thực transaction dựa trên consesus rule cũ → blind to the new rules.
  • Irreversible upgrades: soft fork thêm vào consensus rule constraints, thành ra không thể đảo ngược được, điều này có thể dẫn đến việc loss of funds với old rules.

Soft Fork Signaling with Block Version

Để đảm bảo phần lớn miner đồng thuận với new consensus rules thì cần có signaling mechanism.

BIP-34 Signaling and Activation

Questions & Answers

Tại sao phải đợi 2016 blocks rồi mới retarget ?

Có bao nhiêu transaction trong một block ? (capacity)

Proof-of-Work vs Proof-of-Stake

References

  • Book: Mastering Bitcoin 2nd

Contributor

Comments