Script
如何驗證區塊?
我在比特幣維基中看到有一種叫做“腳本”的東西,它編譯成一些字節碼,由一個非常基本的虛擬機執行。這是否意味著每個塊在進入並由節點處理時實際上只是一個字元串/字節數組?所以“真實”格式的塊看起來像 [0x01, 0x04, 0x0f, 0xa1…. 等?
然後接收塊的節點只是將字節放入解釋器以由比特幣 VM 執行?
哪個是對的?一個塊是純字節碼還是 JSON?當接收到一個新塊時,bitcoincore 節點會理解什麼?
一個塊由一個標頭組成,然後是一些序列化的交易。區塊頭不包含腳本,它只包含諸如區塊中交易的默克爾根(因此區塊頭送出到交易列表)、隨機數、版本號等數據。請注意,區塊不使用編碼JSON,它有自己的序列化格式,您可以在大多數開發人員文件中找到它(例如這裡)
該腳本僅包含在交易本身內部,專門用於指示輸出的支出條件。輸出將有一個 scriptPubKey 保存輸出腳本(通常具有特定形式,如 P2PKH、P2SH),並且在使用時輸入將包含一個包含支出腳本的 scriptSig。在隔離見證交易中,scriptSig 將為空,而腳本將位於交易的見證部分,但原理仍然相同。
區塊驗證需要許多步驟,例如驗證工作量證明、驗證時間戳是否正常、coinbase 交易是否正常、所有其他交易是否正常等。