Skip to content

Commit 6cc377f

Browse files
committed
fix: validate prefixes and addresses during migration
1 parent 8274c4e commit 6cc377f

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

contracts/staking/src/migrations/v1_0_0.rs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::{
22
contract::{CONTRACT_NAME, CONTRACT_VERSION},
33
error::ContractResult,
4-
helpers::validate_denom,
4+
helpers::{validate_address, validate_address_prefix, validate_denom},
55
migrations::states::v0_4_20,
66
state::{Config, NativeChainConfig, ProtocolChainConfig, ProtocolFeeConfig, CONFIG},
77
};
@@ -21,10 +21,45 @@ pub fn migrate(
2121
// Ensure that we are migrating from the correct version.
2222
assert_contract_version(deps.storage, CONTRACT_NAME, FROM_VERSION)?;
2323

24+
// Ensure the address prefixes are valid
25+
let native_account_address_prefix = validate_address_prefix(&native_account_address_prefix)?;
26+
let native_validator_address_prefix =
27+
validate_address_prefix(&native_validator_address_prefix)?;
28+
let protocol_account_address_prefix =
29+
validate_address_prefix(&protocol_account_address_prefix)?;
30+
2431
// Ensure that the token denom is valid
2532
validate_denom(&native_token_denom)?;
2633

2734
let old_config = v0_4_20::CONFIG.load(deps.storage)?;
35+
36+
// Ensure the currently configured native chain addresses have the provided prefixes
37+
validate_address(
38+
old_config.multisig_address_config.staker_address.as_str(),
39+
&native_account_address_prefix,
40+
)?;
41+
validate_address(
42+
old_config
43+
.multisig_address_config
44+
.reward_collector_address
45+
.as_str(),
46+
&native_account_address_prefix,
47+
)?;
48+
for address in old_config.validators.iter() {
49+
validate_address(address.as_str(), &native_validator_address_prefix)?;
50+
}
51+
52+
// Ensure the currently configured protocol chain addresses have the provided prefixes
53+
if let Some(address) = &old_config.oracle_address {
54+
validate_address(address.as_str(), &protocol_account_address_prefix)?;
55+
}
56+
if old_config.send_fees_to_treasury {
57+
validate_address(
58+
old_config.treasury_address.as_str(),
59+
&protocol_account_address_prefix,
60+
)?;
61+
}
62+
2863
// Convert the old config format to the new one.
2964
let new_config = Config {
3065
native_chain_config: NativeChainConfig {

0 commit comments

Comments
 (0)