【问题标题】:Explanation for near sdk promise关于near sdk promise的解释
【发布时间】:2020-10-10 11:13:11
【问题描述】:

https://docs.rs/near-sdk/0.11.0/near_sdk/struct.Promise.html

cross contract call example

它包含以下承诺

impl CrossContract {
    pub fn deploy_status_message(&self, account_id: String, amount: u64) {
        Promise::new(account_id)
            .create_account()
            .transfer(amount as u128)
            .add_full_access_key(env::signer_account_pk())
            .deploy_contract(
                include_bytes!("../status-message-contract/status_message.wasm").to_vec(),
            );
    }

这是调用 deploy_status_message 的近命令

near call cross_contract deploy_status_message '{"account_id": "status_message", "amount":1000000000000000}' --accountId mainaccount

你能解释一下这个 Promise 链吗:

1) 它需要参数status_message 作为account_idcreate_account 应该创建一个帐户status_message, 但是

near state status_message

报错

account status_message does not exist while viewing

2) 还有什么应该

include_bytes!(...) 

包含,哪个字符串?

3) 这里的传递函数是什么?是从mainaccount取1000000000000000存入status_message账户吗?

4) add_full_access_key 将完全访问密钥添加到哪个帐户? status_message?需要env::signer_account_pk() 作为参数吗?

【问题讨论】:

    标签: nearprotocol


    【解决方案1】:

    1 确实如此。 您可能有错误的 env var,因此最终会查询不同的网络。 UPD:示例已损坏。在这里修复https://github.com/near/near-sdk-rs/pull/193

    2 include_bytes 是一个内置的 rust 宏,与 near-sdk-rs 无关。见https://doc.rust-lang.org/beta/std/macro.include_bytes.html

    3 不知道mainaccount是什么,但是它将1000000000000000从合约账户的当前账户余额转移到status_message账户。请注意,当前帐户余额也包括附加存款。

    4 是的,它添加到status_message 帐户。要添加密钥,您需要指定要添加的密钥,env::signer_account_pk() 会为您提供密钥。

    【讨论】:

    • 我的环境变量是正确的,但仍然接近状态 status_message 给出了错误。此外,智能合约是否会从本地计算机获取 wasm 文件并将其上传到合约,我运行命令的任何目录都不会给出任何错误。
    • 问题是您没有在通话中附加任何令牌,因此在尝试转移令牌时失败。您可以从任何目录运行它的原因是包含是在编译时而不是运行时完成的。
    • @user1566713 抱歉答案不正确。这个例子确实坏了,修复它的公关在这里github.com/near/near-sdk-rs/pull/193
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2021-01-10
    • 2019-11-08
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多