如何确定两个NEAR协议智能合约之间的交叉通信命名结构?

时间:2020-10-04 21:24:34

标签: rust blockchain nearprotocol

在两个NEAR协议智能合约之间进行通信时。合同B如何访问合同A?

这个问题How to call different contract from its address?涵盖了此问题,但未指定如何确定命名结构。

使用https://github.com/near/core-contracts/blob/cd221798a77d646d5f1200910d45326d11951732/lockup/src/lib.rs#L64-L67

中的示例
#[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

1 个答案:

答案 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实例,而不是将合同地址明确传递给每个合同调用。