【发布时间】:2021-09-27 22:02:04
【问题描述】:
我正在尝试将以太坊 DeFi 合约移植到 Solana 的 Rust 程序中...... 我已经了解了在程序的帐户数据中保存结构或数组,但仍然不知道如何将 HashMap
保存到程序的帐户数据中...... 然后如何读取这个 HashMap 的值,比如检查每个地址的质押量。 请帮忙。谢谢!我的 Solana Rust 程序:
pub fn get_init_hashmap() -> HashMap<&'static str, u64> {
let mut staked_amount: HashMap<&str, u64> = HashMap::new();
staked_amount.insert("9Ao3CgcFg3RB2...", 0);
staked_amount.insert("8Uyuz5PUS47GB...", 0);
staked_amount.insert("CRURHng6s7DGR...", 0);
staked_amount
}
pub fn process_instruction(...) -> ProgramResult {
msg!("about to decode account data");
let acct_data_decoded = match HashMap::try_from_slice(&account.data.borrow_mut()) {
Ok(data) => data,//to be of type `HashMap`
Err(err) => {
if err.kind() == InvalidData {
msg!("InvalidData so initializing account data");
get_init_hashmap()
} else {
panic!("Unknown error decoding account data {:?}", err)
}
}
};
msg!("acct_data_decoded: {:?}", acct_data_decoded);
【问题讨论】:
-
程序的账户数据中保存hash map是什么意思?
-
你的问题很不清楚。请告诉我们您到底想达到什么目标,例如将数据存储到磁盘,内存,...。如果您可以提供minimal reproducible example 并可能阅读How to Ask :)
-
由 Discord 上的 Solana 开发支持人员回答
标签: serialization rust hashmap deserialization solana