【问题标题】:Solana Rust program BTreeMapSolana Rust 程序 BTreeMap
【发布时间】:2022-01-25 03:48:21
【问题描述】:

我已经阅读了这篇文章here 并且我了解到HashMap 在Solana 中不可用,因此我需要使用BTreeMap。 我是 Rust 的初学者,在尝试从以太坊迁移到 Solana 时出现以下代码错误:

pub fn constructor (
   let mut DomainsToIndex = BTreeMap::new();
   Domains[] pub DomainList;
   
   contractOwner = msg.sender;
   firstDomain.name = "empty";
   firstDomain.IP = "n/a";
   firstDomain.owner = 0;
   firstDomain.lockTime = 0;
   firstDomain.infoDocumentHash = "n/a";

   DomainsToIndex.insert(String::from(firstDomain.name), 0);
   DomainList.push(firstDomain);
) -> ProgramResult {
   msg!("First domain was added by default");
   Ok(())
} 

我当然在文件顶部添加了导入:

use std::collections::BTreeMap;

我在使用 cargo build 时收到的错误如下图所示:

我认为我做的不对,因为我是 Rust 的新手,你能帮忙吗?

谢谢。

【问题讨论】:

  • 这是 Rust 代码吗?如果是这样,您将代码放在函数的参数中,这只是无效的语法。您应该将所有这些都放在正文中 - 例如,在 msg!(...); 之后。
  • 是的,它是 Rust。谢谢你的提示,不知道这个,会试试:)

标签: rust ethereum solana


【解决方案1】:

代码存在几个语法问题。 应用程序参数应该与主体分开,pub 没有结构也没有意义。

不幸的是,他们的 Rust 接口的文档非常缺乏(似乎主要是“看看一些示例,然后通过反复试验找出其余的”)。所以我无法查找足够的信息来建议一个合理正确的版本。

这里还有一些提示:

  • 不清楚这个函数的输入是什么。您正在引用带有 sender 成员的 msg 对象,但我可以识别的唯一等效项是标识调用帐户的 &[AccountInfo] 参数。
  • 或者,Solana 程序接收指令数据的字节数组,其中显然可以包含任何编码内容。

我建议从他们的 Hello World 示例开始,稍微尝试一下,然后在您更熟悉 Rust 语法和 Solana 最佳实践后继续使用您自己的应用程序。

【讨论】:

    猜你喜欢
    • 2021-08-07
    • 2021-09-27
    • 2023-03-16
    • 1970-01-01
    • 2021-10-18
    • 2022-11-18
    • 1970-01-01
    • 2021-09-15
    • 2022-12-28
    相关资源
    最近更新 更多