首页 > 解决方案 > 将帐户传递给 near-js-api 函数调用

问题描述

我正在尝试near-js-api为我的合同调用以下方法。它以 RsutAccountId作为参数。

序列化帐户并将其传递给合同的正确方法是什么?

此外,调用合约初始化器时是否有任何特殊注意事项?

#[near_bindgen]
impl BurnerPool {

    #[init]
    fn new(token_id: AccountId) -> Self {

        assert!(!env::state_exists(), "Already initialized");

        let pool = Self {
            token_id: token_id,
            total_received: 0,
        };

        return pool;
    }
}

标签: javascriptnearprotocol

解决方案


AccountId是一个字符串。所以只需粘贴一个字符串值。

注意事项:

  1. 最好先验证一个帐户,然后再对它进行任何操作:

    #[inline]
    pub fn assert_account_is_valid(a: &AccountId) {
        assert!(
            env::is_valid_account_id(a.as_bytes()),
            format!("{} account ID is invalid", a)
        );
    }
    
  2. 如果在使用前严格要求合约初始化,如果别人代替你初始化它会发生不好的事情(例如设置所有者地址),那么您可以添加一些保护方法(例如在智能合约中硬编码哈希并做原像)检查new方法)。

  3. 如果一个合约不应该被初始化两次,那么总是!env::state_exists()用调用assert,就像你做的那样。


推荐阅读