Transactions
獲取最新交易的最佳方式
我正在嘗試編寫一個實時監聽所有比特幣交易的節點。我正在考慮兩種方法:第一種是定期檢查其他節點的記憶體池,第二種是充當中繼,以便其他節點可以向我的節點廣播交易。我沒有保留任何區塊鏈數據,因此我無法驗證交易。所以我的問題是哪一個更可靠、更安全、更實時?我認為第一個更可靠,因為在第二種情況下,不確定所有交易都會廣播給我,但在第二種情況下似乎不會有任何延遲。你怎麼看?還有一些更好的方法可以實現這一目標嗎?
ps:我不想使用第三方api,這一切都應該從我的節點處理。
如果不驗證交易本身,就無法保證您從任何一種方法獲得的交易都是有效的。例如,節點可能會謊報他們在其記憶體池中的交易,並向您發送胡言亂語。另一方面,節點也沒有義務向您發送他們擁有的交易。有一些非標準的交易,例如,許多節點根本不中繼,所以你無法找到它們,但它們可能仍會在下一個區塊中被探勘。
為了真正驗證未經確認的交易,您需要成為一個完整的節點,並儲存整個區塊鏈,以便您自己驗證它們。無法保證任何其他節點在未確認交易上的行為,並且假設它們是有效的,從安全形度來看根本不是一件好事。
也就是說,如果您想要盡可能多的未確認交易集,最簡單的方法是連接到盡可能多的節點並獲取它們在記憶體池中的任何交易。比特幣網路協議有很多非常有用的命令,你可以為此創建。特別感興趣的是
inv
andgetdata
命令。當然,這正是 bitcoind 已經做的事情,它會驗證所有要啟動的交易,所以你真的會復製完全相同的功能。這裡最大的優化機會主要是選擇最好的對等點,這些對等點以某種方式“最了解”未確認的交易。