有没有办法使用 ext_contract 从 NEAR 的外部合约调用 NonFungibleTokenCore?
Is there a way to call NonFungibleTokenCore from an external contract in NEAR using ext_contract?
我正在使用在依赖特征 NonFungibleTokenCore
上调用的函数,我想使用 ext_contract
的便利包装器来简化交叉合约调用。
这是我添加它的尝试:
#[ext_contract(ext_non_fungible_token)]
trait NFTCore: NonFungibleTokenCore {}
我使用 rust-analyzer
完成的代码没有提供任何完成。当我构建它时出现此错误:
error[E0425]: cannot find function `nft_transfer` in module `ext_non_fungible_token`
--> sputnik-nft-staking/src/lib.rs:151:33
|
151 | ext_non_fungible_token::nft_transfer(sender_id.clone(), token_id.clone(), 0, None,
| ^^^^^^^^^^^^ not found in `ext_non_fungible_token`
你知道如何正确使用宏吗?
不幸的是,ext_contract
proc 宏只知道该块内的代码,不能根据此处 NonFungibleTokenCore
的 Supertrait 定义的方法生成代码 https://github.com/roshkins/sputnik-dao-contract/blob/bc8398257cdbee248fdd6301af0dc41a9b7c5236/sputnik-nft-staking/src/lib.rs#L18。
目前,您必须重新定义界面,但我会四处询问是否有更简洁的方法来执行此操作。
这样的事情可能会解决您眼前的问题:
#[ext_contract(ext_non_fungible_token)]
trait NonFungibleTokenCore {
fn nft_transfer(
&mut self,
receiver_id: AccountId,
token_id: TokenId,
approval_id: Option<u64>,
memo: Option<String>,
);
fn nft_transfer_call(
&mut self,
receiver_id: AccountId,
token_id: TokenId,
approval_id: Option<u64>,
memo: Option<String>,
msg: String,
) -> PromiseOrValue<bool>;
fn nft_token(&self, token_id: TokenId) -> Option<Token>;
}
我正在使用在依赖特征 NonFungibleTokenCore
上调用的函数,我想使用 ext_contract
的便利包装器来简化交叉合约调用。
这是我添加它的尝试:
#[ext_contract(ext_non_fungible_token)]
trait NFTCore: NonFungibleTokenCore {}
我使用 rust-analyzer
完成的代码没有提供任何完成。当我构建它时出现此错误:
error[E0425]: cannot find function `nft_transfer` in module `ext_non_fungible_token`
--> sputnik-nft-staking/src/lib.rs:151:33
|
151 | ext_non_fungible_token::nft_transfer(sender_id.clone(), token_id.clone(), 0, None,
| ^^^^^^^^^^^^ not found in `ext_non_fungible_token`
你知道如何正确使用宏吗?
不幸的是,ext_contract
proc 宏只知道该块内的代码,不能根据此处 NonFungibleTokenCore
的 Supertrait 定义的方法生成代码 https://github.com/roshkins/sputnik-dao-contract/blob/bc8398257cdbee248fdd6301af0dc41a9b7c5236/sputnik-nft-staking/src/lib.rs#L18。
目前,您必须重新定义界面,但我会四处询问是否有更简洁的方法来执行此操作。
这样的事情可能会解决您眼前的问题:
#[ext_contract(ext_non_fungible_token)]
trait NonFungibleTokenCore {
fn nft_transfer(
&mut self,
receiver_id: AccountId,
token_id: TokenId,
approval_id: Option<u64>,
memo: Option<String>,
);
fn nft_transfer_call(
&mut self,
receiver_id: AccountId,
token_id: TokenId,
approval_id: Option<u64>,
memo: Option<String>,
msg: String,
) -> PromiseOrValue<bool>;
fn nft_token(&self, token_id: TokenId) -> Option<Token>;
}