use crate::{ storage::{Decimals, TransferMessageStorage}, Contract, ContractExt, StorageKey, }; use borsh::{BorshDeserialize, BorshSerialize}; use near_contract_standards::storage_management::StorageBalance; use near_sdk::{ collections::{LookupMap, LookupSet}, env, near, AccountId, PanicOnDefault, }; use omni_types::{ChainKind, Nonce, OmniAddress, TransferId}; #[derive(BorshDeserialize, BorshSerialize, PanicOnDefault)] pub struct OldState { pub prover_account: AccountId, pub factories: LookupMap, pub pending_transfers: LookupMap, pub finalised_transfers: LookupSet, pub token_id_to_address: LookupMap<(ChainKind, AccountId), OmniAddress>, pub token_address_to_id: LookupMap, pub token_decimals: LookupMap, pub deployed_tokens: LookupSet, pub token_deployer_accounts: LookupMap, pub mpc_signer: AccountId, pub current_origin_nonce: Nonce, pub destination_nonces: LookupMap, pub accounts_balances: LookupMap, pub wnear_account_id: AccountId, } #[near] impl Contract { #[private] #[init(ignore_state)] pub fn migrate() -> Self { let old_state: OldState = env::state_read() .unwrap_or_else(|| env::panic_str("Old state not found. Migration is not needed.")); Self { prover_account: old_state.prover_account, factories: old_state.factories, pending_transfers: old_state.pending_transfers, finalised_transfers: old_state.finalised_transfers, fast_transfers: LookupMap::new(StorageKey::FastTransfers), token_id_to_address: old_state.token_id_to_address, token_address_to_id: old_state.token_address_to_id, token_decimals: old_state.token_decimals, deployed_tokens: old_state.deployed_tokens, token_deployer_accounts: old_state.token_deployer_accounts, mpc_signer: old_state.mpc_signer, current_origin_nonce: old_state.current_origin_nonce, destination_nonces: old_state.destination_nonces, accounts_balances: old_state.accounts_balances, wnear_account_id: old_state.wnear_account_id, } } }