use std::collections::HashMap; use crate::{ storage::{Decimals, FastTransferStatusStorage, TransferMessageStorage}, Contract, ContractExt, StorageKey, }; use borsh::{BorshDeserialize, BorshSerialize}; use near_contract_standards::storage_management::StorageBalance; use near_sdk::{ collections::{LookupMap, LookupSet, UnorderedMap}, env, near, AccountId, CryptoHash, PanicOnDefault, }; use omni_types::{btc::UTXOChainConfig, ChainKind, FastTransferId, Nonce, OmniAddress, TransferId}; #[derive(BorshDeserialize, BorshSerialize, PanicOnDefault)] pub struct OldState { pub factories: LookupMap, pub pending_transfers: LookupMap, pub finalised_transfers: LookupSet, pub fast_transfers: LookupMap, 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, pub provers: UnorderedMap, pub init_transfer_promises: LookupMap, pub utxo_chain_connectors: HashMap, } #[near] impl Contract { #[private] #[init(ignore_state)] pub fn migrate() -> Self { if let Some(old_state) = env::state_read::() { Self { factories: old_state.factories, pending_transfers: old_state.pending_transfers, finalised_transfers: old_state.finalised_transfers, finalised_utxo_transfers: LookupSet::new(StorageKey::FinalisedUtxoTransfers), fast_transfers: old_state.fast_transfers, 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, provers: old_state.provers, init_transfer_promises: old_state.init_transfer_promises, utxo_chain_connectors: old_state.utxo_chain_connectors, migrated_tokens: LookupMap::new(StorageKey::MigratedTokens), } } else { env::panic_str("Old state not found. Migration is not needed.") } } }