相關文章:
Rust智能合約養成日記合約狀態數據定義與方法實現
Rust智能合約養成日記編寫Rust智能合約單元測試
Rust智能合約養成日記Rust智能合約部署,函數調用及Explorer的使用
Rust智能合約養成日記Rust智能合約整數溢出
Rust智能合約養成日記拒絕服務攻擊
拒絕服務攻擊又稱DoS(DenialofService)攻擊,該類型的攻擊將使得智能合約在一段時間內(甚至永久)無法被用戶正常使用。
目前已知的原因大致可分為如下兩類:
合約邏輯中存在的某些缺陷。如某一public函數,其實現沒有考慮到計算復雜度。用戶調用該函數時,實際所需消耗的Gas會超出NEAR公鏈創世區塊配置文件(genesis_config.json)中所定義的"max_total_prepaid_gas":300000000000000`(300TGas),導致交易失敗。
Web3自行車健身Ride To Earn項目BikeRush社區用戶突破10萬:5月23日消息,Web3 自行車健身 Ride To Earn 項目 BikeRush 官方宣布,目前社區用戶已經突破 10 萬人,申請 NFT 首輪空投及內測邀請碼排隊人數突破 15 萬。據悉,BikeRush 項目治理 Token BRT 即將上線主流交易平臺及 pancake 去中心化平臺,BRT 總量 50 億個,首期流通量 2.2 億個,發行價格為 0.05USD,團隊鎖倉 24 個月不釋放,機構投資者鎖倉 12 個月不釋放。[2022/5/23 3:35:23]
某些跨合約調用情形中,合約的執行依賴于其他外部合約的執行狀態。而外部合約的執行并非總是可靠,以至于本合約的執行可能被外部合約阻塞,無法照常運行。該類問題的發生可表現為合約用戶在合約中的資金被鎖定,以至于無法正常的充值或提現。
除了合約邏輯的缺陷,DoS現象發生的原因還可以歸因于人為因素:典型的如:合約的所有者丟失了自己的私鑰,以至于合約中部分only_owner可執行的特權函數無法被調用,使得合約中某些重要的系統狀態值無法及時的更新,這將有可能對項目造成較大的損失。
ChainSafe推出基于Rust語言的Filecoin客戶端Forest:10月22日消息,加拿大科技公司ChainSafe推出基于Rust語言的Filecoin客戶端Forest。目前Forest在Filecoin主網發布了alpha測試版本,ForestRust客戶端能夠同步和驗證Filecoin網絡,也可以作為Filecoin網絡上的一個替代客戶端來查詢狀態。該測試版已修復了16個被Sigma Prime審計出來的漏洞,目前正在等待最終的審計報告。此外,該測試版還包括消息池、狀態管理器、JSON-RPC服務器等功能。[2021/10/22 20:49:22]
為方便讀者更加深刻地了解智能合約中的DoS攻擊漏洞,本文后續將結合具體DoS攻擊的例子展開描述與分析。本文代碼已上傳至BlockSec官方github,讀者可以自行下載https://github.com/blocksecteam/near_demo/tree/main/DoSDemo
現場丨張漢東:Rust使命是構建一個可信的數字世界:金色財經現場報道,由Web3基金會主辦的Web3大會10月30日在上海舉行。暢銷書《Rust編程之道》作者張漢東在會上表示,新時代對變成語言的需求是安全+高性能,Rust是新時代的C語言,其使命是構建一個可信的數字世界,是對編程語言的一次深刻反思,兼顧安全性、工程性、一致性和實用性。[2020/10/30 11:13:48]
用戶可通過調用pubfnregister_account()函數進行注冊并初始化。
后續該合約的管理者將調用pubfndistribute_token函數來為系統中用戶進行"分紅"。“分紅”的方式為遍歷用戶數組self.registered,并通過跨合約調用向每一個用戶轉入指定額度amount的代幣以做獎勵。
然而該合約狀態數據(self.registered)的大小沒有限制,并且可以被惡意用戶所操控,使得該合約數據的大小變得過大。以至于DISTRIBUTOR用戶在調用該合約方法時,可能消耗的Gas費用過高,超出了GASLIMIT。
動態 | 社交辯論平臺Trustory將關閉,創始人Preethi Kasireddy稱市場時機還不成熟:社交辯論平臺Trustory宣布關閉,其創始人Preethi Kasireddy發布文章解釋關閉的原因稱,由于目前市場時機不對,以至于TrueStory難以成為一門可持續發展的業務,并表示將資金退還給投資人。Preethi Kasireddy 稱,TruStory 這樣的平臺對于目前市場來說為時過早。具體來說,她陳述了 3 點原因,首先目前啟動基于加密貨幣的項目監管和合規風險太高,尤其是在美國,對于初創公司來說很難取得成功。其次,加密貨幣的基礎架構尚未發展成熟,需要更好的基礎架構(例如加密貨幣錢包)和無縫的授權解決方案(交易簽名)。第三,TruStory 這樣的平臺,目標用戶數以百萬計才可以持續發展,然而目前的現狀是,用戶規模不足以建立可持續的業務。根據 Block123.com 顯示,TruStory 的使命是基于切膚博弈的方式讓參與者理性參與辯論,從而基于任何話題產生富有成效的辯論結果。Preethi Kasireddy 是 TrueStory 的創始人,Andreessen Horowitz (a16z)前合伙人,Coinbase 前工程師,她曾構建并實施了將以太坊集成到 Coinbase 平臺所需的前端界面和 API 等。在停止 Trustory 項目后,Preethi Kasireddy表示日后將從事自己熱愛的教育和寫作工作。[2020/1/31]
如下是該合約在實際NEARLocalnet中測試的結果
動態 | OK集團投資美國信托機構PrimeTrust 將共同推出穩定幣OKUSD:美國信托機構 PrimeTrust 在官方渠道宣布,OK集團已完成 PrimeTrust 的戰略投資,未來雙方將進行深度合作,共同推出基于 OKChain 的穩定幣OKUSD 。金色此前報道,OKChain 正處在最后開發階段,OKEx計劃在 6 月份發布測試網。[2019/3/28]
可以看到當系統中注冊的用戶較多時,實際在distribute_token執行的過程中,所設置的prepaid_gas將不足以滿足所有用戶的轉賬操作,以至于本次交易失敗。
推薦的解決方案:
由于GasLimit的限制,合約方法在執行過程中不建議遍歷一個較大的數據結構(該數據結構的大小可被外部用戶操縱)。確需遍歷的,也需要限制該數據結構的大小,并保證當該數據結構的大小達到該最大值時,也不會觸及GasLimit的限制。
因此推薦采用withdrawal模式對上述合約進行改造。即要求合約方不主動地對所有的用戶逐一發放獎勵,而是先記賬,并設置一個withdraw函數,讓單一用戶通過該函數方法的調用,自行取回“分紅”獎勵。此時合約方也只需要維護逐一用戶已經取回的獎勵數額或者還能取回的獎勵數額即可。
用戶可以通過調用“競價合約”中的pubfnregister_account函數方法注冊賬戶,為參與后續的競價做準備
用戶還可以通過如下接口函數查詢當前系統中目前為止出價最高的用戶ID,及其所出的價格。
用戶還可以通過如下接口函數查詢當前系統中目前為止出價最高的用戶ID,及其所出的價格。
當競價合約收到token時,會通過ft_on_transfer函數調用到如下bid函數。
在該出價函數中,函數的執行邏輯將首先檢查本次用戶的出價是否高于之前出價最高用戶的出價值。如果滿足該條件,將執行self.refund_exe()從“競價合約”中退回之前出價最高用戶的出價代幣。隨后更新目前為止出價最高的用戶ID及其所出的價格。
實際的情況是,根據該合約的邏輯定義:必須要退回之前出價最高用戶的出價代幣,才能將目前為止出價最高的用戶ID進行更替。
在該出價函數中,函數的執行邏輯將首先檢查本次用戶的出價是否高于之前出價最高用戶的出價值。如果滿足該條件,將執行self.refund_exe()從“競價合約”中退回之前出價最高用戶的出價代幣。隨后更新目前為止出價最高的用戶ID及其所出的價格。
實際的情況是,根據該合約的邏輯定義:必須要退回之前出價最高用戶的出價代幣,才能將目前為止出價最高的用戶ID進行更替。
此時測試模擬了“競價系統”的參與的用戶:user0、user1和user2
他們分別擁有10000個初始代幣。user0首先在“競價系統”中出價1000,此時查詢可知current_leader:user0.test.nearhighest_bid:1000。隨后user0立即將剩余的9000個代幣轉給了user2,并銷毀了代幣賬戶。
此后,當user1出價2000時,系統將打算退回user0之前的出價值。但由于此時user0的賬戶已不存在,系統將提示"CannotRefund",始終無法成功完成后續的交易更新狀態。
此時第二位出價者想出價2000:
解決方法:
如果合約的狀態的轉化需要依賴于外部合約的調用處理,則需要考慮外部合約調用可能失敗的情形,防止合約的執行邏輯被阻塞而拒絕服務,即我們需要實現合理的錯誤處理手段。在本例子中,我們可以將無法退回的代幣寄存于合約新增的lost_found用戶組中,當后續用戶滿足條件refund條件時,再由用戶本身來進一步取回代幣(同樣可以實現withdraw函數)。
3.Owner私鑰丟失
去中性化智能合約項目中往往也存在部分中心化的現象:如存在合約的owner。部分合約函數的執行被設置為僅owner可以執行,用以對合約中某些關鍵系統變量值的進行設置更改。我們可以將此類函數稱之為only_owner類型函數。
例如前文在“分紅”合約中所定義的pubfndistribute_token,該函數即為only_owner函數。當合約的owner無法履行職能(私鑰丟失)時,資金將一直被鎖定在合約之中,無法分發給其他用戶。另有大多數的情況下,only_owner函數還可以用來暫停或者重啟合約中的所有交易,可見owner正常履行其職能的重要性。
解決方法:
為避免上述owner個人“失能”情形的發生,我們可增設多位合約的owner共同治理合約,甚至可采用多簽請求的方式來替換原有的合約權限控制方案,以此實現合約的去中心化治理效果。有關智能合約中多簽請求功能的設計實現,將在后續的《智能合約養成日記》中展開詳細的描述。
Tags:USTTRUSEROWNBLOCKBUSTERTrustFi Network TokenGeysertown幣吧
關於Gate.ioStartup免費空投計劃爲回饋平臺用戶,Gate.io上線“免費空投計劃”,在Startup區不定期進行區塊鏈項目的免費空投計劃.
1900/1/1 0:00:00想要知道什么是加密龍王CryptoDragonKing首先就要清楚什么是NFT;NFT有那些特點?問題一:什么是非同質化代幣?NFT全稱是NonFungibleToken,中文是非同質化代幣.
1900/1/1 0:00:00尊敬的Tbit用戶? 為增加產品多樣性,增強用戶交易體驗,Tbit計劃于2022年3月30日上線體驗金功能,具體上線時間以實際為準。體驗金可以用于任意交易對的合約交易.
1900/1/1 0:00:00尊敬的用戶:?????????BKEX即將上線QOM,詳情如下:上線交易對:QOM/USDT??幣種類型:ERC20充值功能開放時間:已開放交易功能開放時間:2022年3月29日16:00提現功.
1900/1/1 0:00:001.研究院短評 Talkenwallet是目前主流的多鏈NFT錢包,是韓國第一個NFT錢包,其用戶群規模龐大,總用戶數450萬,300萬用戶參與論壇討論.
1900/1/1 0:00:00Gate.ioMQL、RIM、ZKTandDELFITradeCompetitionhascometoasuccessfulend!Accordingtothecriteriaofthisact.
1900/1/1 0:00:00