Skip to content

Commit

Permalink
add upgrade plan event
Browse files Browse the repository at this point in the history
  • Loading branch information
pause125 committed Sep 18, 2022
1 parent 6cccb73 commit 1d36b36
Show file tree
Hide file tree
Showing 8 changed files with 183 additions and 48 deletions.
2 changes: 1 addition & 1 deletion build/StarcoinFramework/BuildInfo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ compiled_package_info:
? address: "0x00000000000000000000000000000001"
name: YieldFarmingV2
: StarcoinFramework
source_digest: E084083B9449F396039B8495E0E69BE4F2537E6F6E63F8187394FFDA78F1A9B2
source_digest: 333D56C5DF280E3CF3EAEFC2458E6066A063C69C5ED83B56651E817755D85992
build_flags:
dev_mode: false
test_mode: false
Expand Down
Binary file modified build/StarcoinFramework/bytecode_modules/PackageTxnManager.mv
Binary file not shown.
132 changes: 113 additions & 19 deletions build/StarcoinFramework/docs/PackageTxnManager.md

Large diffs are not rendered by default.

Binary file modified build/StarcoinFramework/source_maps/PackageTxnManager.mvsm
Binary file not shown.
4 changes: 2 additions & 2 deletions integration-tests/package_txn_manager/cancel_upgrade_plan.exp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ task 3 'run'. lines 8-19:

task 4 'run'. lines 21-35:
{
"gas_used": 161503,
"gas_used": 188044,
"status": "Executed"
}

Expand All @@ -30,7 +30,7 @@ task 5 'run'. lines 36-46:

task 6 'run'. lines 48-57:
{
"gas_used": 50189,
"gas_used": 81198,
"status": "Executed"
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@ task 3 'run'. lines 7-17:

task 4 'run'. lines 19-31:
{
"gas_used": 161503,
"gas_used": 188044,
"status": "Executed"
}

task 5 'run'. lines 33-42:
{
"gas_used": 50189,
"gas_used": 81198,
"status": "Executed"
}

task 7 'run'. lines 46-55:
{
"gas_used": 50189,
"gas_used": 81198,
"status": "Executed"
}

Expand Down
6 changes: 3 additions & 3 deletions integration-tests/package_txn_manager/package_txn_manager.exp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ task 3 'run'. lines 8-19:

task 4 'run'. lines 21-35:
{
"gas_used": 161503,
"gas_used": 188044,
"status": "Executed"
}

Expand All @@ -30,7 +30,7 @@ task 5 'run'. lines 36-46:

task 6 'run'. lines 48-59:
{
"gas_used": 50189,
"gas_used": 81198,
"status": "Executed"
}

Expand Down Expand Up @@ -96,7 +96,7 @@ task 12 'run'. lines 108-117:

task 13 'run'. lines 119-128:
{
"gas_used": 120851,
"gas_used": 144392,
"status": "Executed"
}

Expand Down
81 changes: 61 additions & 20 deletions sources/PackageTxnManager.move
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ address StarcoinFramework {
config: TwoPhaseUpgradeConfig,
plan: Option<UpgradePlanV2>,
version_cap: Config::ModifyConfigCapability<Version::Version>,
upgrade_event: Event::EventHandle<Self::UpgradeEvent>,
upgrade_event: Event::EventHandle<UpgradeEvent>,
}

/// module upgrade event.
Expand All @@ -96,8 +96,19 @@ address StarcoinFramework {
version: u64,
}

struct UpgradePlanEventHolder has key {
upgrade_plan_event: Event::EventHandle<UpgradePlanEvent>
}

/// module upgrade plan event when submitting a module upgrade plan
struct UpgradePlanEvent has drop, store {
package_address: address,
plan: UpgradePlanV2,
}

/// Update account's ModuleUpgradeStrategy
public fun update_module_upgrade_strategy(account: &signer, strategy: u8, min_time: Option<u64>) acquires ModuleUpgradeStrategy, TwoPhaseUpgrade, TwoPhaseUpgradeV2, UpgradePlanCapability{
public fun update_module_upgrade_strategy(account: &signer, strategy: u8, min_time: Option<u64>)
acquires ModuleUpgradeStrategy, TwoPhaseUpgrade, TwoPhaseUpgradeV2, UpgradePlanCapability, UpgradePlanEventHolder{
assert!(strategy == STRATEGY_ARBITRARY || strategy == STRATEGY_TWO_PHASE || strategy == STRATEGY_NEW_MODULE || strategy == STRATEGY_FREEZE, Errors::invalid_argument(EUNKNOWN_STRATEGY));
let account_address = Signer::address_of(account);
let previous_strategy = get_module_upgrade_strategy(account_address);
Expand All @@ -110,13 +121,16 @@ address StarcoinFramework {
if (strategy == STRATEGY_TWO_PHASE){
let version_cap = Config::extract_modify_config_capability<Version::Version>(account);
let min_time_limit = Option::get_with_default(&min_time, DEFAULT_MIN_TIME_LIMIT);
move_to(account, UpgradePlanCapability{ account_address: account_address});
move_to(account, TwoPhaseUpgradeV2{
config: TwoPhaseUpgradeConfig{min_time_limit: min_time_limit},
move_to(account, UpgradePlanCapability{ account_address});
move_to(account, TwoPhaseUpgradeV2 {
config: TwoPhaseUpgradeConfig { min_time_limit },
plan: Option::none<UpgradePlanV2>(),
version_cap: version_cap,
upgrade_event: Event::new_event_handle<Self::UpgradeEvent>(account)}
);
version_cap,
upgrade_event: Event::new_event_handle<UpgradeEvent>(account)
});
move_to(account, UpgradePlanEventHolder {
upgrade_plan_event: Event::new_event_handle<UpgradePlanEvent>(account)
});
};
//clean two phase upgrade resource
if (previous_strategy == STRATEGY_TWO_PHASE){
Expand All @@ -128,8 +142,12 @@ address StarcoinFramework {
};
if (exists<TwoPhaseUpgradeV2>(account_address)) {
let tpu = move_from<TwoPhaseUpgradeV2>(account_address);
let TwoPhaseUpgradeV2{plan:_, version_cap, upgrade_event, config: _} = tpu;
Event::destroy_handle<Self::UpgradeEvent>(upgrade_event);
let TwoPhaseUpgradeV2{config: _, plan: _, version_cap, upgrade_event } = tpu;
Event::destroy_handle<UpgradeEvent>(upgrade_event);
if (exists<UpgradePlanEventHolder>(account_address)) {
let UpgradePlanEventHolder{ upgrade_plan_event } = move_from<UpgradePlanEventHolder>(account_address);
Event::destroy_handle<UpgradePlanEvent>(upgrade_plan_event);
};
Config::destroy_modify_config_capability<Version::Version>(version_cap);
};
// UpgradePlanCapability may be extracted
Expand Down Expand Up @@ -192,21 +210,27 @@ address StarcoinFramework {
if (Option::is_some(&plan)) {
let old_plan = Option::borrow(&plan);
move_to(&account, TwoPhaseUpgradeV2{
config: config,
config,
plan: Option::some(UpgradePlanV2 {
package_hash: *&old_plan.package_hash,
active_after_time: old_plan.active_after_time,
version: old_plan.version,
enforced: false }),
version_cap: version_cap,
upgrade_event: upgrade_event
version_cap,
upgrade_event
});
move_to(&account, UpgradePlanEventHolder {
upgrade_plan_event: Event::new_event_handle<UpgradePlanEvent>(&account)
});
} else {
move_to(&account, TwoPhaseUpgradeV2{
config: config,
move_to(&account, TwoPhaseUpgradeV2 {
config,
plan: Option::none<UpgradePlanV2>(),
version_cap: version_cap,
upgrade_event: upgrade_event
version_cap,
upgrade_event
});
move_to(&account, UpgradePlanEventHolder {
upgrade_plan_event: Event::new_event_handle<UpgradePlanEvent>(&account)
});
};
}
Expand All @@ -215,8 +239,14 @@ address StarcoinFramework {
pragma verify = false;
}

public fun submit_upgrade_plan_v2(account: &signer, package_hash: vector<u8>, version:u64, enforced: bool) acquires TwoPhaseUpgradeV2,UpgradePlanCapability,ModuleUpgradeStrategy{
public fun submit_upgrade_plan_v2(account: &signer, package_hash: vector<u8>, version:u64, enforced: bool)
acquires TwoPhaseUpgradeV2,UpgradePlanCapability,ModuleUpgradeStrategy,UpgradePlanEventHolder{
let account_address = Signer::address_of(account);
if (!exists<UpgradePlanEventHolder>(account_address)) {
move_to(account, UpgradePlanEventHolder {
upgrade_plan_event: Event::new_event_handle<UpgradePlanEvent>(account)
})
};
let cap = borrow_global<UpgradePlanCapability>(account_address);
submit_upgrade_plan_with_cap_v2(cap, package_hash, version, enforced);
}
Expand All @@ -227,12 +257,23 @@ address StarcoinFramework {
include SubmitUpgradePlanWithCapAbortsIf{account: global<UpgradePlanCapability>(Signer::address_of(account)).account_address};
ensures Option::is_some(global<TwoPhaseUpgrade>(global<UpgradePlanCapability>(Signer::address_of(account)).account_address).plan);
}
public fun submit_upgrade_plan_with_cap_v2(cap: &UpgradePlanCapability, package_hash: vector<u8>, version: u64, enforced: bool) acquires TwoPhaseUpgradeV2,ModuleUpgradeStrategy{
public fun submit_upgrade_plan_with_cap_v2(cap: &UpgradePlanCapability, package_hash: vector<u8>, version: u64, enforced: bool)
acquires TwoPhaseUpgradeV2, ModuleUpgradeStrategy, UpgradePlanEventHolder{
let package_address = cap.account_address;
assert!(get_module_upgrade_strategy(package_address) == STRATEGY_TWO_PHASE, Errors::invalid_argument(ESTRATEGY_NOT_TWO_PHASE));
let tpu = borrow_global_mut<TwoPhaseUpgradeV2>(package_address);
let active_after_time = Timestamp::now_milliseconds() + tpu.config.min_time_limit;
tpu.plan = Option::some(UpgradePlanV2 { package_hash, active_after_time, version, enforced });
if (Option::is_some(&tpu.plan)) {
let plan = Option::borrow(&tpu.plan);
let event_holder = borrow_global_mut<UpgradePlanEventHolder>(package_address);
Event::emit_event<UpgradePlanEvent>(&mut event_holder.upgrade_plan_event, UpgradePlanEvent {
package_address,
plan: *plan
});
};


}
spec submit_upgrade_plan_with_cap_v2 {
pragma verify = false;
Expand Down Expand Up @@ -405,7 +446,7 @@ address StarcoinFramework {
let plan = Option::borrow(&tpu.plan);
Config::set_with_capability<Version::Version>(&mut tpu.version_cap, Version::new_version(plan.version));
Event::emit_event<Self::UpgradeEvent>(&mut tpu.upgrade_event, UpgradeEvent {
package_address: package_address,
package_address,
package_hash: *&plan.package_hash,
version: plan.version});
};
Expand Down

0 comments on commit 1d36b36

Please sign in to comment.