本文主要讨论2024年升级starcoin-framework的过程
包含以下步骤
...
Framework 代码升级,从1.0升级到2.0
将旧的framework与新的framework进行共存
旧Framework升级新Framework相关Writeset的写入(这里涉及到了一些Rust流程,以及之前的Forcedeploy逻辑)
升级consensus参数和以及函数调用 (Bob )
资产映射,将旧资产映射为新资产,包含的资产类型为Token资产,NFT资产两类,一期先映射Token资产,二期再映射NFT资产,主要包含信息读取和信息写入两个步骤
Token 信息读取
...
Token注册者的映射,包含TokenInfo、MintCapability、BurnCapability
...
目录 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
一、升级概述
本文详细说明从Starcoin-Framework 1.0升级到2.0版本的完整流程。
二、主要升级步骤
1. Framework代码升级
将Framework从1.0版本升级至2.0版本,主要通过在新Genesis上执行applyset实现数据同步:
2. 资产映射实现
分两期进行资产迁移:
第一期:Token资产映射
用户数据获取 YSG
Token信息读取 (0x1::Account::Balance<Type>) YSG
Token注册者映射
TokenInfo
MintCapability
BurnCapability
Token持有者映射 (0x1::Token::Token<Type>)
- 信息写入
信息写入实现 Bob
代码块 | ||
---|---|---|
| ||
fn migration_legacy_token_info_to_register( |
...
address: AccountAddress, |
...
token_struct_tag: StructTag
) -> Changeset {
...
}
fn migration_legacy_token_to_fungible_asset(
|
...
address: AccountAddress, |
...
token_struct_tag: StructTag ) -> Changeset { |
...
... } // upgrade ... // apply changeset ... let change_set = migration_legacy_token_info_to_register(); storage.apply(change_set); |
...
生态项目改造(TODO)
...
Swap
...
第二期:NFT资产映射
待实现
3. 生态项目适配
后续需要完成的项目改造:
Swap系统
Bridge系统
三、Token 映射
实际步骤
Starcoin 1.0 Token映射前准备工作:全面审查当前Starcoin 1.0 STC,其分布状态主要分布位置包括:
国库(0x1/Treasury::balance)
用户钱包(<useraddress>/0x1/Account/Balance/Token/STC)
DeFi生态系统(Swap、Bridge、借贷等项目)
映射执行流程:
建立新的数据结构(
0x1::asset_mapping::FundationPool
)当分配程序发起分配时,调用
asset_mapping::map_fungible_asset
从该结构中分配Token确保准确分配到最终用户和智能合约
初始池子设计说明:
池子容量等同于Starcoin 1.0的STC总铸造量
Genesis阶段将Token存入0x1::asset_mapping待分配映射池
通过映射函数实现最终分配
这种结构化设计确保了Token迁移过程的透明性和准确性,同时为后续的映射操作提供了清晰的执行路径。
映射表
源路径 | 目标路径 | 描述 |
---|---|---|
0x1/Treasury::balance | 0x1/treasury::balance | 国库的额度 |
… |