以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads

Rust智能合約養成日記(6)-ODAILY_NER:TRU

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聘請前Kraken營銷總監擔任顧問:金色財經報道,Trust Machines于今年早些時候推出,今年2月從Breyer Capital、Digital Currency Group、GoldenTree、Hivemind和Union Square Ventures融資1.5億美元。Trust Machines的網站顯示,該公司的融資計劃是“將比特幣從僅僅是一種被動的價值儲存手段,擴展為強大的新計算平臺的最終結算層”。此外該初創公司聘請了丹?赫爾德(Dan Held)擔任顧問,幫助該公司擴大營銷部門規模,制定產品戰略。赫爾德在周四的一篇博客文章中透露,他將辭去加密貨幣交易所Kraken的增長營銷總監一職。(blockworks)[2022/7/22 2:30:56]

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

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

區塊鏈查詢節點框架Subsquid宣布與去中心化存儲網絡Crust Network達成合作:3月2日消息,區塊鏈查詢節點框架 Subsquid 宣布與去中心化存儲網絡 Crust Network 達成合作。針對本次合作,Subsquid 團隊表示,Crust 是一個高流量的網絡,自半年前主網推出以來,已經產生超過 160,000 個存儲項目,而 Subsquid 將為 Crust 提供一個高吞吐量和高可用性的區塊鏈索引系統,并完全支持實時升級。[2022/3/2 13:31:38]

1.循環遍歷一個可被外部調用更改的數據結構

以下是一個用于給合約中注冊用戶“分紅”的簡單智能合約,其狀態數據如下:

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

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

TrustBase首批Grant基金正式推出,Grant申請面向全球開放:據官方消息,5月14日,TrustBase Grant首批20萬美元資助金到位,地址正式對外公布。TrustBase Grant首批基金將持續擴充到100萬美元,每一個獲得Grant的項目可以得到最高價值30000美元的資助。現在TrustBase Grant申請已面向全球開放,歡迎更多的開發者和團隊申請Grant,為TrustBase生態系統增加具有價值的技術搭建,幫助增強 Polkadot提供高級功能,擴展Web 3.0系統。

TrustBase Grant由Subscript技術社區發起,HECO生態戰略合作支持,TrustBase基金會提供百萬資金支持,每個通過Grant的項目將獲得資金、技術和生態的支持。在初期,TrustBase將在HECO建立Pool,專門為通過Grant項目提供資產應用場景。[2021/5/15 22:06:18]

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

MXC抹茶10月15日15:10上線NEARUSDT永續合約:據官方公告,MXC抹茶10月15日15:10上線NEARUSDT永續合約,支持1-50倍杠桿自由調節,支持全倉或逐倉模式。

MXC抹茶合約采用多個平臺的加權算數平均數價格,形成合理價格,計算盈虧及強平,避免指數價格發生較大偏差,同時對盤口價差、買一賣一厚度進行了優化,除主流幣外,現已涵蓋FIL、UNI、DOT、YFI、YFII等存儲、DeFi、波卡概念幣種。[2020/10/14]

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

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

推薦的解決方案:

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

動態 | Northern Trust幫助加密貨幣對沖基金投資比特幣:據CCN援引福布斯的報道,金融服務巨頭、托管服務提供商Northern Trust為了迎合機構投資者、公司和高凈值個人投資者,已開始向加密貨幣對沖基金開放部分服務,同時還探索如何將區塊鏈技術整合到其私募股權部門。據報道,Northern Trust幾個月來一直在與三家“主流對沖基金”合作,這些基金已經開始秘密地將加密貨幣添加到他們的投資組合中。目前,Northern Trust基金托管或管理著10.7萬億美元的資產。雖然目前Northern Trust不直接托管加密資產,但該公司正在為加密貨幣對沖基金和機構提供行政服務,例如幫助他們為分配投資價值,協助反洗錢(AML)合規,并驗證這些公司的第三方托管人確實持有基金的資產負債表中報告了的加密資產。[2018/8/1]

因此推薦采用withdrawal模式對上述合約進行改造。即要求合約方不主動地對所有的用戶逐一發放獎勵,而是先記賬,并設置一個withdraw函數,讓單一用戶通過該函數方法的調用,自行取回“分紅”獎勵。此時合約方也只需要維護逐一用戶已經取回的獎勵數額或者還能取回的獎勵數額即可。

2.跨合約之間的狀態依賴導致合約阻塞

合約在進行跨合約調用時,可能會對外部合約的狀態存在依賴,不恰當的依賴,會導致該合約阻塞,從而可能被發起DoS攻擊

下面考慮一種利用智能合約進行“競價”的場景:

用戶可以通過調用“競價合約”中的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:USTTRUTRUSTNERtrustwallet刪除后資金TRUE幣trustwallet官網下載地址NERO幣

fil幣價格今日行情
DAOrayaki:科學領域的代幣工程所解決的問題-ODAILY_WEB:web3域名交易

科學代幣工程第1部分:科學問題 這是一系列討論科學代幣工程的博客文章中的第一篇文章。計算機科學與行為經濟學的匯合首先,什么是科學代幣工程?我強烈推薦TrentMcConaghy撰寫的這篇出色的博.

1900/1/1 0:00:00
Web3:Go-to或Exit-to社區?-ODAILY_COM:web3游戲行業

如何建立一個持久和參與的社區Go-to和Exit-to社區都符合Web3社區的核心理念和所有權信條:創造一種參與性和價值貢獻的文化,在利益相關者之間有一致的激勵措施.

1900/1/1 0:00:00
教程:如何通過PolkaEx在Astar網絡賺取Polkaex平臺代幣PKEX-ODAILY_AST:Stargaze Protocol

本文將介紹如何在Astar網絡通過PolkaEx賺取其平臺代幣$PKEX,包括如何在小狐貍上添加Astar網絡,如何轉移資產到Astar以及具體的賺幣步驟.

1900/1/1 0:00:00
「TRON勢力」之“完全去中心化的歷史一躍”-ODAILY_ETH:RON

作為全球最受歡迎的公鏈之一,波場TRON自創立以來始終保持高速發展,生態建設全面開花,各項數據突飛猛進.

1900/1/1 0:00:00
頂峰AscendEX:無關立場是非,加密世界唯有山高路遠-ODAILY_加密貨幣:AscendEX

最近,美國《華盛頓郵報》將俄烏之戰描述為“世界首次加密戰爭”。伴隨加密貨幣合法化、加密貨幣捐款、加密貨幣制裁等新生事件,在充滿立場與是非的現實世界,加密世界的輪廓愈發鮮明…注視著近期BTC的行情.

1900/1/1 0:00:00
盤點CEX公鏈,CRO能否成為下一個BNB?-ODAILY_PRI:Privilege

公鏈發展與存在的問題 截至2021年底,以太坊上的TVL,已從2021年1月的200億美元,迅速增長到高峰值超過1800億美元.

1900/1/1 0:00:00
ads