Transactions
確定輸入是塊 ID、交易 ID 還是地址
<https://blockexplorer.com>之類的網站如何確定輸入(參見<https://blockexplorer.com>標題中的輸入框)是地址、交易 ID 還是區塊 ID?
我想在我的本地機器上自己寫一些類似的東西,在那裡我執行一個完整的節點並可以訪問 bitcoind RPC。我需要知道如何直接輸入給定一個框可以是 3 件事。
正如 amaclin 答案中的虛擬碼中所述,區塊瀏覽器網站將簡單地檢查他們是否可以在他們的數據庫中找到雜湊/txid/地址,然後他們就會知道它是什麼類型的輸入。
您不能通過一個比特幣核心 RPC 呼叫直接執行此檢查,您必須編寫某種腳本來執行 3 次檢查,以確定您獲得了哪種類型的輸入。您可以首先使用 RPC 檢查有效的塊雜湊
getblock
,如果失敗,您就知道它不是塊雜湊。接下來,您必須txindex
在您的節點上啟用以允許自己使用gettransaction
/getrawtransaction
RPC 查詢 txid(因為預設情況下,該節點僅索引與您的錢包相關的交易)。然後檢查它是否是一個有效的地址,你可以使用validateaddress
RPC 呼叫。如果所有這些都失敗了,你就知道輸入是無效的。
無法單獨從雜湊確定它是代表地址、交易 ID 還是塊 ID。這三個都可以是任何有效的 SHA-256 數字,反之亦然。
為了確定區塊鏈瀏覽器站點可能會執行類似以下虛擬碼的操作,其中
blockDB
、transactionDB
和addressDB
分別代表所有已知的塊 ID、交易 ID 和地址。if ( blockDB.contains ( input ) ) { // this is block hash } else if ( transactionDB.contains ( input ) ) { // this is transaction id } else if ( addressDB.contains ( input ) ) { // this is address } else { // error! unknown input }