NEAR上实例变量的值-在每个客户端之间共享?或者每个客户都是唯一的



假设我在智能合约中有以下简单代码:

#[near_bindgen]
pub struct A {
pub var1: AccountId,
pub var2: Balance,
pub my_map: TreeMap<String, (u128, u128, u128)>,
}
#[near_bindgen]
impl A {
#[init]
pub fn init() -> Self {
let _my_map: TreeMap<String, (u128, u128, u128)> = TreeMap::new(b"t");
Self {
//...other fields
my_map: _my_map
}
}
//!!!
// will this work properly for each client at all?
//
pub fn my_method1(&mut self) {
// !! instance variable !!
if !self.my_map.contains_key("some_key") {
self.my_map.insert(&"aaa", &(1, 2, 3));
} else {
// already exists, error!
}
}
}

普通环境中,此Rust代码将使每个人都拥有自己的A实例及其字段的唯一值。对的

我是否正确理解,在NEAR中,每个人(客户端(都将拥有相同的A实例

也就是说,实例变量A.my_map将包含相同的数据,用于可以使用此代码的智能合约的每个客户端?

那么A.var1A.var2呢?

智能合约在调用之间保持状态。在您的示例中,每次有人在您的合同中调用my_method1时,my_map和其他变量都是相同的。

这种状态在部署智能合约的网络中是持久的,这意味着对于testnetmainnet,它将是独立的。

例如,如果您希望管理不同呼叫者的单独状态,请查看以下示例:https://github.com/near-examples/rust-status-message/blob/master/src/lib.rs它使用呼叫者的帐户ID和与其相关的数据之间的映射

相关内容

最新更新