Skip to Content
👋 嘿,欢迎使用uCNY电子现金! 了解详情
开发文档rootwallet-api.jsNFT相关方法

NFT 辅助方法

acceptNFTOffer

通过扩展接受现有的 NFT(Non-Fungible Token)报价。

请求

必填 - 该函数接受一个类型为 AcceptNFTOfferRequest 的输入参数。

  • 包含 BaseTransactionRequest 的所有字段。
  • NFTokenSellOffer: 标识出售 NFToken 的 NFTokenOffer。
  • NFTokenBuyOffer: 标识购买 NFToken 的 NFTokenOffer。
  • NFTokenBrokerFee: 该字段仅在经纪模式下有效,指定经纪人将两笔报价撮合后保留的费用金额;剩余金额将发送给出售 NFToken 的卖家。
    • 如果指定,费用必须确保在应用转账费用之前,卖家收到的金额至少等于出售报价中指示的金额。
    • 指定格式如下:
      • 一个表示 CNY 数量的 字符串,单位为滴(drops)。
      • 一个 对象,其中 ‘value’ 是表示代币数量的字符串。
      • 更多关于金额格式的技术细节请参考 这里
interface AcceptNFTOfferRequest extends BaseTransactionRequest { // 标识出售 NFToken 的 NFTokenOffer。 NFTokenSellOffer?: string; // 标识购买 NFToken 的 NFTokenOffer。 NFTokenBuyOffer?: string; // 该字段仅在经纪模式下有效,指定经纪人将两笔报价撮合后保留的费用金额;剩余金额将发送给出售 NFToken 的卖家。 // 如果指定,费用必须确保在应用转账费用之前,卖家收到的金额至少等于出售报价中指示的金额。 NFTokenBrokerFee?: Amount; }
type Amount = { currency: string; issuer: string; value: string; } | string;

更多关于金额格式的细节请参考 这里

响应

响应是一个 Promise,解析为一个包含 typeresult 属性的对象。

  • type: "response" | "reject"
  • result:
    • hash: 交易的哈希值。
type: "response"; result: { hash: string; }

type: "reject"; result: undefined;
错误处理

如果发生错误,将抛出错误。

示例
import { acceptNFTOffer } from "@xhbmygod/rootwallet-api"; const payload = { NFTokenSellOffer: "Replace me!", fee: "199", memos: [ { memo: { memoType: "4465736372697074696f6e", memoData: "54657374206d656d6f" } } ] }; acceptNFTOffer(payload).then((response) => { console.log("Transaction Hash: ", response.result?.hash); });

以下是一个 React 网页应用的示例:

import { isInstalled, acceptNFTOffer } from "@xhbmygod/rootwallet-api"; function App() { const handleAcceptOffer = () => { isInstalled().then((response) => { if (response.result.isInstalled) { const payload = { NFTokenSellOffer: "Replace me!", fee: "199", memos: [ { memo: { memoType: "4465736372697074696f6e", memoData: "54657374206d656d6f" } } ] }; acceptNFTOffer(payload).then((response) => { console.log("Transaction Hash: ", response.result?.hash); }); } }); }; return ( <div className="App"> <button onClick={handleAcceptOffer}>Accept NFT Offer</button> </div> ); } export default App;

burnNFT

通过扩展销毁一个 NFT(Non-Fungible Token)。

请求

必填 - 该函数接受一个类型为 BurnNFTRequest 的输入参数。

  • 包含 BaseTransactionRequest 的所有字段。
  • NFTokenID: 要通过此交易移除的 NFToken。
  • owner: 要销毁的 NFToken 的所有者。
    • 仅当所有者与发送此交易的账户不同时使用。
    • 发行者或授权铸造者可以使用此字段销毁启用了 lsfBurnable 标志的 NFT。
interface BurnNFTRequest extends BaseTransactionRequest { // 要通过此交易移除的 NFToken。 NFTokenID: string; // 要销毁的 NFToken 的所有者。仅当所有者与发送此交易的账户不同时使用。 // 发行者或授权铸造者可以使用此字段销毁启用了 `lsfBurnable` 标志的 NFT。 owner?: string; }
响应

响应是一个 Promise,解析为一个包含 typeresult 属性的对象。

  • type: "response" | "reject"
  • result:
    • hash: 交易的哈希值。
type: "response"; result: { hash: string; }

type: "reject"; result: undefined;
错误处理

如果发生错误,将抛出错误。

示例
import { burnNFT } from "@xhbmygod/rootwallet-api"; const payload = { NFTokenID: "Replace me!", fee: "199", memos: [ { memo: { memoType: "4465736372697074696f6e", memoData: "54657374206d656d6f" } } ] }; burnNFT(payload).then((response) => { console.log("Transaction Hash: ", response.result?.hash); });

以下是一个 React 网页应用的示例:

import { isInstalled, burnNFT } from "@xhbmygod/rootwallet-api"; function App() { const handleBurnNFT = () => { isInstalled().then((response) => { if (response.result.isInstalled) { const payload = { NFTokenID: "Replace me!", fee: "199", memos: [ { memo: { memoType: "4465736372697074696f6e", memoData: "54657374206d656d6f" } } ] }; burnNFT(payload).then((response) => { console.log("Transaction Hash: ", response.result?.hash); }); } }); }; return ( <div className="App"> <button onClick={handleBurnNFT}>Burn NFT</button> </div> ); } export default App;

cancelNFTOffer

通过扩展取消现有的 NFT(Non-Fungible Token)报价。

请求

必填 - 该函数接受一个类型为 CancelNFTOfferRequest 的输入参数。

  • 包含 BaseTransactionRequest 的所有字段。
  • NFTokenOffers: 要取消的 NFTokenOffer 对象的 ID 数组。
    • 每个条目必须是不同的 NFTokenOffer 对象 ID;如果数组包含重复条目,则交易无效。
interface CancelNFTOfferRequest extends BaseTransactionRequest { // 要取消的 NFTokenOffer 对象的 ID 数组(不是 NFToken 对象的 ID,而是 NFTokenOffer 对象的 ID)。 // 每个条目必须是不同的 NFTokenOffer 对象 ID;如果数组包含重复条目,则交易无效。 NFTokenOffers: string[]; }
响应

响应是一个 Promise,解析为一个包含 typeresult 属性的对象。

  • type: "response" | "reject"
  • result:
    • hash: 交易的哈希值。
type: "response"; result: { hash: string; }

type: "reject"; result: undefined;
错误处理

如果发生错误,将抛出错误。

示例
import { cancelNFTOffer } from "@xhbmygod/rootwallet-api"; const payload = { NFTokenOffers: ["Replace me!"], fee: "199", memos: [ { memo: { memoType: "4465736372697074696f6e", memoData: "54657374206d656d6f" } } ] }; cancelNFTOffer(payload).then((response) => { console.log("Transaction Hash: ", response.result?.hash); });

以下是一个 React 网页应用的示例:

import { isInstalled, cancelNFTOffer } from "@xhbmygod/rootwallet-api"; function App() { const handleCancelNFTOffer = () => { isInstalled().then((response) => { if (response.result.isInstalled) { const payload = { NFTokenOffers: ["Replace me!"], fee: "199", memos: [ { memo: { memoType: "4465736372697074696f6e", memoData: "54657374206d656d6f" } } ] }; cancelNFTOffer(payload).then((response) => { console.log("Transaction Hash: ", response.result?.hash); }); } }); }; return ( <div className="App"> <button onClick={handleCancelNFTOffer}>Cancel NFT Offer!</button> </div> ); } export default App;

createNFTOffer

通过扩展创建一个新的 NFT(Non-Fungible Token)报价。

请求

必填 - 该函数接受一个类型为 CreateNFTOfferRequest 的输入参数。

  • 包含 BaseTransactionRequest 的所有字段。
  • NFTokenID: 标识报价引用的 NFToken 对象的 NFTokenID。
  • amount: 表示期望或提供的代币金额。
    • 金额必须非零,除非这是出售报价且资产为 CNY。这表示当前代币所有者免费赠送代币,无论是给任何人还是给 Destination 字段标识的账户。
    • 指定格式如下:
      • 一个表示 CNY 数量的 字符串,单位为滴(drops)。
      • 一个 对象,其中 ‘value’ 是表示代币数量的字符串。
      • 更多关于金额格式的技术细节请参考 这里
  • owner: 表示对应 NFToken 的所有者的 AccountID。
    • 如果报价是购买代币,则必须存在此字段,并且必须与 Account 不同(因为购买自己持有的代币的报价没有意义)。
    • 如果报价是出售代币,则不得存在此字段,因为所有者隐式地与 Account 相同(因为出售自己不持有的代币的报价没有意义)。
  • expiration: 表示报价不再有效的时间。该值是自 Ripple Epoch 以来的秒数。
  • destination: 如果存在,表示此报价只能由指定账户接受。
    • 其他账户尝试接受此报价必须失败。
  • flags: 要在交易上设置的标志。
interface CreateNFTOfferRequest extends BaseTransactionRequest { // 标识报价引用的 NFToken 对象的 NFTokenID。 NFTokenID: string; // 表示期望或提供的代币金额。 // 金额必须非零,除非这是出售报价且资产为 CNY。这表示当前代币所有者免费赠送代币,无论是给任何人还是给 `Destination` 字段标识的账户。 amount: Amount; // 表示对应 NFToken 的所有者的 AccountID。 // 如果报价是购买代币,则必须存在此字段,并且必须与 Account 不同(因为购买自己持有的代币的报价没有意义)。 // 如果报价是出售代币,则不得存在此字段,因为所有者隐式地与 Account 相同(因为出售自己不持有的代币的报价没有意义)。 owner?: string; // 表示报价不再有效的时间。该值是自 Ripple Epoch 以来的秒数。 expiration?: number; // 如果存在,表示此报价只能由指定账户接受。其他账户尝试接受此报价必须失败。 destination?: string; flags?: CreateNFTOfferFlags; }
type CreateNFTOfferFlags = { tfSellNFToken?: boolean; } | number;

更多关于标志的细节请参考 这里

type Amount = { currency: string; issuer: string; value: string; } | string;

更多关于金额格式的细节请参考 这里

响应

响应是一个 Promise,解析为一个包含 typeresult 属性的对象。

  • type: "response" | "reject"
  • result:
    • hash: 交易的哈希值。
type: "response"; result: { hash: string; }

type: "reject"; result: undefined;
错误处理

如果发生错误,将抛出错误。

示例
import { createNFTOffer } from "@xhbmygod/rootwallet-api"; const payload = { NFTokenID: "Replace me!", amount: 50000000, // 50 CNY fee: "199", flags: { tfSellNFToken: true // 如果启用,表示报价是出售报价。否则,是购买报价。 }, memos: [ { memo: { memoType: "4465736372697074696f6e", memoData: "54657374206d656d6f" } } ] }; createNFTOffer(payload).then((response) => { console.log("Transaction Hash: ", response.result?.hash); });

以下是一个 React 网页应用的示例:

import { isInstalled, createNFTOffer } from "@xhbmygod/rootwallet-api"; function App() { const handleCreateNFTOffer = () => { isInstalled().then((response) => { if (response.result.isInstalled) { const payload = { NFTokenID: "Replace me!", amount: 50000000, // 50 CNY fee: "199", flags: { tfSellNFToken: true // 如果启用,表示报价是出售报价。否则,是购买报价。 }, memos: [ { memo: { memoType: "4465736372697074696f6e", memoData: "54657374206d656d6f" } } ] }; createNFTOffer(payload).then((response) => { console.log("Transaction Hash: ", response.result?.hash); }); } }); }; return ( <div className="App"> <button onClick={handleCreateNFTOffer}>Create NFT Offer!</button> </div> ); } export default App;

mintNFT

通过扩展铸造一个新的 NFT(Non-Fungible Token)。

请求

必填 - 该函数接受一个类型为 MintNFTRequest 的输入参数。

  • 包含 BaseTransactionRequest 的所有字段。
  • flags: 要在交易上设置的标志。
  • issuer: 表示代币的发行者。
    • 仅当执行交易的账户不是代币的发行者时指定,例如代表另一个账户铸造代币时。
  • NFTokenTaxon: 表示与此代币相关的分类。
    • 分类通常由代币铸造者选择,并且一个分类可以用于多个代币。
    • 实现保留大于或等于 2147483648 (0x80000000) 的分类标识符。
    • 如果不需要此字段,请将其设置为 0。
  • transferFee: 指定发行者对代币二次销售收取的费用,如果允许此类销售。
    • 此字段的有效值在 0 到 50000 之间,允许转账费率在 0.000% 到 50.000% 之间,增量为 0.001%。
    • 如果未设置 tfTransferable 标志,则不得存在此字段。
  • URI: 指向与 NFT 相关的数据和/或元数据的 URI。
    • 此字段不必是 HTTP 或 HTTPS URL;它可以是 IPFS URI、磁力链接、编码为 RFC2379 “data” URL 的即时数据,甚至是不透明的发行者特定编码。
    • URI 不会检查有效性,但字段长度限制为最多 256 字节。
    • 此字段必须为十六进制编码。
interface MintNFTRequest extends BaseTransactionRequest { flags?: MintNFTFlags; // 表示代币的发行者。 // 仅当执行交易的账户不是代币的发行者时指定,例如代表另一个账户铸造代币时。 issuer?: string; // 表示与此代币相关的分类。分类通常由代币铸造者选择,并且一个分类可以用于多个代币。 // 实现保留大于或等于 2147483648 (0x80000000) 的分类标识符。 // 如果不需要此字段,请将其设置为 0。 NFTokenTaxon: number; // 指定发行者对代币二次销售收取的费用,如果允许此类销售。此字段的有效值在 0 到 50000 之间,允许转账费率在 0.000% 到 50.000% 之间,增量为 0.001%。 // 如果未设置 `tfTransferable` 标志,则不得存在此字段。 transferFee?: number; // 指向与 NFT 相关的数据和/或元数据的 URI。此字段不必是 HTTP 或 HTTPS URL;它可以是 IPFS URI、磁力链接、编码为 RFC2379 "data" URL 的即时数据,甚至是不透明的发行者特定编码。 // URI 不会检查有效性,但字段长度限制为最多 256 字节。 // 此字段必须为十六进制编码。 URI?: string; }
type MintNFTFlags = { tfBurnable?: boolean; tfOnlyXRP?: boolean; tfTrustLine?: boolean; tfTransferable?: boolean; } | number;

更多关于标志的细节请参考 这里

响应

响应是一个 Promise,解析为一个包含 typeresult 属性的对象。

  • type: "response" | "reject"
  • result:
    • NFTokenID: NFT 的 ID。
    • hash: 交易的哈希值。
type: "response"; result: { NFTokenID: string; hash: string; }

type: "reject"; result: undefined;
错误处理

如果发生错误,将抛出错误。

示例
import { mintNFT } from "@xhbmygod/rootwallet-api"; const payload = { URI: "4d696e746564207468726f7567682047656d57616c6c657421", flags: { tfOnlyXRP: true, tfTransferable: true }, fee: "199", transferFee: 3000, // 3%, NFTokenTaxon: 0, memos: [ { memo: { memoType: "4465736372697074696f6e", memoData: "54657374206d656d6f" } } ] }; mintNFT(payload).then((response) => { console.log("NFT ID: ", response.result?.NFTokenID); console.log("Transaction Hash: ", response.result?.hash); });

以下是一个 React 网页应用的示例:

import { isInstalled, mintNFT } from "@xhbmygod/rootwallet-api"; function App() { const handleMintNFT = () => { isInstalled().then((response) => { if (response.result.isInstalled) { const payload = { URI: "4d696e746564207468726f7567682047656d57616c6c657421", flags: { tfOnlyXRP: true, tfTransferable: true }, fee: "199", transferFee: 3000, // 3%, NFTokenTaxon: 0, memos: [ { memo: { memoType: "4465736372697074696f6e", memoData: "54657374206d656d6f" } } ] }; mintNFT(payload).then((response) => { console.log("NFT ID: ", response.result?.NFTokenID); console.log("Transaction Hash: ", response.result?.hash); }); } }); }; return ( <div className="App"> <button onClick={handleMintNFT}>Mint NFT!</button> </div> ); } export default App;
最后更新于: