Filecoin不存在“雙花”問(wèn)題|回顧Filecoin“雙花”事件始末
從3月18日晚間至3月19日,社區(qū)對(duì)Filecoin“雙花”事件進(jìn)行了諸多討論,經(jīng)過(guò)與Filecoin官方等多方平臺(tái)確認(rèn): Filecoin不存在“雙花”問(wèn)題,F(xiàn)ilecoin鏈?zhǔn)前踩?/strong>”。


什么是“雙花”?
“雙花"對(duì)于大部分人而言,其實(shí)是一個(gè)比較陌生的詞語(yǔ)。
“雙花”又名雙重支付,也就是雙重花費(fèi)的意思。指的是在數(shù)字貨幣系統(tǒng)中,由于數(shù)據(jù)的可復(fù)制性,使得系統(tǒng)可能存在同一筆數(shù)字資產(chǎn)因不當(dāng)操作被重復(fù)使用的情況。

這是什么意思呢?
首先,雙花是在數(shù)字貨幣交易系統(tǒng)中才會(huì)有發(fā)生的可能,我們用現(xiàn)金交易時(shí),不存在雙重支付的問(wèn)題。
因?yàn)槟阍谖⑿沤o我轉(zhuǎn)賬了5000元,我收了之后,你的賬戶里會(huì)少5000元,我的賬戶里會(huì)多5000元,也就是說(shuō),在現(xiàn)金交易時(shí),資產(chǎn)的成功交易意味著實(shí)實(shí)在在地完成了資產(chǎn)的轉(zhuǎn)移。
但是,在區(qū)塊鏈的世界里就不一樣了,由于交易的是數(shù)字資產(chǎn),這些資產(chǎn)其實(shí)是一些虛擬信息之間的傳遞,而由于一條交易記錄從產(chǎn)生到鏈接到區(qū)塊鏈上,有一個(gè)時(shí)間窗口,我們所說(shuō)的“雙花”其實(shí)就是利用了“時(shí)間差”。
如果實(shí)現(xiàn)了“雙花”,攻擊者就可以讓花出去的數(shù)字資產(chǎn)重新回到自己的賬戶上。
這就好比有些人使用投幣電話,在硬幣上狡猾地穿了一根細(xì)繩,盡管投擲了硬幣,但實(shí)際的交易并沒(méi)有完成,他可以在打完電話后利用細(xì)繩再將硬幣取出,如法炮制,便能用這枚硬幣打無(wú)數(shù)次電話。

沖突交易流程圖
雖然“雙花”可以讓人獲得double的收入,但是,整個(gè)區(qū)塊鏈歷史上成功發(fā)生過(guò)的“雙花”事件,寥寥無(wú)幾。
在Filecoin網(wǎng)絡(luò)中,并未發(fā)生過(guò)!

Filecoin雙花事件始末
3月18日晚,某用戶在某數(shù)字資產(chǎn)平臺(tái)內(nèi)充入FIL,雙花操作后再提現(xiàn),依然可以再收到一筆同樣數(shù)量的FIL,也就是說(shuō),用戶某數(shù)字資產(chǎn)平臺(tái)充值了61000個(gè)FIL,結(jié)果得到了120000個(gè)FIL。
這時(shí),有用戶認(rèn)為是Filecoin網(wǎng)絡(luò)發(fā)生了雙花事件而導(dǎo)致的,但實(shí)際情況是,該數(shù)字資產(chǎn)平臺(tái)自己記賬記錯(cuò)了,也就是說(shuō),這并不是Filecoin鏈的問(wèn)題!
不過(guò),針對(duì)該事件,Lotus團(tuán)隊(duì)也進(jìn)行了徹底調(diào)查,確定沒(méi)有發(fā)現(xiàn)任何Filecoin網(wǎng)絡(luò)和RPC API代碼的相關(guān)問(wèn)題,即鏈本身不存在雙花問(wèn)題,API代碼也沒(méi)有錯(cuò)誤。
至于數(shù)字資產(chǎn)平臺(tái)的交易記錄,也已經(jīng)在修正了,同時(shí)Filecoin官方團(tuán)隊(duì)也正在審查相關(guān)平臺(tái)記賬系統(tǒng)中的充值處理邏輯,以改正他們的API使用。

為什么會(huì)存在對(duì)“Filecoin 雙花”的誤解?
所謂的Filecoin“雙花”事件,本就是一場(chǎng)鬧劇。但是,為什么依舊有社區(qū)會(huì)對(duì)該事件產(chǎn)生誤解,既然Filecoin鏈沒(méi)有問(wèn)題,API代碼也沒(méi)有錯(cuò)誤,那么,問(wèn)題又在哪里呢?
該問(wèn)題的核心在于部分?jǐn)?shù)字資產(chǎn)平臺(tái)以及部分Filecoin區(qū)塊鏈瀏覽器對(duì)于Lotus的鏈狀態(tài)檢查API使用不當(dāng),在處理多個(gè)類似消息時(shí),其處理方式與所期待的不同。
而誤解Lotus API的輸出,就會(huì)導(dǎo)致記賬系統(tǒng)將原始消息和替換消息都算作相同的發(fā)送者和接收者。
簡(jiǎn)單來(lái)說(shuō),就是人們對(duì)鏈的檢查方式,這會(huì)呈現(xiàn)出消息被處理了兩次的樣子,進(jìn)而產(chǎn)生了誤解。
具體來(lái)說(shuō),就是部分?jǐn)?shù)字資產(chǎn)平臺(tái)使用了一種錯(cuò)誤的處理鏈狀態(tài)的方式——在tipset的每個(gè)塊上調(diào)用ChainGetBlockMessages,然后在這些消息上調(diào)用StateGetReceipt。
而當(dāng)StateGetReceipt被調(diào)用在兩個(gè)相似的消息上(其中一個(gè)被執(zhí)行,另一個(gè)被跳過(guò)),它將提供相同的結(jié)果給人,這就會(huì)導(dǎo)致給人一種兩種消息都被執(zhí)行的錯(cuò)覺(jué)。

社區(qū),讓Filecoin越來(lái)越好
從3月18日晚間到3月19日凌晨,自收到該事件的反饋,F(xiàn)ilecoin相關(guān)團(tuán)隊(duì)就立馬進(jìn)行了相關(guān)信息的核實(shí),并及時(shí)在推特、slack以及官網(wǎng)博客等渠道進(jìn)行了最新信息的分享和更新。

