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

标签 rust blockchain nearprotocol

在两个 NEAR 协议(protocol)智能合约之间进行通信时。合约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
如何识别具有不同命名空间的另一个合约?
例如 contract1.contracts.near被识别为 #[ext_contract(contract1.contracts)]来自任何 .near 地址和 #[ext_contract(contract1)]来自 contracts.near地址?

最佳答案

我不确定我是否正确理解了这个问题。
但是 Rust 宏输入创建了 Rust 对象(如果我在这里使用了不正确的术语,请原谅)来与合约进行通信。您可以重复使用相同的 ext_whitelist跨多个合约的对象。
调用合约时会传递合约的实际地址:


            ext_status_message::get_status(
                env::signer_account_id(),
                &account_id,
                0,
                SINGLE_CALL_GAS,
            ),
最后三个参数是
  • 合约地址为 account_id
  • 0 - 我不知道
  • 分配气体

  • 这不是非常优雅的设计选择,因为阅读和使用非常困惑。我建议创建 Contract与其他区 block 链中的实例一样,而不是将合约地址显式传递给每个合约调用。

    关于rust - 两个 NEAR 协议(protocol)智能合约之间的交叉通信命名结构是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64200042/

    相关文章:

    hyperledger - 锯齿交易有效负载解码

    x509certificate - HyperLedger Fabric 的 CA、注册、注册

    blockchain - 如何使用特定私钥创建帐户?

    blockchain - 使用 RPC 的 getValidator(近)

    rust - `!` 在 Rust 中作为返回类型有什么用?

    hyperledger-fabric - super 账本结构调用.js "Error: 2 UNKNOWN: access denied: channel [mychannel] creator org [Org1MSP]"

    error-handling - 为什么 Rust 在使用 '?' 时会在 Error 类型之间隐式转换,但在返回值中却不会?

    nearprotocol - NEAR 上公钥的正确长度和格式是什么

    rust - 是否不可能对使用智能指针(如 Box、Rc 或 Arc)的递归数据类型进行嵌套匹配?

    vector - 借用改变 Vector 的类型