在两个 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,
),
最后三个参数是这不是非常优雅的设计选择,因为阅读和使用非常困惑。我建议创建
Contract
与其他区 block 链中的实例一样,而不是将合约地址显式传递给每个合约调用。
关于rust - 两个 NEAR 协议(protocol)智能合约之间的交叉通信命名结构是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64200042/