🎉 #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平台上的升级方法。
NEAR合约升级方法
以StatusMessage项目为例,介绍NEAR合约的常用升级方法。
1. 合约数据结构未修改
如果只修改合约逻辑,不涉及数据结构变动,可直接使用near deploy命令重新部署新代码。例如,我们在原合约基础上新增一个函数:
rust #[near_bindgen] impl StatusMessage { pub fn set_get_status(&mut self, message: String) -> Option { let account_id = env::signer_account_id(); self.records.insert(&account_id, &message); return self.records.get(&account_id); } }
编译后使用near deploy重新部署即可。原合约中的数据仍可正常读取。
2. 合约数据结构被修改
如果修改了合约的数据结构,直接重新部署会导致状态反序列化失败。例如,我们修改合约结构如下:
rust #[near_bindgen] #[derive(BorshDeserialize, BorshSerialize)] pub struct StatusMessage { taglines: LookupMap<string, string="">, bios: LookupMap<string, string="">, }
这种情况下需要使用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
这样就可以成功升级合约并迁移旧数据。
合约升级的安全考量
权限控制:升级函数应设为only owner函数,确保只能由owner调用。
推荐将合约owner设置为DAO,通过提案和投票来管理合约。
在迁移函数前加入#[init(ignore_state)],确保执行前不加载状态。
迁移完成后删除迁移函数,确保只被调用一次。
新增的数据结构在迁移时完成初始化。
合约升级是一个复杂的过程,需要谨慎对待。通过合理的设计和严格的测试,可以实现安全可靠的合约升级。