我如何从 NEAR 合约接收 JSON 对象?

How do I receive a JSON object from a NEAR contract?

我希望从 Sputnik v2 DAO 合约接收 Proposal 数据。我想调用 get_proposals,但 returns 是一个 json 提案列表。我不确定回调函数的方法签名在接收数据时会是什么样子。由于 sputnik-dao-contract 不是已发布的 Rust Crate,我无法导入 Proposal 结构并使用它进行反序列化。处理响应和获取 Proposal id 的最佳方法是什么?

这是我要调用的方法: https://github.com/near-daos/sputnik-dao-contract#view-multiple-proposals

如何在 Rust 中以编程方式接收、反序列化和使用响应?

如果 get_proposals 方法已经 returns 了一份提案列表,您不是已经得到了您需要的东西吗?我的意思是,数据在响应中。如果您需要针对特定​​ ID 的提案,您可以随时使用另一个函数 get_proposal

从响应来看,该结构看起来很简单,您可以自己创建它。您也可以直接从存储库中复制 Proposal struct

/// Proposal that are sent to this DAO.
#[derive(BorshSerialize, BorshDeserialize, Serialize, Deserialize)]
#[cfg_attr(not(target_arch = "wasm32"), derive(Debug))]
#[serde(crate = "near_sdk::serde")]
pub struct Proposal {
    /// Original proposer.
    pub proposer: AccountId,
    /// Description of this proposal.
    pub description: String,
    /// Kind of proposal with relevant information.
    pub kind: ProposalKind,
    /// Current status of the proposal.
    pub status: ProposalStatus,
    /// Count of votes per role per decision: yes / no / spam.
    pub vote_counts: HashMap<String, [Balance; 3]>,
    /// Map of who voted and how.
    pub votes: HashMap<AccountId, Vote>,
    /// Submission time (for voting period).
    pub submission_time: U64,
}

事实证明,答案是创建一个与 json 响应匹配的准系统结构。

的准系统结构
pub struct Proposal {
    pub id: u64,
}

(来自 https://github.com/near-daos/sputnik-dao-contract/blob/main/sputnikdao2/src/views.rs#L12)得到了我需要的东西。我根据需要添加了其他字段。