如何通过合约调用nft mint?

How to call the nft mint by the contract?

我想调用 mint 函数:

#[payable]
    pub fn buy_nft(&mut self, token_id: String) {
             self.tokens.mint(
                  token_id,
                  new_owner_id,
                  Some(token_metadata),
        )
}

但是前任需要owner_id,我的owner_id是部署合约的合约id
Link

assert_eq!(env::predecessor_account_id(), self.owner_id, "Unauthorized");

当我通过 say charlie 调用这个函数时,它给出了 Uauthorized 错误:

call!(
    charlie,
    contract.buy_nft("123".to_owned()),
    deposit = to_yocto("10")
).assert_success();

错误:

Smart contract panicked: panicked at 'assertion failed: `(left == right)`
      left: `"charlie"`,
     right: `"contractname"`: Unauthorized'

如何通过 charlie 按合同调用 self.token_mint?

目前的答案是从标准实现中复制 mint 函数并根据需要进行自定义。

更好的界面会在以后的更新中出现。