買比特幣 買比特幣
Ctrl+D 買比特幣
ads

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

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),導致交易失敗。

Trust Machines:2023年第一季度比特幣用例出現爆炸式增長:4月30日消息,根據比特幣生態系統公司Trust Machines的最新研究,在2023年第一季度,“比特幣用例出現了爆炸式增長”。

該報告將比特幣NFT、比特幣域名服務(BNS)和Stacks區塊鏈(一個比特幣智能合約平臺,為Trust Machines的大部分生態系統提供動力)的最新發展確定為推動新增長和采用的關鍵用例。(CoinDesk)[2023/5/1 14:36:19]

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

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

Parity發布ink! 3.0:基于Rust的WASM智能合約語言的重大更新:金色財經消息,Parity基于Rust用來編寫Web Assembly(Wasm)智能合約的一種編程語言ink!剛剛推出了迄今為止最大的更新。Polkadot和Substrate生態中的開發者可以使用ink!為Wasm虛擬機構建高效、高性能的智能合約和去中心化應用程序,它們是以太坊 (EVM/Solidity)智能合約的一種替代方案。

除了發布了ink! 3.0版本,團隊還改進了合約模塊(Contracts pallet)以提高平行鏈性能,并添加了一些新功能以提高跨合約調用和性能提升,使開發者更容易編寫更復雜的邏輯。最后,隨著 `cargo-contract` 1.0的發布,開發者使用的工具也發生了一些變化。(PolkaWorld)[2022/3/18 14:05:09]

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

以太坊核心開發者推出新Rust語言的EVM實現“evmodin”:以太坊核心開發者Artem Vorotnikov推出新Rust語言的EVM實現:evmodin,其支持完全異步。[2021/7/16 0:56:54]

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

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

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

Crust Network 道長:用戶的資產在Rollup解決方案中是安全的:金色財經現場報道,7月9日,金色沙龍第66期Layer2-擴容“空間站”,探索更高維度的破局之道在杭州舉辦,Crust Network 道長在圓桌對話環節中表示,V神曾提到, 二層解決方案有兩大問題:一個是資產安全性問題,還有一個是系統安全性問題。Rollup已經將資產安全性問題基本解決,也就是用戶的資產在Rollup解決方案中是安全的。但Rollup的系統安全性問題仍有待解決。

他山之石,可以攻玉。Crust網絡提供了高安全性和高可用的數據存儲網絡,有能力為Layer2方案提供更高的系統安全性。

一些實際的例子已經證明了Crust的存儲優勢。Uniswap已經將它的網站去中心化的部署在了Crust之上,除此之外,還有更多DApp和NFT項目將他們的數據存儲在Crust網絡。[2021/7/9 0:40:09]

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

黑客組織“ Lazarus”攻擊一家零售網站并獲取價值超6萬美元的BTC和ETH:4月17日消息,朝鮮黑客組織“ Lazarus”入侵了一個使用加密貨幣付款的零售網站,并獲取了價值7000萬韓元(約合6.2688萬美元)的比特幣和以太坊。根據一家新加坡安全公司博客,該黑客組織利用名為“ BTC Changer”新型惡意軟件攻擊了將加密貨幣作為結算手段的零售網站。黑客通過在零售網站上植入“ BTC Changer”軟件,在顧客結算時竊取信息,以獲得加密貨幣。(韓聯社)[2021/4/17 20:29:52]

可以看到當系統中注冊的用戶較多時,實際在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:USTOWNNERSERCustodiyCrown TokenMiner X Protocolsero幣最新消息

以太坊最新價格
THE:Gate.io Monday''s Delight Red Packet Event, Will be Up For Grabs Soon_GATE

isaspecialeventthatwillbeheldeveryMondayfromMarch8.

1900/1/1 0:00:00
POLO:關于宇宙富豪Monopolon的派系你需要知道的一切_POLO幣

什么是宇宙富豪Monopolon?小時候大家都玩過"大富翁"游戲----用一對骰子和一疊紙幣組成的單人棋盤游戲.

1900/1/1 0:00:00
POLK:波卡網絡中的交易費用是如何產生,如何計算的?_DOT

“波卡知識圖譜”是我們針對波卡從零到一的入門級文章,我們嘗試從波卡最基礎的部分講起,為大家提供全方位了解波卡的內容,當然這是一項巨大的工程,也充滿了挑戰.

1900/1/1 0:00:00
TERA:BKEX 關于上線 TERA(Terareum) 并開放充值功能的公告_GoFitterAI

尊敬的用戶:?????????BKEX即將上線TERA,詳情如下:上線交易對:TERA/USDT??幣種類型:ERC20充值功能開放時間:已開放交易功能開放時間:2022年3月29日18:00提.

1900/1/1 0:00:00
ANC:獲幣安、a16z等2億美元投資,新興公鏈Apotos靠什么趕超前輩?_aptos幣價

作者|秦曉峰 編輯|郝方舟 出品|Odaily星球日報3月29日,根據幣安官方公告,幣安旗下投資機構BinanceLabs宣布投資公鏈項目AptosLabs,具體金額未知.

1900/1/1 0:00:00
Gate.io HODL & Earn: Lock UBXS To Earn 100% APR(Phase 1)

TheUBXSLock-up&Earn#1willlaunchat8:00UTConMar27atGate.io''s“HODL&Earn”.

1900/1/1 0:00:00
ads