是否可以在没有功能的情况下访问 NEAR 智能合约中的 public 结构字段?

Is is possible to access public structure fileds in NEAR smart-contract without a function?

假设我有以下智能合约(在 Rust 中):

#[near_bindgen]
#[derive(BorshDeserialize, BorshSerialize)]
pub struct Number {
    pub val: u128,
    pub decimals: u8
}

我可以在不定义 pub fn 的情况下访问 decimalsval 吗?

TL;DR:不,如果没有 getter 函数,您无法访问状态结构的特定 public 字段。

长答案:当您使用 near-sdk-rs 时,状态结构以 Borsh-serialized 格式存储,但它只是在 near-sdk-rs 帮助器上定义的 high-level 包装器; NEAR 协议不对存储的值(名称、格式或任何其他内容)施加任何限制,它只为智能合约运行时提供 key-value 存储。如果您想更深入地挖掘,您可以 view the raw state of your contract via RPC,并观察到 ​​near-sdk-rs 为您创建了一个键“STATE”,您可以使用 Borsh 在您这边反序列化它。