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,解析为一个包含 type
和 result
属性的对象。
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,解析为一个包含 type
和 result
属性的对象。
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,解析为一个包含 type
和 result
属性的对象。
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’ 是表示代币数量的字符串。
- 更多关于金额格式的技术细节请参考 这里 。
- 金额必须非零,除非这是出售报价且资产为 CNY。这表示当前代币所有者免费赠送代币,无论是给任何人还是给
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,解析为一个包含 type
和 result
属性的对象。
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,解析为一个包含 type
和 result
属性的对象。
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;