是什麼迫使交易對所有礦工可見?
如何向礦工提供交易?是什麼阻止了以下情況的發生?
一個有效的交易最初被報告給網路中的一個“流氓”節點
A
。如果該節點是礦工,它只是為自己保留交易,以便它可以(最終)在下次將塊放入鏈中時獲得激勵。由於交易有效,網路將接受該塊,是嗎?如果
A
不是礦工,它只需與“合作夥伴”礦工合作,該礦工將每筆交易發送到並成功進入區塊鏈所獲得的激勵的一部分B
提供給區塊鏈。A``A``B``B
那麼,從某種意義上說,是什麼阻止了礦工(非法)向網路中的其他節點支付更多(有效)交易的費用?鑑於網路中立性,也許礦工可以從接收交易的節點那裡獲得更好的服務?在將交易放入區塊之前,必須有多少節點知道交易?
如果交易有效(引用已經在相同或先前塊中的輸入,腳本合法並返回成功,並且簽名驗證正常),則交易可以進入一個塊,無論任何其他節點之前是否見過它。因此,如果與特定礦工相關的“自私”節點收到一筆交易,它完全可以自由地坐在它上面,直到它可以將它包含在自己的區塊中。
這就是為什麼您不會將交易僅發送到一個節點。您可以將其發送到盡可能多的不同節點。(預設情況下,比特幣核心將嘗試在任何給定時間保持連接到多達 125 個節點,據我所知,它會嘗試向所有 125 個節點發送新創建的交易。)也許其中一些節點是“自私”,但您希望至少其中一些不隸屬於任何特定的礦工,並且會努力盡可能廣泛地轉發您的交易,這是標準節點軟體的預設行為。
運氣好的話,你的交易將很快傳播到網路上的每個礦工,每個礦工都有動機(即費用)將其包含在他們開采的下一個區塊中。(如果礦工 X 拒絕將其包含在他的下一個區塊中,並希望在稍後的某個時間探勘另一個區塊之前,他可能會冒著風險,其他收到交易的礦工 Y 將在礦工之前將其包含在她的一個區塊中X 開始探勘第二個區塊。在這種情況下,礦工 X 永遠不會得到任何費用。)
因此,一個節點未能中繼交易,將其保存到下一個區塊,不會造成太大傷害,也不會獲得太多收益。試圖為以後的塊保存交易的節點會造成一些傷害,但也有金錢損失的風險,因此有動機不這樣做。