Transactions
為什麼 txn_count 欄位存在於一個塊中?
我想知道為什麼塊中的 txn_count 欄位存在。交易的數量可以通過解析 tx 格式的 txns 欄位來確定,對吧?事務中的“tx_in count”和“tx_out count”相同。tx_in 和 tx_out 可以只解析,然後可以根據它來確定計數,對吧?這是真的?如果是真的,為什麼存在 txn_count、tx_in 計數和 tx_out 計數欄位?
我想知道為什麼塊中的 txn_count 欄位存在。交易的數量可以通過解析 tx 格式的 txns 欄位來確定,對吧?
是的,它可以,但它不是。最終,序列化格式是一種約定,Satoshi 在創建協議中保留的初始軟體時選擇了一種。它可以改變,但為什麼要麻煩?
tx_in 和 tx_out 可以只解析,然後可以根據它來確定計數,對吧?
這並不完全正確 - 您至少需要某種方式來傳達輸入結束和輸出開始的位置(在現有協議中由 txin 計數提供服務)。在反序列化事務列表時(例如在
block
消息中),您還需要知道每個事務的結束位置和下一個事務的開始位置(在現有協議中由 txout 計數提供服務)。是否也使用它,以便您可以在解析您認為的事務之前保留一定數量的記憶體?
你可以,但實際上並沒有這樣做(至少在比特幣核心中)。問題是如果你收到一個聲稱包含十億筆交易的區塊怎麼辦?相反,它將以最多幾 MB 的增量分配緩衝區空間,因此攻擊者需要實際發送數兆字節的數據才能讓您分配那麼多。