因?yàn)橐粋€(gè)程序 bug,直接損失了 2.2 億人民幣。。。
這是近幾天發(fā)生在 NFT 圈子里的一件事,某項(xiàng)目方因?yàn)樽约旱某绦虼a出錯(cuò),導(dǎo)致鎖定的 11539.5 個(gè) ETH(以太坊代幣)無(wú)法取出。
按照目前的價(jià)格,這些 ETH 總價(jià)值 2.2 億人民幣,妥妥肉疼。
NFT是非同質(zhì)化代幣,屬于區(qū)塊鏈領(lǐng)域的一種應(yīng)用,可以理解為一種虛擬的數(shù)字資產(chǎn)。
比如,你購(gòu)買了一張 NFT 頭像,那這張圖片在網(wǎng)絡(luò)世界里就唯一屬于你。即便大家可以復(fù)制拷貝,但所有權(quán)歸屬于你。
這次出事的是一個(gè)叫Akutar 的 NTF 項(xiàng)目方,他們發(fā)起了一個(gè) NFT 產(chǎn)品售賣,采用的是荷蘭式拍賣法。
所謂荷蘭式拍賣法,就是由高到低出價(jià)的拍賣方式,這和傳統(tǒng)的遞增叫價(jià)拍賣方式有所不同。
舉個(gè)例子,假設(shè)一件產(chǎn)品的定價(jià)是 10000 元,想買入的就直接按照這個(gè)價(jià)格下單。如果最終成交價(jià)是8000 元,那項(xiàng)目方會(huì)退你2000 元。
設(shè)計(jì)這種規(guī)則的目的其實(shí)也是激勵(lì)用戶早點(diǎn)下單,因?yàn)樵缳I晚買都不虧,加上 NFT 限量,就更提升了購(gòu)買者的動(dòng)機(jī)。
很快,這個(gè)項(xiàng)目就完成了 3400 萬(wàn)美元的預(yù)定銷售額。
接下來,就是項(xiàng)目方履行后續(xù)環(huán)節(jié)了,退款和提現(xiàn)。
按照規(guī)則,項(xiàng)目方需要先退回最終成交價(jià)和定價(jià)之間的差額給用戶,然后才能自己提走項(xiàng)目售賣收益。
為了確保公平,也表態(tài)自己不會(huì)跑路的決心,項(xiàng)目方在智能合約里規(guī)定了需要先完成差價(jià)退款才能提現(xiàn)。
智能合約,可以理解成鎖定在區(qū)塊鏈中的一個(gè)事先定好的規(guī)則,任何人都無(wú)法篡改,只會(huì)被自動(dòng)執(zhí)行。
于是,在智能合約代碼里就有這么一個(gè)判斷條件。
懂點(diǎn)技術(shù)的讀者知道,這是一段函數(shù)代碼,這個(gè)函數(shù)的作用是項(xiàng)目方用來提現(xiàn)的。
其中被紅框標(biāo)記起來的是一個(gè)判斷條件,refundProgress>=totalBids,問題也恰恰出在這里。
按照定義,變量refundProgress表示已經(jīng)完成的用戶退款數(shù),而變量totalBids表示所有用戶下單的 NFT 總數(shù)。
因?yàn)橐粋€(gè)用戶可以購(gòu)買多個(gè) NFT,所以totalBids 的數(shù)值一定是大于或等于refundProgress 的。
也就是說,不可能出現(xiàn)像智能合約代碼中refundProgress>=totalBids 的情況。
因此,當(dāng)代碼執(zhí)行到這里的時(shí)候,這個(gè)判斷條件始終不會(huì)成立,后面的合約代碼就無(wú)法執(zhí)行。
看懂的讀者應(yīng)該知道了,這個(gè) bug 的關(guān)鍵點(diǎn)就是這兩個(gè)變量之間的判斷符號(hào)寫反了。
程序員寫的是>=,而正確的應(yīng)該是寫成<=。
用戶無(wú)法獲得退款,項(xiàng)目方也無(wú)法提現(xiàn)。
對(duì)用戶來說,雖然不能獲得退款,但至少還是買到了 NFT。但對(duì)于項(xiàng)目方來說,這價(jià)值 2.2 億人民幣的收益就直接被永久鎖定了,無(wú)法提走。
在區(qū)塊鏈的世界里,這些代幣就永久不會(huì)被其他人取出,和銷毀沒什么區(qū)別。
項(xiàng)目方相當(dāng)于手持了一個(gè)永遠(yuǎn)不會(huì)被打開的錢包,縱使腰纏萬(wàn)貫,但也僅僅是一個(gè)賬面數(shù)字,沒有使用價(jià)值。
一個(gè)符號(hào),價(jià)值 2.2 億,可以說是一個(gè)驚天bug 了。
可能有人會(huì)說了,上線前難道不經(jīng)過測(cè)試么,這么大的項(xiàng)目竟然犯這種低級(jí)錯(cuò)誤。
那么,這是誰(shuí)的鍋?
首先,項(xiàng)目方在設(shè)計(jì)智能合約時(shí)一定會(huì)提前定義好規(guī)則,然后交給程序員去實(shí)施。上線前,也會(huì)經(jīng)過測(cè)試和驗(yàn)收。
其次,程序員在代碼中寫入這個(gè)規(guī)則時(shí),也一定是建立在理解這個(gè)規(guī)則的前提下。可能是手抖,可能是粗心,恰好就把判斷符號(hào)寫反了。
另外,測(cè)試在上線驗(yàn)收環(huán)節(jié),可能沒有進(jìn)行極端情況測(cè)試,只是按照一個(gè)人買一個(gè) NFT 的場(chǎng)景完成了測(cè)試。
最后,項(xiàng)目方驗(yàn)收時(shí),以為能跑通全流程就沒問題了。
項(xiàng)目上線后,在生產(chǎn)環(huán)境出現(xiàn)了一個(gè)人買多個(gè) NFT 的情況,bug 被觸發(fā)。
在我看來,問題的核心起點(diǎn)在程序員,驗(yàn)收不嚴(yán)謹(jǐn)?shù)呢?zé)任在測(cè)試,而最終對(duì)外背鍋的一定是項(xiàng)目方。
這不是某一個(gè)人的鍋,而是一口大鍋罩在了整個(gè)項(xiàng)目組頭上。
這樣的問題在平時(shí)產(chǎn)品開發(fā)中其實(shí)并不少見,因?yàn)橐粋€(gè)判斷條件的失誤,輕則引起功能異常,重則導(dǎo)致巨大的經(jīng)濟(jì)損失。
如果你們感興趣,可以自己去查一下過去這些年因?yàn)槌绦?bug 導(dǎo)致產(chǎn)品重大損失的案例,其實(shí)有不少。
那些厲害的程序員之所以貴,也是有原因的。
如果為了省錢招了一些三流程序員填坑,或許只會(huì)給你挖出更大的坑。
這個(gè)世紀(jì)什么最貴?
人才!
關(guān)鍵詞:
- 發(fā)力蛋制品 勁仔食品小蛋圓圓鵪鶉蛋入圍iSEE全球創(chuàng)新品牌百?gòu)?qiáng)榜
- 新捷途X70S顏值與實(shí)力全面升級(jí),將于4月29日發(fā)布預(yù)售
- 奶茶行業(yè)品牌多、競(jìng)爭(zhēng)大 冰雪時(shí)光靠什么贏得掌聲?
- 千千惠生活全國(guó)上線“隨心退”功能,消費(fèi)者可無(wú)條件隨時(shí)退款
- 杭州臨平區(qū):創(chuàng)建市場(chǎng)疫情防控“三色”預(yù)警分類管理機(jī)制 動(dòng)態(tài)防控監(jiān)測(cè)預(yù)警
- 海南開展防止一次性不可降解塑料制品入島聯(lián)合執(zhí)法行動(dòng) 對(duì)當(dāng)事人立案調(diào)查
- 河北保定市場(chǎng)監(jiān)管局創(chuàng)新應(yīng)用信用分級(jí)分類監(jiān)管 提升監(jiān)管效能助力營(yíng)商環(huán)境優(yōu)化
- 原料新鮮 用料扎實(shí) 冰雪時(shí)光穩(wěn)扎茶飲下沉市場(chǎng)
- 陜西省市場(chǎng)監(jiān)管局連續(xù)三年榮獲平安陜西建設(shè)先進(jìn)集體 充分發(fā)揮市場(chǎng)監(jiān)管職能優(yōu)勢(shì)
- 浙江杭州:西湖食品安全風(fēng)險(xiǎn)綜合治理中心掛牌成立 健全機(jī)制規(guī)范運(yùn)行為
- 湖北恩施州鶴峰縣市場(chǎng)監(jiān)管局開展進(jìn)口水果排查專項(xiàng)行動(dòng) 加強(qiáng)宣傳引導(dǎo)
- 寧夏青銅峽市場(chǎng)監(jiān)管局:擰緊節(jié)日食藥“安全閥” 確保節(jié)日期間市場(chǎng)安全穩(wěn)定
- 北京東城對(duì)轄區(qū)旅游客運(yùn)企業(yè)開展專項(xiàng)聯(lián)合檢 營(yíng)造和諧市場(chǎng)環(huán)境
- 安徽開展專項(xiàng)執(zhí)法查處濫用行政權(quán)力行為 共同營(yíng)造公平競(jìng)爭(zhēng)良好社會(huì)環(huán)境
- 安徽啟動(dòng)2022年春茶地理標(biāo)志保護(hù)專項(xiàng)行動(dòng) 促進(jìn)茶產(chǎn)業(yè)高質(zhì)量發(fā)展
- 吉林:開展知識(shí)產(chǎn)權(quán)代理行業(yè)“藍(lán)天”專項(xiàng)整治行動(dòng) 促進(jìn)知識(shí)產(chǎn)權(quán)服務(wù)業(yè)健康發(fā)展
- 福建福州:宣傳知識(shí)產(chǎn)權(quán)法律知識(shí) 全方位推進(jìn)地方高質(zhì)量發(fā)展超越
- 遼寧撫順積極建設(shè)知識(shí)產(chǎn)權(quán)強(qiáng)市 建設(shè)知識(shí)產(chǎn)權(quán)強(qiáng)市為目標(biāo)
- 2021年全國(guó)公共服務(wù)質(zhì)量監(jiān)測(cè)情況發(fā)布 南京以總體滿意度?排名第一
- 立案20件!安徽嚴(yán)查哄抬物價(jià)等價(jià)格違法行為 督促經(jīng)營(yíng)者守法經(jīng)營(yíng)
- 杭州臨平區(qū):創(chuàng)建市場(chǎng)疫情防控“三色”預(yù)警分類管理
- 海南開展防止一次性不可降解塑料制品入島聯(lián)合執(zhí)法行
- 河北保定市場(chǎng)監(jiān)管局創(chuàng)新應(yīng)用信用分級(jí)分類監(jiān)管 提
- 陜西省市場(chǎng)監(jiān)管局連續(xù)三年榮獲平安陜西建設(shè)先進(jìn)集體
- 浙江杭州:西湖食品安全風(fēng)險(xiǎn)綜合治理中心掛牌成立
- 湖北恩施州鶴峰縣市場(chǎng)監(jiān)管局開展進(jìn)口水果排查專項(xiàng)行
- 寧夏青銅峽市場(chǎng)監(jiān)管局:擰緊節(jié)日食藥“安全閥” 確
- 北京東城對(duì)轄區(qū)旅游客運(yùn)企業(yè)開展專項(xiàng)聯(lián)合檢 營(yíng)造和
- 安徽開展專項(xiàng)執(zhí)法查處濫用行政權(quán)力行為 共同營(yíng)造公
- 安徽啟動(dòng)2022年春茶地理標(biāo)志保護(hù)專項(xiàng)行動(dòng) 促進(jìn)茶產(chǎn)
- 1 發(fā)力蛋制品 勁仔食品小蛋圓圓鵪鶉蛋入圍iSEE全球創(chuàng)
- 2 新捷途X70S顏值與實(shí)力全面升級(jí),將于4月29日發(fā)布預(yù)售
- 3 奶茶行業(yè)品牌多、競(jìng)爭(zhēng)大 冰雪時(shí)光靠什么贏得掌聲?
- 4 千千惠生活全國(guó)上線“隨心退”功能,消費(fèi)者可無(wú)條件
- 5 杭州臨平區(qū):創(chuàng)建市場(chǎng)疫情防控“三色”預(yù)警分類管理
- 6 海南開展防止一次性不可降解塑料制品入島聯(lián)合執(zhí)法行
- 7 河北保定市場(chǎng)監(jiān)管局創(chuàng)新應(yīng)用信用分級(jí)分類監(jiān)管 提
- 8 原料新鮮 用料扎實(shí) 冰雪時(shí)光穩(wěn)扎茶飲下沉市場(chǎng)
- 9 陜西省市場(chǎng)監(jiān)管局連續(xù)三年榮獲平安陜西建設(shè)先進(jìn)集體
- 10 浙江杭州:西湖食品安全風(fēng)險(xiǎn)綜合治理中心掛牌成立