testnet3 頻繁交易延展性
這與雙花無關,我相信相關問題與雙花乙太無關!
在比特幣的 testnet3 上,我看到(使用<https://github.com/bitpay/bitcore-p2p>)許多 tx 更改 id
設想:
- 我使用http://testnetwallet.com發送了一些 tBTC
- 我看到一個 txid 為 XXXX 的 utx 用我的輸入廣播到網路上並轉到我的測試地址(一切看起來都很酷)
- 我繼續監視所有廣播的 txs
- 一個新的區塊發生。
- 我查看了塊中的 txid,但沒有找到我的 txid
- 我在某個區塊瀏覽器 Web 服務上查詢我的接收地址,發現我的 tx 的 txid 已重命名為 YYYY
- 我再次查看該塊,發現 YYYY 在它的 tx 數組中!
- 我停止監視所有廣播的 txs
我開始認為它(tx 延展性)發生在礦工將 tx 包含到塊中時!
我從來沒有看到一個 txid YYYY 廣播的 tx 從來沒有(我看到了每筆交易!)這表明 txid 正在被改變!
我已經看到這種情況已經發生了超過 2 週,並且沒有發現有人在今天(2017 年 4 月 4 日)在相關問題中為第一人談論它。
我一直在我的程式碼中嘗試很多事情來停止依賴 txid 來辨識我的 tx 是否有 6 個確認。但是,我發現不可能……用新的 txid更新我的 tx!
我一直在嘗試(多次以不同的方式)詢問對等方(p2p 對等方)獲取新塊中每個無法辨識的 txid 的數據,但很多時候對等方似乎斷開連接….
**我的問題是:**在這種情況下我應該怎麼做?
注意:我試圖不使用 3rd 方服務
更新
我看到所有的 txs 都改變了 id 而不僅僅是我的!我正在收集我看到廣播的每個 txid 並將它們放入一個名為 seen 的數組中,然後當一個塊發生時,我在我的 seen 數組中查找塊上的每個 tx。
對於今天最後十個左右的塊,我在每個塊上都有 console.logged
看到:1/52 被 73 位同行看到:0/4 被 73 位同行看到:0/35 被 73 位同行看到:0/22 被 73 位同行等等…
testnet3 上99% 的 tx **(每個人)**都在更改 txid
我正在聽最大同行 150
證明這發生在每個人的 TX 上
{ hash: '00000000000017f2a1d8ff44f149e7ead61a38e1a03217c33762ed9ace3c0c7d', validProofOfWork: true, validTimestamp: true, prevHash: '000000000000178c28b96e945965b9311ea4005a66e8c5c2701d30f928a498d8', txs: [ '775b7b0bf9345cbee62e3af57e1660a6fd92d0a089fd0694e4804a7190dd4a05', '1133ba34f4ef95af8a53c9698877cf8b7dc0e03d3095c371c0e2a1b8cd395ce2', '14df326c04bf2da2edbd4f9f04810916b95144eeef67570458c06449d3a56fc4', 'b969a4bdab4b6a5ea91500b4230c3eadc9aa807cca000ecce6686450d2676b42', 'fa5acc2feecae6a603673c6a817f79fa3a4dd1516d50c59014772c80500b7063', '0cd386804b65a3fb826557881dc3b50c1b298b7f0a0372da8faec97a2744d0e0', '24ca695bac05c4500a596415b70bd199c935308f7a90ccfc8ae01d7b96e6b115', '8125ed124dd4d0b3af98bc6028905fb329ff311c22f484be41bf9def8ea7b63e', '4f1e5a894be245d2a68c79e2b73dde54dbeaa8bb2e872b9b1115f40c0b93585b', 'aee4a615c617d71c544930d5dbacdb62d66fb089d556d84cbe92682295895d91', '545b2164e6bc2e764a702eac1bd69e625c6100c8cbeaa9528c16cd74eb144ecb', '450c86ef90858943f6b6ba284da3987191880b2b534749d3ae762d7c9060bb7c', '83d9107d90c36b0302af47f2b7e7bece30aaf20431dcdf251faa025d31f02fa8', '4785a7fb5b0a6106152dc80d2c028b2aa80cb9b4f0ce81985b8c672a34561703', '232a70178859760c5cd75ae054c503af9db4515d92a47b9da17ca5c81cee5d34', '5c218f9e957cfd7fa97dbbdd29a81673d4c91b3441279c23607a7d3889533855', 'b2472c88eb6c7a38476444c22cb560793624216e1e36354b406f15b09dd8316b', '5a7f3652282429eedf7bd2a6d0a8404e7844515f4139d14f8d7ed1e871efd373', '5147d190550b44eddad2d8ea6cdd022e47fe71a2517458b69c07c2424fd08bb2', '8e64ee1dcde8feb6b39ee043ecc43be719d0999ad181acee4d01e9d603976ff1', '0223ed8beb7d466d9d4026665d2ba58a97cbd1e6641be22f16d23be2b4574688', '18efc474f89835fb9eb1fa9ed1fc1dc296621aae3b727aab64f4f80ff76a098f', '8f38f6030a0471c7bef2b1e1757a6db0b63edf07aab3fe12a7e85d86b35c5eb5', '6b88744cba8f7661e64c67cd554d07a1b1981fe10614647a18b101520d289816', '6aee3deb7c0cb7247c2a85f14f96f8cb8447dee00e98a72ace80cbb850f5a709', '67de891a99a4c62fc90af91f5d880f9c2be80c1fc55bc444d10b74b63dd1ae1a', '62f955cf10d52f34a0b7bf2328c5095051d8dcf5009b65dd53632d54de4a515c', 'c42685086053a0b2d989453b6f0cb17a1b60642ac963acc782b5269c8e563b89', 'e2c2114e7cd15e47a84a4a48e7c1adbb29daff0f85afb5be6015a17271859909', 'cc834a0f20e43f4eb05638398e8cfc61bfaaa303dcd82705be2c9cbf80189ded', '10907000e1062dc63c817b995683a4a7433836f450f763c910fe6191aa555f24', 'a5bf7009e9c97b1b7652d3f5ed4067c1eeb40d1625e2fadb6ffb11ca18a27e74', '40c3ffce0140a9db634e4b869e79848f4316fd40528e48b0899e2b5606075ef2', '22b9db7c0ee380ec0c4eed97788dbf6f75fedbec569fb84a6c0d27bf36923cfa', 'f4906eda20607d733ae55caf3274fa91d5c2f20506881857af59be4d8bb0af25', '98dfd83a0506b7a56e7cc6b1c91623a38ecf504c9b78c658bb8a6e5c56f7af72', 'cd2711ab3400f03cb3830e6d7401058c99f5b3c0c438fe78180785582994b884', '566251b6b27cfbca202678f87ab6ebe5e6a71f306dea8e4035bca96207e630c1', '68eb0e868ebc4f0388c130bac9adcfb26fb526d8fdd7af6646ddcb9969e045df', '1cc856b20b1a66702782b4063caa1cce1cfd9a77600d53dbb727bc8d59cdeee3', 'd5312340a7bd04a732ea6da056fa4a32ef92558a30160cb63c457b9d72603823', 'd6cadd383605ab45e1cab2499349724d8973b160cd85e226115cbb30df383d44', '30a09d4abd5f3f52d47b7a7d2da05c5e0db2e40d93ae26a3d8b772227dffed48', 'efb6889c4507f2e7ccb781dc5982e14d111b696098acaa450a286b100322ca5d', 'cb7d6e3b904b49f01c85de319d4f3ed5ecc80aa3048dfbb97bb7300bc2fb4bd1', 'bb70bd40d0d9d2ceda243172a10c05b2f9099d4ea6c62414e6c04c0309e5f7d1', '7912e77605eddb2e18a5baac16326f5ee3f31ebee5ed5badec7f9327dda75a7e', '75255b0e2000c546b5f9e3836a8ed483b401280f993b5320f433507b7dad4981', '77af8d90ecca1b09f072b244a032775f025a82c148ae8393a56bdf2f055e687f' ] }
看塊:http ://tbtc.blockr.io/block/info/1115996接下來讓我們從可能是任何人的 tx 的塊中選擇一個隨機 tx:
<http://tbtc.blockr.io/tx/info/a5bf7009e9c97b1b7652d3f5ed4067c1eeb40d1625e2fadb6ffb11ca18a27e74>
你會看到這個 tx 有兩個輸出讓我們看看輸出導致的地址之一:
<http://tbtc.blockr.io/address/info/mjSujFSUn1uCVHkD4bDj5cs3mZrp8ayec5>
哦,真是個驚喜!它有 1 個已確認的 tx 和 1 個未確認的 tx
未經證實: http: //tbtc.blockr.io/zerotx/info/8d7778e2238db427149f0c7fa46a572e0ea5c3ae9eeefe78c0ec9e4b795f0d38
確認:http ://tbtc.blockr.io/tx/info/a5bf7009e9c97b1b7652d3f5ed4067c1eeb40d1625e2fadb6ffb11ca18a27e74
兩者的輸入和輸出都相同!
我只是從今天幾分鐘前發生的隨機塊中的隨機 tx 中隨機提取出來的!
如果你瀏覽每一個 tx,那麼它們 99% 都是這樣的!
有人(我們以後稱她為 Alice)正在搞亂測試網交易,今天早些時候發生在一個礦井上。
發生了什麼
Alice 正在從交易的至少一個輸入中更改
s
EDCSA 簽名的表示(請參閱 ECDSA 簽名生成算法)。通過這樣做,簽名正在改變,但仍然有效,因此txid
改變了。她是怎麼做到的?
正如BIP62中所解釋的,該值有兩種有效的表示形式
s
,具體取決於該值的大小。此外,根據結果,DER 編碼也可能發生變化。Alice 只是通過在曲線的階數(即對於Secp256k1)和 value
s
之間執行減法來修改來自原始交易簽名之一的值之一。n``FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141``s
例子:
可以說,如果我們減去以下內容,則
s
其中一筆交易的簽名組成部分是:s = 37c0af486123367bc7839d507894bd30cba3f61e0d1bbf54727e43199864452c``s``n
s' = n - s = c83f50b79edcc984387c62af876b42cdef0ae6c8a22ce0e74d541b7337d1fc15
這是 的有效表示
s
。由於從大於
s'
開始的 DER 編碼將需要一個前導:0xc8``0x80``0x00
00c83f50b79edcc984387c62af876b42cdef0ae6c8a22ce0e74d541b7337d1fc15
誰在這樣做?
正如你所建議的,它可能是一個礦工,但它也可能是一個普通節點。
如果它是一個礦工,它可能會在包含他正在探勘的區塊的交易之前進行修改。另一方面,如果一個普通節點(比你連接得更好)接收到交易,修改它並廣播它,它可以被包含在一個塊中,而不是你的原始交易。另請注意,由於您一直在從您的節點廣播原始交易,因此您不太可能意識到嘗試雙花的交易,因為您的鄰居(您已向其發送原始交易)將放棄雙花嘗試並且不要將其轉發給您。
你能做什麼?
您可以從用於監控網路的不同來源轉發交易,並且不要依賴來自後者的交易,以查看發生了什麼。
UTXO
此外,您可以使用您嘗試花費的 (prev_txid
+index
) 而不是txid
剛剛創建的交易來監控網路。如果另一筆交易出現在同一來源的支出,您就會知道。