關於double spend的問題 - 數位貨幣

Table of Contents

你講得這個情形就是51%攻擊

我先大概講一下發出一筆交易是怎麼進到區塊裡的。
首先每個節點都會有一個暫存transaction的mempool,在未進到區塊裡的時候,
交易都會先被暫存到mempool裡,等發現區塊後,已經被寫到區塊裡的交易就會從mempool
裡移掉。


※ 引述《transt (transt)》之銘言:
: 假設有一個confirmed transaction T (T所在的block後面已經有6個block)
: T 的內容是 Alice 給了 Bob 一個 BTC
: 假設現在Alice神通廣大,在T所在的block之前fork了一個更長,沒有包含T的chain
: 請問
: (1) 那一個 BTC 會從 Bob 回到 Alice 手中嗎?
假如transaction T還留在任何一個節點的mempool中,那T就會被重新廣播到網路中。
此時這個BTC就會從已確認狀態,變回未確認狀態。
假如Alice只是一個單獨節點,並且mempool沒有T。
那可能其他所有節點裡的mempool都已沒有T。這個時候這筆交易自然就不存在了。

: (2) T會被丟掉,就此消失在整個network中嗎?
假如是Alice單獨作51%攻擊,T是有可能在mempol中消失。
但Bob要重新廣播也很容易。

: (3) 承(2),如果T沒有消失,那T在等待被validate的這段時間,Alice可以修改T嗎?
: (例如,Alice 把 T 的 output 從 Bob 的 address 改成自己的)
: 懇請各路專家幫忙解惑,感謝
可以,不過通常完整節點只會承認已進到mempool的T,後面意圖修改的T' 是無法進入到
mempool裡的。


通常要做51%攻擊就是直接把修改T'加入到自己產生的區塊中了。
這樣後來Bob要重新廣播T將會沒有作用

--
Bitcoin: 1GjHNjS3yAmyCsRp8i8yj956NZBSAcLvYe
https://blockchain.info/address/1GjHNjS3yAmyCsRp8i8yj956NZBSAcLvYe
Litecoin: LNpJUtNFcmhHAoohdH3aEenURFjXAzfKXc
http://ltc.blockr.io/address/info/LNpJUtNFcmhHAoohdH3aEenURFjXAzfKXc
Dogecoin: DBQAZU4x7hCYEjzsQyXLpnjyrTmnPBGWd9
https://dogechain.info/address/DBQAZU4x7hCYEjzsQyXLpnjyrTmnPBGWd9
--

All Comments

Rosalind avatarRosalind2016-06-11
請問為什麼廣播T將會沒有作用?T原本不是有Alice的
Mason avatarMason2016-06-12
signature嗎?這樣T不是有可能進到其他的block之中?
Madame avatarMadame2016-06-16
另外上篇推文說到通常錢包會把unconfirmed的交易也計算
Suhail Hany avatarSuhail Hany2016-06-17
到餘額中,那請問是只要transaction產生,錢包的餘額就
Elvira avatarElvira2016-06-18
會產生變化嗎?如果Alice想要看到那一個BTC回到他的錢包
Carolina Franco avatarCarolina Franco2016-06-21
,是要等到T從整個network中消失嗎?
Jacob avatarJacob2016-06-22
非常感謝你的回覆!
Genevieve avatarGenevieve2016-06-23
不好意思我又有一個小問題:
Poppy avatarPoppy2016-06-28
當初Alice在送出/廣播 T 的同時,Alice的wallet中BTC數目
Carolina Franco avatarCarolina Franco2016-06-30
是否就會-1?
Iris avatarIris2016-06-30
看錢包的設計,通常送出當下balance就會直接-1
Liam avatarLiam2016-07-02
真的非常感謝你幫我解惑!