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

Rust智能合約養成日記(9)-ODAILY_UST

Author:

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

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

1.合約升級的必要性

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

2.Solidity合約常見升級方式

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

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

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

Phanta Bear與PetaRush將合作推出跨IP區塊鏈游戲:9月22日消息,NFT項目Phanta Bear與Web3游戲平臺PetaRush達成合作,將推出首個跨IP角色交互的區塊鏈游戲,所有Phanta Bear NFT持有者都可以獲得全新獨特的3D Phanta Bear In-Game NFT,并參與PetaRush游戲。

據悉,PetaRush的游戲NFT Peta將于10月開始白名單鑄造,游戲封閉Beta測試將于11月開始。(Media OutReach)[2022/9/22 7:13:38]

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

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

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

Trust Wallet任命新產品主管:金色財經消息,加密貨幣錢包Trust Wallet任命Eric Chang為產品主管,Eric Chang此前在Meta和Oculus VR擁有多年經驗。

3月底,Trust Wallet首席執行官Viktor Radchenko表示將卸任CEO一職,將花更多時間在他的家人和有趣的項目上。幣安現任營銷副總裁Eowyn Chen將接替Viktor Radchenko擔任CEO。[2022/4/13 14:20:38]

3.NEAR合約升級常用方法

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

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

Kusama啟動第十二輪插槽拍賣,Picasso、CrustShadow等參與:10月25日消息,Kusama 上第十二輪插槽拍賣已于2021 年 10 月 5 日17:33左右啟動,目前出價最高的是跨鏈虛擬機Composable的Kusama 先行網 Picasso,約 5.7 萬枚 KSM。其他參與者包括波卡生態元宇宙Bit.Country的先行網 Bit.Country Pioneer、隱私計算項目Integritee Network、分布式存儲協議 Crust 的先行網 Crust Shadow、物聯網平臺 Robonomics。[2021/10/25 20:55:43]

transaction如下

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

transaction如下

UTRUST啟動Shopify定制化支付應用方案,賣家可申請接收比特幣支付:加密支付解決方案UTRUST宣布啟動基于Shopify的定制化支付應用方案,目前接受Shopify平臺上的賣家申請使用比特幣等加密貨幣支付。[2021/2/19 17:29:38]

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

3.1合約數據結構未被修改

例如我們增加一個函數:

編譯后使用deploy重新部署:

編譯后使用deploy重新部署:

張首晟:區塊鏈時代的核心理念是“In math we trust(基于數學的共識)”:張首晟教授在清華大學x-lab公開課演講表示,巴菲特認為比特幣不具有實際應用價值,正如物理學中引入“場”的概念長時間被認為沒有實際價值,但最終“場”的概念被證明具有實際作用。共識是貨幣產生的前提,在自然界中,電子在某些情況下會表現出同樣的特性,可以看做達成一種自然的共識。大自然發展的必然趨勢是,隨著演化,越來越傾向于無序。達到一個單位的共識必然是一個熵減的行為,也意味著整個系統的熵增加,因此比特幣達成共識必然需要消耗很多能量。但達到單位共識所耗費的能量是否有下限是一個很重要的問題,也是他們目前在研究的課題。中心化和去中心化的關系是分久必合、合久必分。區塊鏈的革命會使互聯網的作用放大十倍、百倍。區塊鏈時代的核心理念應當是“In math we trust”。在人類所有知識中,數學是最能達成自然共識的知識。區塊鏈時代最基礎的數學知識包括:建構在橢圓曲線上的公私鑰、哈希函數、零知識證明、安全多重計算、形式化證明等。在區塊鏈經濟系統中,比特幣相當于M0,閃電網絡相當于M1,預測市場、期貨等相當于M2。[2018/5/9]

接著我們調用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:UST區塊鏈TRUSTNEARtrustwallet錢包以下哪項不是區塊鏈目前的分類Trust Domainsnear幣挖礦教程

幣安app官方下載最新版
頂峰AscendEX聯合首發NFT音樂多鏈平臺Traxx-ODAILY_TRA

3月22日,頂峰AscendEX聯合首發NFT音樂發現與交易平臺Token||Traxx,并開放TRAXX/USDT交易市場.

1900/1/1 0:00:00
頂峰AscendEX項目:LUNA、AVAX榮膺加密市值“十強”-ODAILY_比特幣

LUNA、AVAX榮膺加密市值“十強”——頂峰AscendEX項目遴選的確幸近段時間,全球加密市場行情總體處于回調階段.

1900/1/1 0:00:00
CZ都看好的2022年風口, SocialFi賽道現狀全覽-ODAILY_CIA

Grace@footprint.networkDataSource:FootprintAnalyticsSocialFiDashboard-Jan繼《一文快速了解SocialFi》介紹Socia.

1900/1/1 0:00:00
「多玩少賺」模式會做出更好的元宇宙游戲-ODAILY_AXI

區塊鏈的“互操性”可能是解釋元宇宙游戲中宏觀經濟學原理的關鍵,也是讓元宇宙游戲保持“可玩性”樂趣的關鍵.

1900/1/1 0:00:00
一文整理網絡安全的6個區塊鏈用例-ODAILY_區塊鏈

區塊鏈技術提供了多種可以增強安全性的設計配置和應用程序。然而,盡管區塊鏈市場具有所有所謂的安全優勢,但區塊鏈市場仍充斥著安全問題.

1900/1/1 0:00:00
DeFi借貸協議Minterest完成552萬美元MNT通證發售-ODAILY_RES

該活動是通過Copper的LBP進行的,確保通證以更公平的方式分配,這符合使DeFi更加公平Minterest精神.

1900/1/1 0:00:00
ads