有价NFT转账

NFT transfer with price

我正在为 NFT 使用接近合约的标准。 在示例中,它具有 nft_mint,它使用令牌所有者 ID 和令牌 ID 来铸造令牌。

    #[payable]
    pub fn nft_mint(
        &mut self,
        token_id: TokenId,
        token_owner_id: ValidAccountId,
        token_metadata: TokenMetadata,
    ) -> Token {
        self.tokens.mint(token_id, token_owner_id, Some(token_metadata))
    }
}

然后token owner id可以作为preceder进行nft转账到另一个账户。 https://github.com/near-examples/NFT/blob/master/nft/src/lib.rs

contract.nft_mint(token_id.clone(), accounts(0), sample_token_metadata());

testing_env!(context
        .storage_usage(env::storage_usage())
        .attached_deposit(1)
        .predecessor_account_id(accounts(0))
        .build());
contract.nft_transfer(accounts(1), token_id.clone(), None, None);

我想以nft的购买价格进行nft转账,其中前身是想要购买nft的用户,而不是代币所有者,然后将钱转给代币所有者。
我怎样才能做到这一点?我会使用 internal_transfer 还是在 nft_mint 函数中设置价格,并将代币直接铸造到买家账户 ID?

如果我对问题的理解正确,您想将 nft_mint 与某种支付行为结合起来,支付给某些“NFT 令牌类型”的原始创建者吗?

您可以在此处查看 NFT 市场回购:https://github.com/near-apps/nft-market

这个存储库使用一个单独的市场账户和合约来允许 NFT 所有者出售 NFT。我想比你要找的多一点。

还有一种变体使用“惰性铸币”仅在用户从市场合约购买 NFT 时铸币:https://github.com/near-apps/gnr8/

同样,这比我想的要多一点,因为支付和购买是在单独的合约中进行的,而 NFT 转移和铸造是在 NFT 合约中进行的,这是从市场合约中调用的。

如果你正在寻找可以添加自己的可支付 NFT 方法的东西,你可以从这个开始: https://github.com/near-apps/nft-series/

这允许您定义 NFT 类型,并且您可以通过 nft_mint_type 方法向用户收取铸造该类型的 1/N 的费用,并且不要求该类型的所有者是铸造者。

仅供参考这些方法是非标准的,但有效。

如果您需要有关上述示例的任何帮助,请随时直接在 Discord 上联系我们。