買以太坊 買以太坊
Ctrl+D 買以太坊
ads

UST:Rust智能合約養成日記(9)-ODAILY_SpaceGrime

Author:

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

程序維護中的一個基本問題是——缺陷修復總會以%的機率引入新的bug。所以整個過程是前進兩步,后退一步。——布魯克斯《人月神話》

1.合約升級的必要性

智能合約本質上是程序,既然是程序,缺陷就不可避免。即便是經過大量測試和審計的智能合約,仍然可能會有漏洞。合約的漏洞如果被攻擊者利用,可能造成用戶資產的損失,導致嚴重的后果。漏洞的修復往往需要通過合約升級來實現。除了漏洞修復,新特性的加入也需要合約升級。因此合約的可升級性非常有必要。本期Rust智能合約養成日記,將為大家介紹Rust合約的升級方式。

2.Solidity合約常見升級方式

以太坊中,智能合約具有不可變性,一旦被部署到鏈上,沒有人可以改變它。

那么如果合約存在漏洞或合約需要添加新功能,該如何修改合約的代碼?解決方案是將新的合約部署到區塊鏈上。

該方法面臨的挑戰是,solidity每次部署合約后,合約都會被分配一個唯一的地址。因此所有用到了該合約的DApps都需要修改合約地址來適配新的合約。此外,舊版本合約中的狀態需要遷移到新版本合約中,狀態較為復雜的合約遷移的工作量很大,容易出錯,而且復制數據的Gas費用高。

美內華達州監管機構請愿對Prime Trust進行破產管理:金色財經報道,美國內華達州金融機構部門已向內華達州第八司法地區法院申請任命加密貨幣托管機構Prime Trust的破產管理人,稱該公司沒有資金來支付客戶存款,也無法獲得加密貨幣托管服務。該監管機構表示,“Prime的運營方式不安全、不健全,并且按照2023年6月21日發布的停止令的規定,已無力償債,因此采取了這一行動。”

請愿書尋求接管人接管Prime Trust的日常運營,并“徹底檢查其所有財務狀況,以確定保護Prime客戶的最佳選擇,要么恢復公司并將其交由私人管理,要么清算公司”。[2023/6/28 22:04:28]

因此,我們通常采用數據和邏輯分離的架構,將數據保存在一個不處理任何邏輯的合約中,所有的邏輯在另一個合約中實現。通常合約升級修改的是邏輯,使用該架構只需要升級邏輯合約,不需要擔心狀態遷移。

為了解決這個問題,可以使用代理合約,具體架構如下圖所示。

加密貨幣服務公司Prime Trust CEO被解雇:金色財經報道,Prime Trust的CEO Tom Pageler本周被解雇。根據Tom Pageler在Linkedin上的個人資料,Pageler自2021年1月以來一直掌管這家總部位于內華達州的加密服務公司。他之前是Prime Trust的總裁兼首席運營官。目前尚不清楚Pageler被解雇的原因。[2022/11/30 21:10:38]

代理合約用來來存儲數據,并且使用delegatecall調用邏輯合約A,這樣合約A讀寫的數據都存儲在代理合約中。如果需要升級邏輯合約,部署新的合約B,然后發一條交易給代理合約,讓代理合約指向新的邏輯合約B即可。

3.NEAR合約升級常用方法

接下來我們將以StatusMessage項目為例,給大家介紹NEAR合約的常用升級方法,如下是StatusMessage的合約代碼

我們先將編譯好的合約部署在測試網上。

Trustless Media完成325萬美元種子輪融資,Alameda Research領投:金色財經消息,Web3媒體公司Trustless Media獲得Alameda Research領投的325萬美元種子輪融資,該輪融資還有Ava Labs和Red DAO參與。

Trustless與內容創作者和組織合作,幫助他們使用不可偽造的代幣或NFT將其電視節目代幣化。節目可以使用NFT模式,部分用于眾籌制作,持有者可以獲得觀看代幣門檻內容的權限,并可以通過鏈上投票參與制作。(Coindesk)[2022/7/27 2:41:45]

transaction如下

接著我們調用set_status方法,向合約中存儲數據

Crust Network和達爾文達成合作,將進一步加強波卡生態系統:據官方消息,Crust Network和Darwinia Network(達爾文)達成合作,將進一步加強Polkadot生態系統,這兩個平臺都將完全兼容Web3標準。達爾文的去中心化式跨鏈橋梁將促進Crust生態系統資產的高效多鏈循環。這也將使Crust的數據存儲和計算服務能夠訪問以太坊、BSC和其他公鏈。通過此次合作,達爾文可以受益于使用Crusts的Web3去中心化存儲網絡。此外,達爾文生態系統跨鏈游戲Evolution Land將整合Crust PolkaPet NFT。[2021/3/10 18:31:58]

transaction如下

接下來我們詳細討論兩種不同的合約升級情況

3.1合約數據結構未被修改

例如我們增加一個函數:

動態 | 5名前客戶對托管機構Kingdom Trust提起訴訟,指控其推遲資金轉移:5名據稱是加密貨幣托管機構Kingdom Trust前客戶的人起訴該公司推遲將資金從Kingdom Trust轉到BitGo。此前消息,Kingdom Trust 8月底曾對Bitcoin IRA和BitGo提起訴訟,指控Bitcoin IRA和BitGo誤導客戶認為自己的數字資產在Kingdom Trust并不安全,并鼓勵他們起訴該公司。(The Block)[2019/9/21]

編譯后使用deploy重新部署:

編譯后使用deploy重新部署:

接著我們調用get_status方法讀取之前寫入的數據

原來合約中的數據能成功讀取:

這是因為NEAR合約可以重復部署,如果一個賬戶已經部署過合約,再次調用neardeploy命令可以將新的合約代碼部署到該賬戶上。如果我們只修改合約邏輯,不涉及數據結構的修改,可以直接使用neardeploy部署新的代碼。

3.2合約數據結構被修改

我們將該合約升級,修改了原來的數據結構,去除了records,新增了taglines和bios

我們嘗試再次重新部署:

合約還是成功部署了:

但是我們調用get_tagline方法讀取存儲的數據:

會發現出錯了,錯誤提示如下:

Cannotdeserializethecontractstate.

具體的transaction見:

https://explorer.testnet.near.org/transactions/4hQQ1zAwU5bsbfb6tA6DQDqjmFcHsBwaBctdHaPiCKHu

這是因為合約的狀態是以序列化數據的形式進行持久化存儲的,重新部署合約后,代碼中的數據結構變了,狀態沒有變,新的數據結構匹配不上舊狀態,就出錯了。

3.3Migrate升級智能合約

NEAR提供了Migrate方法去幫助我們對合約進行升級,針對3.2中所出現的錯誤,我們在新的合約中加入migrate方法:

代碼中的#表示在migrate函數執行前不要加載狀態。接著,我們重新部署合約,但是在部署的同時調用migrate方法

如下所示,該合約被成功部署:

我們嘗試調用合約新增的方法get_tagline去獲取新增的數據taglines

可以看到方法被成功調用,舊的合約數據也被遷移到新的合約

4.合約升級的安全考量

合約安全升級首先要考慮權限控制,一般合約只能由開發者或DAO升級。上一期Rust智能合約養成日記合約安全之權限控制介紹了特權函數的訪問控制,一般合約的升級函數為onlyowner函數,確保只能由owner調用。

我們推薦盡可能將合約的owner設置為DAO,通過提案和投票來共同管理合約。因為owner設置為個人賬戶,合約高度中心化,owner可以隨意修改合約數據,還存在owner私鑰丟失的風險。

除此之外,開發者在做合約遷移時,還可以考慮以下幾點建議

在遷移函數前加入#,確保執行遷移函數前不加載狀態。

遷移完成后盡量刪除遷移函數,確保遷移函數只被調用一次。

新增的數據結構在遷移時完成初始化。

Tags:USTTRUSTTRURIMtrustwallet錢包提幣提不出UtrumSpaceGrime

火幣下載
ACI:DAOrayaki:輕量級MACI匿名化協議-ODAILY_MAC

https://doraresear.ch/2022/04/30/light-weight-maci-anonymization/ 更多閱讀: 1.

1900/1/1 0:00:00
tron:波場TRON項目進展周報(04.09-04.15)-ODAILY_tronlink波寶錢官網地址

過去的一周,波場TRON項目進展順利,為滿足波場TRON全球社區愛好者閱讀,本周周報共分為14種語言,請您選擇閱讀.

1900/1/1 0:00:00
TRO:Ronin安全事件分析-ODAILY_CENTRO

前言 Ronin是新加坡游戲工作室SkyMavis開發的,是為支持游戲AxieInfinity而構建的以太坊側鏈,使得用戶能夠自由地將資產轉移到其他鏈上.

1900/1/1 0:00:00
AND:DAO將在元宇宙玩家與虛擬土地之間扮演什么角色?-ODAILY_DAO

DAO與元宇宙 許多個體在社交應用程序和區塊鏈中集體組織起來,以便追求共同目標和利益,這一過程中形成的去中心化自治組織通常被稱為DAO.

1900/1/1 0:00:00
WEB:Web 3.0去中心化互聯網如何實現?-ODAILY_Energy Web Token

互聯網的歷史 Web2.0在信息消費和內容創建等方面貢獻了無與倫比的經濟增長,代表了人類進化的重要時代,新的工作方式、消費者信息和人類文明的進步;而Web3.0被譽為由創造者經濟推動的技術范式.

1900/1/1 0:00:00
NFT:頂峰AscendEX觀察:NFT價值驅動下的GameFi 2.0游戲新經濟-ODAILY_GAM

2021年8月,TokenTerminal數據顯示,NFT區塊鏈游戲AxieInfinity以高達3.34億美元的30日營收業績,遠遠超過《王者榮耀》在7月的2.31億美元收入.

1900/1/1 0:00:00
ads