🎉 #Gate Alpha 第三届积分狂欢节 & ES Launchpool# 聯合推廣任務上線!
本次活動總獎池:1,250 枚 ES
任務目標:推廣 Eclipse($ES)Launchpool 和 Alpha 第11期 $ES 專場
📄 詳情參考:
Launchpool 公告:https://www.gate.com/zh/announcements/article/46134
Alpha 第11期公告:https://www.gate.com/zh/announcements/article/46137
🧩【任務內容】
請圍繞 Launchpool 和 Alpha 第11期 活動進行內容創作,並曬出參與截圖。
📸【參與方式】
1️⃣ 帶上Tag #Gate Alpha 第三届积分狂欢节 & ES Launchpool# 發帖
2️⃣ 曬出以下任一截圖:
Launchpool 質押截圖(BTC / ETH / ES)
Alpha 交易頁面截圖(交易 ES)
3️⃣ 發布圖文內容,可參考以下方向(≥60字):
簡介 ES/Eclipse 項目亮點、代幣機制等基本信息
分享你對 ES 項目的觀點、前景判斷、挖礦體驗等
分析 Launchpool 挖礦 或 Alpha 積分玩法的策略和收益對比
🎁【獎勵說明】
評選內容質量最優的 10 位 Launchpool/Gate
Rust智能合約升級詳解:NEAR平台安全更新指南
Rust 智能合約升級方法詳解
智能合約本質上是程序,難免會存在缺陷。即使經過大量測試和審計的智能合約,仍可能存在漏洞。一旦被攻擊者利用,可能造成用戶資產損失,後果嚴重。因此,合約的可升級性非常重要。本文將介紹Rust合約的升級方式。
合約升級的必要性
智能合約的漏洞修復和新特性添加,往往需要通過合約升級來實現。主要原因有:
NEAR合約升級方法
以StatusMessage項目爲例,介紹NEAR合約的常用升級方法:
1. 合約數據結構未修改
如果只修改合約邏輯,不涉及數據結構變更,可以直接使用near deploy命令重新部署新代碼。原有數據仍可正常訪問。
2. 合約數據結構被修改
如果修改了合約的數據結構,直接重新部署會導致新的數據結構無法匹配舊狀態,出現反序列化錯誤。
3. 使用Migrate方法升級
NEAR提供了Migrate方法幫助合約升級。在新合約中加入migrate方法:
rust #[private] #[init(ignore_state)] pub fn migrate() -> Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); Self { taglines: old_state.records, bios: LookupMap::new(b"b".to_vec()), } }
部署時調用migrate方法:
near deploy
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet
這樣可以成功將舊數據遷移到新的合約結構中。
合約升級的安全考量
權限控制 - 只允許開發者或DAO升級合約
推薦將合約owner設爲DAO,通過提案和投票管理
遷移函數使用#[init(ignore_state)]
遷移完成後刪除遷移函數
新增數據結構在遷移時完成初始化
合約升級是一個復雜的過程,需要謹慎對待每個細節,確保數據安全和業務連續性。