程序維護中的一個基本問題是——缺陷修復總會以%的機率引入新的bug。所以整個過程是前進兩步,后退一步。——布魯克斯《人月神話》
智能合約本質上是程序,既然是程序,缺陷就不可避免。即便是經過大量測試和審計的智能合約,仍然可能會有漏洞。合約的漏洞如果被攻擊者利用,可能造成用戶資產的損失,導致嚴重的后果。漏洞的修復往往需要通過合約升級來實現。除了漏洞修復,新特性的加入也需要合約升級。因此合約的可升級性非常有必要。本期Rust智能合約養成日記,將為大家介紹Rust合約的升級方式。2.Solidity合約常見升級方式
以太坊中,智能合約具有不可變性,一旦被部署到鏈上,沒有人可以改變它。
那么如果合約存在漏洞或合約需要添加新功能,該如何修改合約的代碼?解決方案是將新的合約部署到區塊鏈上。
去中心化存儲網絡Crust Network贏得第30輪波卡平行鏈拍賣:10月24日消息,去中心化存儲網絡 Crust Network 以鎖定近 7.2 萬枚 DOT 贏得第 30 輪波卡平行鏈拍賣。Crust Network 是建立在 IPFS 之上的去中心化存儲網絡,通過代幣來激勵節點存儲 IPFS 網絡上的數據。[2022/10/25 16:37:31]
該方法面臨的挑戰是,solidity每次部署合約后,合約都會被分配一個唯一的地址。因此所有用到了該合約的DApps都需要修改合約地址來適配新的合約。此外,舊版本合約中的狀態需要遷移到新版本合約中,狀態較為復雜的合約遷移的工作量很大,容易出錯,而且復制數據的Gas費用高。
因此,我們通常采用數據和邏輯分離的架構,將數據保存在一個不處理任何邏輯的合約中,所有的邏輯在另一個合約中實現。通常合約升級修改的是邏輯,使用該架構只需要升級邏輯合約,不需要擔心狀態遷移。
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]
為了解決這個問題,可以使用代理合約,具體架構如下圖所示。
TRU(TrustToken)登陸MXC抹茶,開盤上漲120%:11月22日22:00,TRU(TrustToken)登陸MXC抹茶考核區,開放USDT交易。TRU開盤價為0.15USDT,截至目前最高報價0.33USDT,最高漲幅120%。
資料顯示, TrueFi是TrustToken推出無抵押借貸 DeFi 協議,TRU是用來進行質押和投票的原生資產。TrustNetwork是一個數字資產轉換平臺,允許任何人為資產創造流動性和部分所有權,并為他們的資產持有人提供保險和審計。
注:僅供消息分享,不構成任何投資建議。[2020/11/22 21:42:14]
代理合約用來來存儲數據,并且使用delegatecall調用邏輯合約A,這樣合約A讀寫的數據都存儲在代理合約中。如果需要升級邏輯合約,部署新的合約B,然后發一條交易給代理合約,讓代理合約指向新的邏輯合約B即可。
動態 | Torus贈送ETH以鼓勵用戶測試Torus錢包:金色財經報道,私鑰管理公司Torus今天在Reddit上宣布,對于渴望測試Torus的Reddit用戶,Torus將向其Reddit帳戶發送一些ETH。用戶需要使用Reddit帳戶登錄以獲得ETH。根據該公司此前的博客文章,最新版的Torus非托管錢包允許用戶使用其Facebook、Reddit、Twitch或Discord帳戶登錄。用戶也可以將ETH和ERC20代幣轉移到任何以太坊錢包地址、Gmail或GSuite電子郵件帳戶、Reddit ID和Discord ID,無論接收者之前是否已登錄Torus。[2019/12/25]
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:USTTRUTRUSTDITtrustwallet錢包下載2.2版本TrustRiseV2trustwallet錢包安全嗎Datarius Credit
親愛的用戶: 為回饋廣大用戶,BKEX現開展"MMPRO充值福利"活動詳情如下: 一、活動時間 2022年4月5日12:00-4月10日12:00BKEX Global支持FIL(IPFS Fi.
1900/1/1 0:00:00尊敬的中幣用戶: ????中幣現已開放MATIC及MYT的充值和提現業務、VP充值業務。????感謝您對中幣的支持與信任!三協會發布《關于再次規范數字藏品健康發展的自律要求》:金色財經報道,中國.
1900/1/1 0:00:00尊敬的用戶: BKEXETP專區將于2022年3月31日15:00上線CVX3L、CVX3S,具體詳情如下:? 交易標的 交易對 BKEX Global將于今日21:00上線ZWS:據BKEX.
1900/1/1 0:00:00尊敬的唯客用戶您好! 唯客福利大放送 活動四:天天紅包雨 活動方式: 活動期間每天抽出10位有完成合約交易的用戶隨機送8、18、38、68、88USDT,周一至周五不限幣種.
1900/1/1 0:00:00Facebook貼文建議–如果是Crypto項目籌資,第一重要是:「不要再找不是專業的Crypto投資人了」。我當時快速貼文寫了幾個傳統VC和CryptoVC投資上的差異.
1900/1/1 0:00:00CertiK在KYC過程中發現,SAFUU協議創始人與CleverDeFi及?TagzExchange高風險項目相關.
1900/1/1 0:00:00