以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > FIL幣 > Info

SER:Rust智能合約養成日記(6)

Author:

Time:1900/1/1 0:00:00

相關文章:

Rust智能合約養成日記合約狀態數據定義與方法實現

Rust智能合約養成日記編寫Rust智能合約單元測試

Rust智能合約養成日記Rust智能合約部署,函數調用及Explorer的使用

Rust智能合約養成日記Rust智能合約整數溢出

Rust智能合約養成日記拒絕服務攻擊

拒絕服務攻擊又稱DoS(DenialofService)攻擊,該類型的攻擊將使得智能合約在一段時間內(甚至永久)無法被用戶正常使用。

目前已知的原因大致可分為如下兩類:

合約邏輯中存在的某些缺陷。如某一public函數,其實現沒有考慮到計算復雜度。用戶調用該函數時,實際所需消耗的Gas會超出NEAR公鏈創世區塊配置文件(genesis_config.json)中所定義的"max_total_prepaid_gas":300000000000000`(300TGas),導致交易失敗。

BikeRush宣布完成第一輪創世自行車NFT空投:5月8日消息,Ride To Earn 自行車健康騎行項目 BikeRush 宣布完成第一輪創世自行車 NFT 空投。BikeRush 將于近日開放應用測試入口,空投 NFT 持有者將成為 Ride To Earn 首批測試用戶,可獲得低碳騎行 BST Token 獎勵以及 BRT 社區治理 Token 空投。[2022/5/8 2:58:36]

某些跨合約調用情形中,合約的執行依賴于其他外部合約的執行狀態。而外部合約的執行并非總是可靠,以至于本合約的執行可能被外部合約阻塞,無法照常運行。該類問題的發生可表現為合約用戶在合約中的資金被鎖定,以至于無法正常的充值或提現。

除了合約邏輯的缺陷,DoS現象發生的原因還可以歸因于人為因素:典型的如:合約的所有者丟失了自己的私鑰,以至于合約中部分only_owner可執行的特權函數無法被調用,使得合約中某些重要的系統狀態值無法及時的更新,這將有可能對項目造成較大的損失。

Penguin Finance從Avalanche Rush計劃獲得250萬美元獎勵:金色財經報道,據官方消息,Penguin Finance(PeFi)正式加入Avalanche Rush計劃,將獲得價值250萬美元的AVAX獎勵,用于其第二層流動性挖礦“Igloos”和Penguin Emperor游戲。[2021/10/23 20:50:16]

為方便讀者更加深刻地了解智能合約中的DoS攻擊漏洞,本文后續將結合具體DoS攻擊的例子展開描述與分析。本文代碼已上傳至BlockSec官方github,讀者可以自行下載https://github.com/blocksecteam/near_demo/tree/main/DoSDemo

用戶可通過調用pubfnregister_account()函數進行注冊并初始化。

后續該合約的管理者將調用pubfndistribute_token函數來為系統中用戶進行"分紅"。“分紅”的方式為遍歷用戶數組self.registered,并通過跨合約調用向每一個用戶轉入指定額度amount的代幣以做獎勵。

Russell Coin(RC)將于3月29日16:00開啟RC/USDT交易:據ZBG官方消息,Russell Coin(RC)將于3月29日16:00開啟RC/USDT交易;另外“充值RC瓜分1萬枚RC”活動已于24日啟動,活動期間,用戶從外部地址向平臺成功充值RC的用戶,將按照凈充值(充值-提現)數量瓜分總計1萬枚RC獎勵。

羅素幣(RC)于2017年11月21日創世,總量2100萬個。RC科學的采用了完全去中心化的主節點獎勵計劃,POW挖礦納稅給主節點的激勵機制,結合最新X20R算法,達到電腦挖礦能耗更低,抗雙花攻擊,環形加密匿名性更強。獨創安卓手機錢包的X20R科學算法,實現了移動匿名區塊快速轉賬技術。更多詳情請咨詢官網公告。[2021/3/25 19:17:36]

然而該合約狀態數據(self.registered)的大小沒有限制,并且可以被惡意用戶所操控,使得該合約數據的大小變得過大。以至于DISTRIBUTOR用戶在調用該合約方法時,可能消耗的Gas費用過高,超出了GASLIMIT。

TrustToken將于11月21日推出TrueFi和原生代幣TRU:11月12日消息,資產代幣化平臺TrustToken宣布將于11月21日推出無抵押借貸 DeFi協議TrueFi,以及用來進行貸款質押和投票的原生代幣TRU。TrustToken允許通過審查的借款人進行TrueUSD (TUSD)貸款,然后TRU質押者會評估這筆貸款的信用度,TUSD貸方可在獲得收益的同時進行 TRU流動性挖礦。[2020/11/12 12:24:01]

如下是該合約在實際NEARLocalnet中測試的結果

可以看到當系統中注冊的用戶較多時,實際在distribute_token執行的過程中,所設置的prepaid_gas將不足以滿足所有用戶的轉賬操作,以至于本次交易失敗。

推薦的解決方案:

由于GasLimit的限制,合約方法在執行過程中不建議遍歷一個較大的數據結構(該數據結構的大小可被外部用戶操縱)。確需遍歷的,也需要限制該數據結構的大小,并保證當該數據結構的大小達到該最大值時,也不會觸及GasLimit的限制。

Crust測試網將于明天進入封閉測試階段:Crust Network官方發推宣布,為了確保測試網“Profit Ark”的安全性和穩定性,Crust測試網將于北京時間明天早上10點左右進入封閉測試階段,并將持續到11月25日。在此期間,新節點無法正常訪問網絡,已經加入網絡的節點無法穩定運行。11月25日將會發布新的節點手冊和詳細的利潤計算。在11月底,激勵性測試網“Profit Ark”將正式起啟動,網絡將開始為每個參與網絡的節點計算積分和收益。[2020/11/11 12:21:24]

因此推薦采用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:USTSEROWNNERRug BustersHighest Yield Savings ServiceKnownOrigingoldminer幣前景

FIL幣
OIN:LOKA/USDT 3月31日上線大幣網(Dcoin)公告

親愛的大幣網(Dcoin)用戶:LOKA將上線大幣網(Dcoin),具體時間安排如下,邀請您體驗!3月30日15:00(GMT8)開放充值3月31日15:00(GMT8)LOKA/USDT4月0.

1900/1/1 0:00:00
LOC:薩爾瓦多比特幣債券背后:「老炮」Blockstream和演進中的比特幣

作者:楊樹 3月20日,薩爾瓦多表示或因國際局勢動蕩推遲發行比特幣債券,此前原本計劃于3月15日至20日期間發行10億美元比特幣債券.

1900/1/1 0:00:00
OIN:DAO邁向合規化:為何主流DAO組織紛紛成立基金會?

作者:RichardLee,鏈捕手“2022年是DAO爆發的元年。”這是2021年終盤點時,各路預測集體看好的趨勢之一.

1900/1/1 0:00:00
NAT:對話Solana創始人:推動加密貨幣采用,Solana都做了些什么?

此文為Circle旗下播客節目《貨幣運動》的對話編譯,本周我們邀請到了Circle區塊鏈合作伙伴Solana的聯合創始人AnatolyYakovenko.

1900/1/1 0:00:00
FLO:ZT創新板即將上線FlokiZilla

親愛的ZT用戶: ZT創新板即將上線FlokiZilla,並開啟FlokiZilla/USDT交易對.

1900/1/1 0:00:00
COM:【獎勵發放】第四期猜漲跌活動結束及獎勵發放的公告

尊敬的AAX用戶: AAX於2022年3月11日17:00-2022年3月20日17:00舉辦的“第四期猜漲跌,競猜100次獎30USDT,交易天梯賽瓜分20000USDT”活動現已圓滿結束.

1900/1/1 0:00:00
ads