在两个NEAR协议智能合约之间进行通信时。合同B如何访问合同A?
这个问题How to call different contract from its address?涵盖了此问题,但未指定如何确定命名结构。
中的示例#[ext_contract(ext_whitelist)]
pub trait ExtStakingPoolWhitelist {
fn is_whitelisted(&self, staking_pool_account_id: AccountId) -> bool;
}
ext_whitelist上方的合同是否部署为ext_whitelist.near?搜索near explorer似乎没有一个帐户ext_whitelist.near
如何识别具有不同名称空间的另一个合同?
例如,是否可以从任何.near地址中将contract1.contracts.near
标识为#[ext_contract(contract1.contracts)]
,从#[ext_contract(contract1)]
地址中标识contracts.near
?
答案 0 :(得分:0)
我不确定我是否正确理解了这个问题。
但是Rust的宏输入创建了Rust对象(请谅解,如果我在这里使用不正确的术语,请原谅)以与合同进行通信。您可以在多个合同中重复使用同一ext_whitelist
对象。
致电合同时会传递合同的实际地址:
ext_status_message::get_status(
env::signer_account_id(),
&account_id,
0,
SINGLE_CALL_GAS,
),
最后三个参数是
合同地址为account_id
0-我不知道
已分配的气体
这不是一个非常优雅的设计选择,因为它很容易阅读和使用。我建议像在其他区块链中一样创建Contract
实例,而不是将合同地址明确传递给每个合同调用。