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

TRU:Rust智能合約養成日記(9)

Author:

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

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

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

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

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

以太坊客戶端Erigon將結束對Rust版本Akula的支持:金色財經報道,以太坊客戶端Erigon官方Blog表示,將結束對Erigon的Rust版本Akula的支持。團隊近期發現,一個基于Rust語言的Ethereum實現將開放源代碼,其范圍幾乎與Akula相同,并有一些相同/相似的構建模塊。Erigon團隊認為,該項目在開源后將更加受人支持與歡迎,其功能也將很快匹配和超越Akula。與該項目背后擁有的資源和影響力相比,Erigon無法保證Akula能夠吸引未來的資助,因此決定取消對Akula的技術、管理和資金支持。[2022/11/24 8:03:28]

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

加密IRA平臺iTrustCapital完成1.25 億美元融資,Left Lane Capital領投:1月19日消息,加密 IRA 平臺 iTrustCapital 以 31 億美元估值完成 1.25 億美元 A 輪融資,本輪融資由 Left Lane Capital 領投,其他具體融資信息暫未透露。本輪融資資金將用于開發新產品,例如質押治理 Token,并探索更多收購機會。

iTrustCapital 是一個允許用戶通過個人退休賬戶 (IRA) 購買加密貨幣的平臺,該平臺的托管合作伙伴是 Coinbase Custody 和 Fireblocks。iTrustCapital 高級副總裁 Kevin Maloney 表示,自推出以來,該平臺已創建超過 120,000 個新帳戶,每月活躍用戶超過 25,000 個。[2022/1/20 9:00:13]

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

tZERO宣布與Prime Trust達成合作 后者提供數字資產托管服務:證券型代幣交易平臺 tZERO宣布與Prime Trust達成合作,支持用戶直接通過Prime Trust托管數字資產,包括證券和加密貨幣,并在tZERO的經紀交易商子公司tZERO ATS上提供此類數字資產證券的交易。此外,tZERO ATS申請支持其自身及其經紀交易商子公司自行清算。

tZERO簽署了一項技術整合協議,允許Prime Trust為在tZERO受監管子公司運營的平臺上交易此類資產的客戶提供數字證券和加密貨幣的托管服務。這種新的基礎設施取代了對第三方清算公司的依賴。(The Paypers)[2021/1/28 14:15:26]

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

動態 | 區塊鏈仲裁公司Proof of Trust計劃在倫敦證券交易所上市:1月17日消息,區塊鏈仲裁公司Proof of Trust計劃在倫敦證券交易所上市,但目前該公司尚未公布更多有關上市的詳細信息。據悉,該公司致力于開發區塊鏈智能合約糾紛解決方案。(CoinDesk )[2020/1/17]

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

3.NEAR合約升級常用方法

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

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

transaction如下

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

transaction如下

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

3.1合約數據結構未被修改

例如我們增加一個函數:

編譯后使用deploy重新部署:

編譯后使用deploy重新部署:

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

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

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

3.2?合約數據結構被修改

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

我們嘗試再次重新部署:

合約還是成功部署了:

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

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

Cannotdeserializethecontractstate.

具體的transaction見:

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

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

3.3?Migrate升級智能合約

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

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

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

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

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

4.合約升級的安全考量

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

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

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

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

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

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

Tags:USTTRUSTTRUNEARSensitrustTRUE幣near幣最新消息

瑞波幣
TPS:ZT創新板即將上線CELT

親愛的ZT用戶: ZT創新板即將上線CELT,並開啟CELT/USDT交易對。具體上線時間如下: 充值:已開啟; 交易:2022年3月30日18:00; CELT 項目簡介:Celestial是.

1900/1/1 0:00:00
SHF:Bitfinex to List Bit2Me (B2M) and Shyft (SHFT)

We''repleasedtoannouncethatBitfinexwilllistBit2Me(B2M)andShyft(SHFT)ERC-20tokens.

1900/1/1 0:00:00
XTZ:XT.COM關於恢復QTUM充提的公告

尊敬的XT.COM用戶:QTUM錢包升級維護已完成,XT.COM現已恢復QTUM充提業務。給您帶來的不便,請您諒解!XTZ突破3.5美元關口 日內漲幅為30.48%:火幣全球站數據顯示,XTZ短.

1900/1/1 0:00:00
GATE:Gate.io 首發上線Startup項目AdaSwap(ASW)及免費認購規則公告(免費瓜分20,000,000 個ASW)

關於Gate.ioStartup免費空投計劃爲回饋平臺用戶,Gate.io上線“免費空投計劃”,在Startup區不定期進行區塊鏈項目的免費空投計劃.

1900/1/1 0:00:00
ETH:數據:2021年各級政府、部位,發布區塊鏈相關政策達1101部

據《中國區塊鏈產業全景報告》數據顯示,2021年區塊鏈產業扶持政策遍地開花,單年中央、各部委及各省市地方政府發布區塊鏈相關政策達1101部,中國在區塊鏈技術專利申請上位于世界前列.

1900/1/1 0:00:00
MEX:MEXC關於FREE3L、 BAKE3L、 XTZ5L、 SRM3L和APX3L等11種ETF產品進行份額合並的公告

尊敬的用戶: 由於杠桿ETF產品FREE3L、BAKE3L、XTZ5L、SRM3L、APX3L、SHIB3L、TRX3L、ICP3L、BAL3L、XMR3L、BAT3L和CVC3L的單價均低於0.

1900/1/1 0:00:00
ads