转至元数据结尾
转至元数据起始

You are viewing an old version of this content. View the current version.

与当前比较 View Version History

« 上一页 版本 39 下一步 »

实施方案概述

本方案通过设定升级高度,确保在达到指定高度后自动执行force-deploy流程,并完成相关账户的拉黑及资产销毁操作。

详细执行步骤

1. 升级高度设定

将高度设定为当前网络高度加约5000个区块(假设区块出块时间为5000区块1小时,这里需要确认Bob),并预留1-2小时的部署时间,根据实际出块时间进行调整。

2. 黑名单配置

FrozenConfigStrategy::frozen_list_v1中确认待拉黑地址列表 Tim Yang

3. 节点交易管控

配置AddressFilter::is_blacklisted,以实现特定高度下自动解除交易限制。 YSG

T1为强制升级的区块号,T2为解除交易限制的高度,T2必须大于T1,加上一个数值(为了缓冲和同步),但不超过某一范围,以便在后续可能的分叉中允许部分地址立即转账。

4. Force-Deploy执行

一旦达到指定高度,触发force-deploy流程,强制升级高度的计算如下

  • 按照目前出块速度,已知平均4秒左右出一个块,每分钟出块为60/4=12,每小时出块为12*60=720,每日出块为 24*720=17280

  • 已知高度 22629195 的出块时间为2025年2月11日 12:00:02 ,那么2025年2月12日 12:00:00 为 22629195+17280=22,646,475 基于此高度取整 22,650,000

  • 销毁高度为10天公示期,那么高度应该为22650000+200000=22,850,000

5. 升级函数执行

自动触发StdlibUpgradeScripts::upgrade_from_v11_to_v12,执行拉黑操作。

异常处理机制

  • 新增黑名单:通过基金会账户执行FrozenConfigStrategy::add_account

  • 移除误加地址:执行FrozenConfigStrategy::remove_account

  • 紧急情况:使用FrozenConfigStrategy::set_global_frozen锁定所有出块交易。

6. 信息公示

对拉黑地址进行为期10天的公示。

7. STC销毁流程

  • 该逻辑为:任何人都可以在指定的区块高度之后调起销毁函数进行销毁。

  • 销毁高度将配置在FrozenConfigStrategy模块中,参考以下代码,代码中提供了两个操作,一是会在调起升级函数的时候将销毁高度传入到BurnBlockNumber结构,另外一个是通过基金会账号调起update_burn_block_number来更新销毁高度。

    module StarcoinFramework::FrozenConfigStrategy {
      struct BurnBlockNumber has key {
        block_number: u64,
      }
      ...
      
      // 初始函数,由升级触发函数调起
      public fun initialize(
        framework_account: &signer,
        main_bnum: u64,
        barnard_bnum: u64,
        test_bnum: u64,
        other_bnum: u64
      ) {
        ...
      }
      
      // 更新销毁高度
      public entry fun update_burn_block_number(associal_account: signer, block_number: u64) acquires BurnBlockNumber {
        assert_association_root_address(&associal_account);
    
        let burn_block_number =
            borrow_global_mut<BurnBlockNumber>(Signer::address_of(&associal_account));
         burn_block_number.block_number = block_number;
      }
      
      // 销毁黑名单中所有账户的余额
      public entry fun do_burn_frozen() acquires BurnBlockNumber {
       ...
      }
    }
  • 当到达指定的高度后,可通过调起 do_burn_frozen 来销毁黑名单中所有账户的余额,完成销毁

8. 结果公示

在社交媒体平台上公布销毁交易的Hash值。

9. 区块浏览器

在BARNARD演练中,回滚区块后需要重置浏览器索引程序的抓取高度,确保区块浏览器相关设置得到更新。barnard 回滚区块浏览器数据清理步骤

Barnard 网络执行演练

在进行主网升级之前,需要在 barnard 上进行演练。

  1. 首先,将基金会账户导入到本地账户列表:/wiki/spaces/WESTAR/pages/1933320

  2. 检查基金会账户的资源是否在强制升级后存在 0x1::Config::Config<0x1::FrozenConfig::FrozenConfig>

    starcoin% state list resource 0x0000000000000000000000000a550c18
    
    ...
                
    "0x00000000000000000000000000000001::Config::Config<0x00000000000000000000000000000001::FrozenConfig::FrozenConfig>": {
            "json": {
              "payload": {
                "frozen_account_list": {
                  "list": [
                    "0xd0c5a06ae6100ce115cad1600fe59e96",
                    "0x1af80d10cb642adcd9f7fee1420104ec"
                  ]
                },
                "frozen_global_txn": false
              }
            },
            "raw": "0x0002d0c5a06ae6100ce115cad1600fe59e961af80d10cb642adcd9f7fee1420104ec"
          },
          ...
  3. 尝试在本地添加一个新账户,并按照以下流程测试该账户:

    # 转入20个STC到黑名单账户0x5e7c9c96fe6fb1290aa6c9b14e3abb73
    account transfer -s 0x0000000000000000000000000a550c18 -r 0x5e7c9c96fe6fb1290aa6c9b14e3abb73 -v 20000000000 -b
    
    # 0x5e7c9c96fe6fb1290aa6c9b14e3abb73 尝试转出1个STC到基金会账户,预期为成功
    account transfer -s 0x5e7c9c96fe6fb1290aa6c9b14e3abb73 -r 0x0000000000000000000000000a550c18 -v 1000000000 -b
    
    # 将0x5e7c9c96fe6fb1290aa6c9b14e3abb73加入黑名单
    account execute-function -s 0x0000000000000000000000000a550c18 --function 0x1::FrozenConfigStrategy::add_account --arg 0x5e7c9c96fe6fb1290aa6c9b14e3abb73 -b
    
    # 使用以下命令检查黑名单列表中是否有该账户
    state list resource 0x0000000000000000000000000a550c18
    
    # 0x5e7c9c96fe6fb1290aa6c9b14e3abb73 尝试转出1个STC到基金会账户,预期报错账户被冻结
    account transfer -s 0x5e7c9c96fe6fb1290aa6c9b14e3abb73 -r 0x0000000000000000000000000a550c18 -v 100000000 -b
    
    txn dry run result: TransactionOutputView { status: Discard { status_code: StrView(18), status_code_name: "SENDING_ACCOUNT_FROZEN" }, gas_used: StrView(0), write_set: [], events: [], table_item_write_set: [] }
    
    # 尝试 burn 所有黑名单中的额度,预期为失败,因为未到指定高度
    account execute-function -s 0x0000000000000000000000000a550c18 --function 0x1::FrozenConfigStrategy::do_burn_frozen -b
    {
      "ok": {
        "dry_run_output": {
          "events": [],
          "explained_status": {
            "MoveAbort": {
              "abort_code": 27137
              ...
    }
    
    # 修改销毁高度
    account execute-function -s 0x0000000000000000000000000a550c18 --function 0x1::FrozenConfigStrategy::update_burn_block_number --arg <height> -b
    
    # 尝试 burn 所有黑名单中的额度,预期为成功,到达了指定高度
    account execute-function -s 0x0000000000000000000000000a550c18 --function 0x1::FrozenConfigStrategy::do_burn_frozen -b
    
    # 检查黑名单中的账户余额,预期为0
    

主网上线清单

  1. 确定上线时间点

    • 大象矿池启动时间 YSG

    • CoinEx 打款时间 Tim Yang

  2. 准备基金会账户

  3. 代币销毁

  4. 销毁后,发行总量是否能变化,这里需要确认不能变成负数;(已修改)

  5. 交易监控,大于一定数额的交易需要告警

参考信息

Starcoin Core 代码分支可以在以下链接找到:https://github.com/starcoinorg/starcoin/tree/master

Starcoin Framework 代码分支如下:https://github.com/starcoinorg/starcoin-framework/tree/v11_branch

  • 无标签