diff --git a/assets/js/apitool-methods-ws.js b/assets/js/apitool-methods-ws.js
index 4bf0aa7c36..3e5fa4bb04 100644
--- a/assets/js/apitool-methods-ws.js
+++ b/assets/js/apitool-methods-ws.js
@@ -50,6 +50,17 @@ Request('account_lines', {
}
})
+Request('account_nfts', {
+ description: "Retrieves NFTs owned by an account.",
+ link: "account_nfts.html",
+ status: "not_enabled",
+ body: {
+ "command": "account_nfts",
+ "account": "rsuHaTvJh1bDmDoxX9QcKP7HEBSBt4XsHx",
+ "ledger_index": "validated"
+ }
+})
+
Request('account_objects', {
description: "Returns the raw ledger format for all objects owned by an account.",
link: "account_objects.html",
@@ -403,6 +414,28 @@ Request('deposit_authorized', {
}
})
+Request('nft_buy_offers', {
+ description: "Retrieves offers to buy a given NFT.",
+ link: "nft_buy_offers.html",
+ status: "not_enabled",
+ body: {
+ "command": "nft_buy_offers",
+ "nft_id": "00090000D0B007439B080E9B05BF62403911301A7B1F0CFAA048C0A200000007",
+ "ledger_index": "validated"
+ }
+})
+
+Request('nft_sell_offers', {
+ description: "Retrieves offers to sell a given NFT.",
+ link: "nft_sell_offers.html",
+ status: "not_enabled",
+ body: {
+ "command": "nft_sell_offers",
+ "nft_id": "00090000D0B007439B080E9B05BF62403911301A7B1F0CFAA048C0A200000007",
+ "ledger_index": "validated"
+ }
+})
+
Request('path_find', {
description: "Searches for a path along which a payment can possibly be made, and periodically sends updates when the path changes over time.",
link: "path_find.html",
diff --git a/assets/js/apitool-websocket.js b/assets/js/apitool-websocket.js
index 279a040fed..33d035a96d 100644
--- a/assets/js/apitool-websocket.js
+++ b/assets/js/apitool-websocket.js
@@ -51,7 +51,11 @@ function generate_table_of_contents() {
if (req.slug === null) {
commandlist.append("
"+req.name+"");
} else {
- commandlist.append(""+req.name+"");
+ let status_label = ""
+ if (req.status == "not_enabled") {
+ status_label = ' '
+ }
+ commandlist.append(""+status_label+req.name+"");
}
});
}
@@ -284,7 +288,7 @@ const update_curl = function(event) {
$("#curl-box-1").text(curl_syntax)
}
-function load_from_permalink(params) {
+function server_from_params(params) {
const server = params.get("server")
if (server) {
const server_checkbox = $("input[value='"+server+"']")
@@ -293,7 +297,9 @@ function load_from_permalink(params) {
// relies on connect_socket() being run shortly thereafter
}
}
+}
+function req_from_params(params) {
let req_body = params.get("req")
let cmd_name = ""
if (req_body) {
@@ -336,10 +342,14 @@ $(document).ready(function() {
// default instead.
select_request()
}
- } else if (search_params.has("server") || search_params.has("req")) {
- load_from_permalink(search_params)
+ } else if (search_params.has("req")) {
+ req_from_params(search_params)
} else {
- select_request();
+ select_request()
+ }
+
+ if (search_params.has("server")) {
+ server_from_params(search_params)
}
connect_socket()
diff --git a/content/_code-samples/trade-in-the-decentralized-exchange/README.md b/content/_code-samples/trade-in-the-decentralized-exchange/README.md
new file mode 100644
index 0000000000..9212ebd562
--- /dev/null
+++ b/content/_code-samples/trade-in-the-decentralized-exchange/README.md
@@ -0,0 +1,5 @@
+# Trade in the Decentralized Exchange
+
+Look up Offers in the Decentralized Exchange and buy a fungible token by spending XRP.
+
+Examples from the interactive [Trade in the Decentralized Exchange tutorial](https://xrpl.org/trade-in-the-decentralized-exchange.html).
diff --git a/content/_snippets/nfts-disclaimer.md b/content/_snippets/nfts-disclaimer.md
index 5d7e4e36fe..3d803b5352 100644
--- a/content/_snippets/nfts-disclaimer.md
+++ b/content/_snippets/nfts-disclaimer.md
@@ -1 +1 @@
-_The XLS-20 standard for NFTs :not_enabled: has a preliminary implementation that can be used in test networks, but is not yet available as an [amendment](amendments.html) to the XRP Ledger protocol. An amendment may be included in a future XRP Ledger release._
+_Non-fungible token functionality is part of the [NonFungibleTokensV1 amendment][] :not_enabled: to the XRP Ledger protocol. You can use these functions on the [NFT-Devnet](parallel-networks.html) now, but they are not yet available on the production Mainnet._
diff --git a/content/_snippets/rippled-api-links.md b/content/_snippets/rippled-api-links.md
index 132529dfcb..acb4bee676 100644
--- a/content/_snippets/rippled-api-links.md
+++ b/content/_snippets/rippled-api-links.md
@@ -192,6 +192,7 @@
"DepositPreauth",
"EnforceInvariants",
"Escrow",
+ "ExpandedSignerList",
"FeeEscalation",
"fix1201",
"fix1368",
@@ -207,6 +208,7 @@
"fix1623",
"fixCheckThreading",
"fixMasterKeyAsRegularKey",
+ "fixNFTokenDirV1",
"fixPayChanRecipientOwnerDir",
"fixQualityUpperBound",
"fixTakerDryOfferRemoval",
@@ -216,6 +218,7 @@
"MultiSign",
"MultiSignReserve",
"NegativeUNL",
+ "NonFungibleTokensV1",
"OwnerPaysFee",
"PayChan",
"RequireFullyCanonicalSig",
diff --git a/content/concepts/consensus-network/amendments/known-amendments.ja.md b/content/concepts/consensus-network/amendments/known-amendments.ja.md
index f37da0da8b..c8d90ad795 100644
--- a/content/concepts/consensus-network/amendments/known-amendments.ja.md
+++ b/content/concepts/consensus-network/amendments/known-amendments.ja.md
@@ -14,9 +14,12 @@ labels:
| 名前 | 導入済み | ステータス |
|:--------------------------------|:-----------|:------------------------------------|
-| [CheckCashMakesTrustLine][] | v1.8.0 | [開発中: 未定]( "BADGE_LIGHTGREY") |
| [CryptoConditionsSuite][] | 未定 | [開発中: 未定]( "BADGE_LIGHTGREY") |
| [OwnerPaysFee][] | 未定 | [開発中: 未定]( "BADGE_LIGHTGREY") |
+| [ExpandedSignerList][] | v1.9.1 | [投票中: 未定](https://xrpl.org/blog/2022/rippled-1.9.1.html "BADGE_80d0e0") |
+| [fixNFTokenDirV1][] | v1.9.1 | [投票中: 未定](https://xrpl.org/blog/2022/rippled-1.9.1.html "BADGE_80d0e0") |
+| [NonFungibleTokensV1][] | v1.9.0 | [投票中: 未定](https://xrpl.org/blog/2022/rippled-1.9.0.html "BADGE_80d0e0") |
+| [CheckCashMakesTrustLine][] | v1.8.0 | [投票中: 未定](https://xrpl.org/blog/2021/rippled-1.8.1.html "BADGE_80d0e0") |
| [NegativeUNL][] | v1.7.3 | [有効: 2021/11/21](https://livenet.xrpl.org/transactions/1500FADB73E7148191216C53040990E829C7110788B26E7F3246CB3660769EBA "BADGE_GREEN") |
| [fixRmSmallIncreasedQOffers][] | v1.7.2 | [有効: 2021/11/18](https://livenet.xrpl.org/transactions/1F37BA0502576DD7B5464F47641FA95DEB55735EC2663269DFD47810505478E7 "BADGE_GREEN") |
| [TicketBatch][] | v1.7.0 | [有効: 2021/11/18](https://livenet.xrpl.org/transactions/111B32EDADDE916206E7315FBEE2DA1521B229F207F65DD314829F13C8D9CA36 "BADGE_GREEN") |
@@ -186,6 +189,21 @@ This amendment does not change the fact that you cannot force anyone to hold tok
XRP Ledger内のEscrowにXRPの「停止された支払い」機能を提供します。これには[Interledger Protocol Crypto-Conditions](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02)のサポートが含まれます。停止された支払い用のレジャーオブジェクトタイプと、停止された支払いを作成、実行、取り消すためのトランザクションタイプを新規作成します。
+
+## ExpandedSignerList
+[ExpandedSignerList]: #expandedsignerlist
+
+| Amendment ID | ステータス |
+|:-----------------------------------------------------------------|:---------|
+| B2A4DB846F0891BF2C76AB2F2ACC8F5B4EC64437135C6E56F3F859DE5FFD5856 | 投票中 |
+
+
+This amendment expands the maximum signer list size and allows each signer to have optional data associated with it. The additional data can be used to identify the signer, which may be useful for smart contracts, or for identifying who controls a key in a large organization: for example, you could store an IPv6 address or the identifier of a Hardware Security Module (HSM).
+
+Without this amendment, the maximum signer list size is 8 signers, and each signer has exactly two fields, `Account` and `SignerWeight`.
+
+With this amendment, the maximum [SignerList object][] size is 32 entries. Additionally, each `SignerEntry` object can contain an optional 256-bit `WalletLocator` field containing arbitrary data. This amendment changes the [SignerListSet transaction][] accordingly.
+
## FeeEscalation
[FeeEscalation]: #feeescalation
@@ -402,6 +420,19 @@ Checksトランザクションがアカウントのメタデータに影響を
この修正を有効にした場合、SetRegularKeyトランザクションはレギュラーキーがマスターキーに一致するよう設定できないため、そのようなトランザクションでは、トランザクションコードが`temBAD_REGKEY`になります。また、この修正により、署名検証コードが変更されるため、レギュラーキーがマスターキーに一致するよう_すでに_設定しているアカウントは、そのキーペアを使用して正常にトランザクションを送信できます。
+
+## fixNFTokenDirV1
+[fixNFTokenDirV1]: #fixnftokendirv1
+
+| Amendment ID | ステータス |
+|:-----------------------------------------------------------------|:---------|
+| 0285B7E5E08E1A8E4C15636F0591D87F73CB6A7B6452A932AD72BBC8E5D1CBE3 | 投票中 |
+
+
+This amendment fixes an off-by-one error that occurred in some corner cases when determining which `NFTokenPage` an `NFToken` object belongs on. It also adjusts the constraints of `NFTokenPage` invariant checks, so that certain error cases fail with a suitable error code such as `tecNO_SUITABLE_TOKEN_PAGE` instead of failing with a `tecINVARIANT_FAILED` error code.
+
+This amendment has no effect unless the [NonFungibleTokensV1][] amendment is enabled. To avoid bugs, the fixNFTokenDirV1 amendment should be enabled before the NonFungibleTokensV1 amendment.
+
## fixPayChanRecipientOwnerDir
[fixPayChanRecipientOwnerDir]: #fixpaychanrecipientownerdir
@@ -445,7 +476,7 @@ With this amendment, payments and trades can remove these types of Offers the sa
## fixSTAmountCanonicalize
[fixSTAmountCanonicalize]: #fixstamountcanonicalize
-| Amendment ID | ステータス |
+| Amendment ID | ステータス |
|:-----------------------------------------------------------------|:----------|
| 452F5906C46D46F407883344BFDD90E672B672C5E9943DB4891E3A34FEEEB9DB | 有効 |
@@ -572,7 +603,37 @@ XRP Ledgerアカウントが[マルチ署名](multi-signing.html) SignerListを
| B4E4F5D2D6FB84DF7399960A732309C9FD530EAE5941838160042833625A6076 | 有効 |
-Implements a "Negative UNL" system, where the network can track which validators are temporarily offline and disregard those validators for quorum calculations. This can improve the liveness of the network during periods of network instability.
+Implements a "Negative UNL" system, where the network can track which validators are temporarily offline and disregard those validators for quorum calculations. This can improve the ability of the network to make progress during periods of network instability.
+
+
+## NonFungibleTokensV1
+[NonFungibleTokensV1]: #nonfungibletokensv1
+
+| Amendment ID | ステータス |
+|:-----------------------------------------------------------------|:---------|
+| 3C43D9A973AA4443EF3FC38E42DD306160FBFFDAB901CD8BAA15D09F2597EB87 | 開発中 |
+
+
+Adds native support for non-fungible tokens. Standards Draft: [XLS-20d](https://github.com/XRPLF/XRPL-Standards/discussions/46).
+
+**Warning:** There is a known issue with this amendment that can cause `tecINVARIANT_FAILED` errors to appear in the ledger. The [fixNFTokenDirV1][] amendment fixes these issues and should be enabled before the NonFungibleTokensV1 amendment to avoid problems.
+
+This amendment adds 5 new transaction types:
+
+- [NFTokenAcceptOffer][]
+- [NFTokenBurn][]
+- [NFTokenCancelOffer][]
+- [NFTokenCreateOffer][]
+- [NFTokenMint][]
+
+It also adds 2 new ledger object types:
+
+- [NFTokenOffer object][]
+- [NFTokenPage object][]
+
+Additionally, it modifies the [AccountRoot object][] type to add 3 new optional fields: `MintedNFTokens`, `BurnedNFTokens`, and `NFTokenMinter`.
+
+It also modifies the [AccountSet transaction][] type to allow you to set the `NFTokenMinter` field.
## OwnerPaysFee
diff --git a/content/concepts/consensus-network/amendments/known-amendments.md b/content/concepts/consensus-network/amendments/known-amendments.md
index 2496c246e3..1b76499e12 100644
--- a/content/concepts/consensus-network/amendments/known-amendments.md
+++ b/content/concepts/consensus-network/amendments/known-amendments.md
@@ -14,9 +14,12 @@ The following is a comprehensive list of all known [amendments](amendments.html)
| Name | Introduced | Status |
|:--------------------------------|:-----------|:------------------------------|
-| [CheckCashMakesTrustLine][] | v1.8.0 | [In Development: TBD]( "BADGE_LIGHTGREY") |
| [CryptoConditionsSuite][] | TBD | [In Development: TBD]( "BADGE_LIGHTGREY") |
| [OwnerPaysFee][] | TBD | [In Development: TBD]( "BADGE_LIGHTGREY") |
+| [ExpandedSignerList][] | v1.9.1 | [Open for Voting: TBD](https://xrpl.org/blog/2022/rippled-1.9.1.html "BADGE_80d0e0") |
+| [fixNFTokenDirV1][] | v1.9.1 | [Open for Voting: TBD](https://xrpl.org/blog/2022/rippled-1.9.1.html "BADGE_80d0e0") |
+| [NonFungibleTokensV1][] | v1.9.0 | [Open for Voting: TBD](https://xrpl.org/blog/2022/rippled-1.9.0.html "BADGE_80d0e0") |
+| [CheckCashMakesTrustLine][] | v1.8.0 | [Open for Voting: TBD](https://xrpl.org/blog/2021/rippled-1.8.1.html "BADGE_80d0e0") |
| [NegativeUNL][] | v1.7.3 | [Enabled: 2021-11-21](https://livenet.xrpl.org/transactions/1500FADB73E7148191216C53040990E829C7110788B26E7F3246CB3660769EBA "BADGE_GREEN") |
| [fixRmSmallIncreasedQOffers][] | v1.7.2 | [Enabled: 2021-11-18](https://livenet.xrpl.org/transactions/1F37BA0502576DD7B5464F47641FA95DEB55735EC2663269DFD47810505478E7 "BADGE_GREEN") |
| [TicketBatch][] | v1.7.0 | [Enabled: 2021-11-18](https://livenet.xrpl.org/transactions/111B32EDADDE916206E7315FBEE2DA1521B229F207F65DD314829F13C8D9CA36 "BADGE_GREEN") |
@@ -221,6 +224,23 @@ Replaces the [SusPay](#suspay) and [CryptoConditions](#cryptoconditions) amendme
Provides "suspended payments" for XRP for escrow within the XRP Ledger, including support for [Interledger Protocol Crypto-Conditions](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02). Creates a new ledger object type for suspended payments and new transaction types to create, execute, and cancel suspended payments.
+## ExpandedSignerList
+[ExpandedSignerList]: #expandedsignerlist
+
+| Amendment | ExpandedSignerList |
+|:----------|:-----------|
+| Amendment ID | B2A4DB846F0891BF2C76AB2F2ACC8F5B4EC64437135C6E56F3F859DE5FFD5856 |
+| Status | Open for Voting |
+| Default Vote (Latest stable release) | No |
+| Pre-amendment functionality retired? | No |
+
+This amendment expands the maximum signer list size and allows each signer to have optional data associated with it. The additional data can be used to identify the signer, which may be useful for smart contracts, or for identifying who controls a key in a large organization: for example, you could store an IPv6 address or the identifier of a Hardware Security Module (HSM).
+
+Without this amendment, the maximum signer list size is 8 entries, and each entry has exactly two fields, `Account` and `SignerWeight`.
+
+With this amendment, the maximum [SignerList object][] size is 32 entries. Additionally, each `SignerEntry` object can contain an optional 256-bit (32-byte) `WalletLocator` field containing arbitrary data. This amendment changes the [SignerListSet transaction][] accordingly.
+
+
## FeeEscalation
[FeeEscalation]: #feeescalation
@@ -499,6 +519,21 @@ Without this fix, a user can unintentionally "black hole" their account by setti
With this amendment enabled, a SetRegularKey transaction cannot set the regular key to match the master key; such a transaction results in the transaction code `temBAD_REGKEY`. Additionally, this amendment changes the signature verification code so that accounts which _already_ have their regular key set to match their master key can send transactions successfully using the key pair.
+## fixNFTokenDirV1
+[fixNFTokenDirV1]: #fixnftokendirv1
+
+| Amendment | fixNFTokenDirV1 |
+|:----------|:-----------|
+| Amendment ID | 0285B7E5E08E1A8E4C15636F0591D87F73CB6A7B6452A932AD72BBC8E5D1CBE3 |
+| Status | Open for Voting |
+| Default Vote (Latest stable release) | No |
+| Pre-amendment functionality retired? | No |
+
+This amendment fixes an off-by-one error that occurred in some corner cases when determining which `NFTokenPage` an `NFToken` object belongs on. It also adjusts the constraints of `NFTokenPage` invariant checks, so that certain error cases fail with a suitable error code such as `tecNO_SUITABLE_TOKEN_PAGE` instead of failing with a `tecINVARIANT_FAILED` error code.
+
+This amendment has no effect unless the [NonFungibleTokensV1][] amendment is enabled. To avoid bugs, the fixNFTokenDirV1 amendment should be enabled before the NonFungibleTokensV1 amendment.
+
+
## fixPayChanRecipientOwnerDir
[fixPayChanRecipientOwnerDir]: #fixpaychanrecipientownerdir
@@ -706,6 +741,38 @@ With this amendment enabled, the owner reserve for a new SignerList is 5 XRP, re
Implements a "Negative UNL" system, where the network can track which validators are temporarily offline and disregard those validators for quorum calculations. This can improve the ability of the network to make progress during periods of network instability.
+## NonFungibleTokensV1
+[NonFungibleTokensV1]: #nonfungibletokensv1
+
+| Amendment | NonFungibleTokensV1 |
+|:----------|:-----------|
+| Amendment ID | 3C43D9A973AA4443EF3FC38E42DD306160FBFFDAB901CD8BAA15D09F2597EB87 |
+| Status | Open for Voting |
+| Default Vote (Latest stable release) | No |
+| Pre-amendment functionality retired? | No |
+
+Adds native support for non-fungible tokens. Standards Draft: [XLS-20d](https://github.com/XRPLF/XRPL-Standards/discussions/46).
+
+**Warning:** There is a known issue with this amendment that can cause `tecINVARIANT_FAILED` errors to appear in the ledger. The [fixNFTokenDirV1][] amendment fixes these issues and should be enabled before the NonFungibleTokensV1 amendment to avoid problems.
+
+This amendment adds 5 new transaction types:
+
+- [NFTokenAcceptOffer][]
+- [NFTokenBurn][]
+- [NFTokenCancelOffer][]
+- [NFTokenCreateOffer][]
+- [NFTokenMint][]
+
+It also adds 2 new ledger object types:
+
+- [NFTokenOffer object][]
+- [NFTokenPage object][]
+
+Additionally, it modifies the [AccountRoot object][] type to add 3 new optional fields: `MintedNFTokens`, `BurnedNFTokens`, and `NFTokenMinter`.
+
+It also modifies the [AccountSet transaction][] type to allow you to set the `NFTokenMinter` field.
+
+
## OwnerPaysFee
[OwnerPaysFee]: #ownerpaysfee
@@ -857,6 +924,18 @@ Allows pre-authorization of accounting relationships (zero-balance trust lines)
With this amendment enabled, a `TrustSet` transaction with [`tfSetfAuth` enabled](trustset.html#trustset-flags) can create a new [`RippleState` ledger object](ripplestate.html) even if it keeps all the other values of the `RippleState` node in their default state. The new `RippleState` node has the [`lsfLowAuth` or `lsfHighAuth` flag](ripplestate.html#ripplestate-flags) enabled, depending on whether the sender of the transaction is considered the low node or the high node. The sender of the transaction must have already enabled [`lsfRequireAuth`](accountroot.html#accountroot-flags) by sending an [AccountSet transaction](accountset.html) with the [`asfRequireAuth` flag enabled](accountset.html#accountset-flags).
+## NonFungibleTokensV1
+
+| Amendment | NFTSuport |
+|:----------|:-----------|
+| Amendment ID | 3C43D9A973AA4443EF3FC38E42DD306160FBFFDAB901CD8BAA15D09F2597EB87 |
+| Status | In Development |
+| Default Vote (Latest stable release) | No |
+| Pre-amendment functionality retired? | No |
+
+Introduces native support for Non-fungible tokens. The `NFTokenMint` transaction creates `NFToken` objects that are recorded on `NFTokenPage` objects. The `NFTokenCreateOffer` transaction creates `NFTokenOffer` objects that are available for transfer to another account via the `NFTokenAcceptOffer` transaction. Token owners have the option of destroying their `NFToken` objects with the `NFTokenBurn` transaction. See the full specification at [0020 XLS-20d Non-Fungible Token Support](https://github.com/XRPLF/XRPL-Standards/issues/16).
+
+
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
diff --git a/content/concepts/payment-system-basics/accounts/accounts.ja.md b/content/concepts/payment-system-basics/accounts/accounts.ja.md
index 087f6c44a5..7854e4af52 100644
--- a/content/concepts/payment-system-basics/accounts/accounts.ja.md
+++ b/content/concepts/payment-system-basics/accounts/accounts.ja.md
@@ -121,7 +121,7 @@ XRP Ledgerのアドレスは、[base58][]_形式のディクショナリ_`rpshna
[](img/address-encoding.ja.png)
-公開鍵からXRP Ledgerアドレスを計算する式は次のとおりです。コード例全体については、[`encode_address.js`](https://github.com/XRPLF/xrpl-dev-portal/blob/master/content/_code-samples/address_encoding/encode_address.js)を参照してください。パスフレーズまたはシード値から公開鍵を導出するプロセスについては、[鍵の導出](cryptographic-keys.html#鍵導出)を参照してください。
+公開鍵からXRP Ledgerアドレスを計算する式は次のとおりです。コード例全体については、[`encode_address.js`](https://github.com/XRPLF/xrpl-dev-portal/blob/master/content/_code-samples/address_encoding/js/encode_address.js)を参照してください。パスフレーズまたはシード値から公開鍵を導出するプロセスについては、[鍵の導出](cryptographic-keys.html#鍵導出)を参照してください。
1. 次の必須アルゴリズムをインポートします。SHA-256、RIPEMD160、base58。base58のディクショナリーを設定します。
diff --git a/content/concepts/payment-system-basics/accounts/accounts.md b/content/concepts/payment-system-basics/accounts/accounts.md
index 497b319c4a..d23cbb1677 100644
--- a/content/concepts/payment-system-basics/accounts/accounts.md
+++ b/content/concepts/payment-system-basics/accounts/accounts.md
@@ -121,7 +121,7 @@ The following diagram shows the relationship between keys and addresses:
{{ include_svg("img/address-encoding.svg", "Master Public Key + Type Prefix → Account ID + Checksum → Address") }}
-The formula for calculating an XRP Ledger address from a public key is as follows. For the complete example code, see [`encode_address.js`](https://github.com/XRPLF/xrpl-dev-portal/blob/master/content/_code-samples/address_encoding/encode_address.js). For the process of deriving a public key from a passphrase or seed value, see [Key Derivation](cryptographic-keys.html#key-derivation).
+The formula for calculating an XRP Ledger address from a public key is as follows. For the complete example code, see [`encode_address.js`](https://github.com/XRPLF/xrpl-dev-portal/blob/master/content/_code-samples/address_encoding/js/encode_address.js). For the process of deriving a public key from a passphrase or seed value, see [Key Derivation](cryptographic-keys.html#key-derivation).
1. Import required algorithms: SHA-256, RIPEMD160, and base58. Set the dictionary for base58.
diff --git a/content/concepts/payment-system-basics/accounts/cryptographic-keys.ja.md b/content/concepts/payment-system-basics/accounts/cryptographic-keys.ja.md
index f860c29c90..bd9569ec4b 100644
--- a/content/concepts/payment-system-basics/accounts/cryptographic-keys.ja.md
+++ b/content/concepts/payment-system-basics/accounts/cryptographic-keys.ja.md
@@ -142,7 +142,7 @@ XRP Ledgerでは、サポートされているさまざまなタイプのキー
- [シード定義](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/Seed.h)
- [汎用キー & Ed25519鍵導出](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp)
- [secp256k1鍵導出](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp)
-- Python 3: [このリポジトリのコードサンプルセクション]({{target.github_forkurl}}/blob/{{target.github_branch}}/content/_code-samples/key-derivation/key_derivation.py)。
+- Python 3: [このリポジトリのコードサンプルセクション]({{target.github_forkurl}}/blob/{{target.github_branch}}/content/_code-samples/key-derivation/py/key_derivation.py)。
- JavaScript: [`ripple-keypairs`](https://github.com/ripple/ripple-keypairs/)パッケージ。
### Ed25519鍵導出
diff --git a/content/concepts/payment-system-basics/accounts/cryptographic-keys.md b/content/concepts/payment-system-basics/accounts/cryptographic-keys.md
index 2e7dacee97..2ac11bd449 100644
--- a/content/concepts/payment-system-basics/accounts/cryptographic-keys.md
+++ b/content/concepts/payment-system-basics/accounts/cryptographic-keys.md
@@ -154,7 +154,7 @@ The key derivation processes described here are implemented in multiple places a
- [Seed definition](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/Seed.h)
- [General & Ed25519 key derivation](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp)
- [secp256k1 key derivation](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/impl/SecretKey.cpp)
-- In Python 3 in [this repository's code samples section]({{target.github_forkurl}}/blob/{{target.github_branch}}/content/_code-samples/key-derivation/key_derivation.py).
+- In Python 3 in [this repository's code samples section]({{target.github_forkurl}}/blob/{{target.github_branch}}/content/_code-samples/key-derivation/py/key_derivation.py).
- In JavaScript in the [`ripple-keypairs`](https://github.com/ripple/ripple-keypairs/) package.
### Ed25519 Key Derivation
diff --git a/content/concepts/payment-system-basics/accounts/multi-signing.md b/content/concepts/payment-system-basics/accounts/multi-signing.md
index 607b78fe06..ab48398028 100644
--- a/content/concepts/payment-system-basics/accounts/multi-signing.md
+++ b/content/concepts/payment-system-basics/accounts/multi-signing.md
@@ -23,27 +23,34 @@ Before you can multi-sign, you must create a list of which addresses can sign fo
The [SignerListSet transaction][] defines which addresses can authorize transactions from your address. You can include 1 to 8 addresses in a SignerList. The SignerList cannot include the sender's address and there can be no duplicate entries. You can control how many signatures are needed, in which combinations, by using the *SignerWeight* and *SignerQuorum* values of the SignerList.
-### SignerWeight
+If the [ExpandedSignerList amendment][] :not_enabled: is enabled, you can include 1 to 32 addresses in a SignerList.
-You can assign a weight to each signer in the SignerList. The weight represents the relative authority of the signer to other signers on the list. The higher the value, the more authorization authority. Individual SignerWeight values cannot exceed 216-1.
+### Signer Weight
-### SignerQuorum
+You can assign a weight to each signer in the SignerList. The weight represents the relative authority of the signer to other signers on the list. The higher the value, the more authorization authority. Individual weight values cannot exceed 216-1.
-The SignerQuorum value is the minimum SignerWeight total required to authorize a transaction. The SignerQuorum value must be attainable. The SignerQuorum must be greater than 0 but less than or equal to the sum of the SignerWeight values in the SignerList.
+### Signer Quorum
-### Examples Using SignerWeight and SignerQuorum
+The quorum value is the minimum weight total required to authorize a transaction. The quorum must be greater than 0 but less than or equal to the sum of the weight values in the SignerList: meaning, it must be possible to achieve a quorum with the given signer weights.
-For a typical use case, you might have a shared account with a SignerQuorum of 1, then give all participants a SignerWeight of 1. A single approval from any one of them is all that is required to approve a transaction.
+### Wallet Locator
-For a very important account, you might set the SignerQuorum to 3, with 3 participants that have a SignerWeight of 1. All of the participants must agree and approve each transaction.
+If the [ExpandedSignerList amendment][] :not_enabled: is enabled, you can also add up to 256 bits of arbitrary data to each signer's entry in the list. This data is not required or used by the network, but can be used by smart contracts or other applications to identify or confirm other data about the signers.
-Another account might also have a SignerQuorum of 3. You assign your CEO a SignerWeight of 3, 3 Vice Presidents a SignerWeight of 2 each, and 3 Directors a SignerWeight of 1 each. To approve a transaction for this account requires the approval of all 3 Directors (total weight of 3), 1 Vice President and 1 Director (total weight of 3), 2 Vice Presidents (total weight of 4), or the CEO (total weight of 3).
+### Examples Using Signer Weight and Signer Quorum
+
+The weight and quorum allow you to set an appropriate level of oversight for each transaction, based on the relative trust and authority relegated to responsible participants who manage the account.
+
+For a typical use case, you might have a shared account with a quorum of 1, then give all participants a weight of 1. A single approval from any one of them is all that is required to approve a transaction.
+
+For a very important account, you might set the quorum to 3, with 3 participants that have a weight of 1. All of the participants must agree and approve each transaction.
+
+Another account might also have a quorum of 3. You assign your CEO a weight of 3, 3 Vice Presidents a weight of 2 each, and 3 Directors a weight of 1 each. To approve a transaction for this account requires the approval of all 3 Directors (total weight of 3), 1 Vice President and 1 Director (total weight of 3), 2 Vice Presidents (total weight of 4), or the CEO (total weight of 3).
In each of the previous three use cases, you would disable the master key without configuring a regular key, so that multi-signing is the only way of [authorizing transactions](transaction-basics.html#authorizing-transactions).
-There might be a scenario where you create a multi-signing list as a "backup plan." The account owner normally uses a regular key for their transactions (not a multi-signing key). For safety, the owner adds a SignerList containing 3 friends, each with a weight of 1, and a SignerQuorum of 3. If the account owner were to lose the private key, they can ask their friends to multi-sign a transaction to replace the regular key.
+There might be a scenario where you create a multi-signing list as a "backup plan." The account owner normally uses a regular key for their transactions (not a multi-signing key). For safety, the owner adds a SignerList containing 3 friends, each with a weight of 1, and a quorum of 3. If the account owner were to lose the private key, they can ask their friends to multi-sign a transaction to replace the regular key.
-SignerWeight and SignerQuorum allow you to set an appropriate level of oversight for each transaction, based on the relative trust and authority relegated to responsible participants who manage the account.
## Sending Multi-Signed Transactions
@@ -53,7 +60,7 @@ To successfully submit a multi-signed transaction, you must do all of the follow
* The transaction must include the `SigningPubKey` field as an empty string.
* The transaction must include a [`Signers` field](transaction-common-fields.html#signers-field) containing an array of signatures.
* The signatures present in the `Signers` array must match signers defined in the SignerList.
-* For the provided signatures, the total `weight` associated with those signers must be equal or greater than the `quorum` for the SignerList.
+* For the provided signatures, the total weight associated with those signers must be equal or greater than the quorum for the SignerList.
* The [transaction cost](transaction-cost.html) (specified in the `Fee` field) must be at least (N+1) times the normal transaction cost, where N is the number of signatures provided.
* All fields of the transaction must be defined before collecting signatures. You cannot [auto-fill](transaction-common-fields.html#auto-fillable-fields) any fields.
* If presented in binary form, the `Signers` array must be sorted based on the numeric value of the signer addresses, with the lowest value first. (If submitted as JSON, the [submit_multisigned method][] handles this automatically.)
diff --git a/content/faq.ja.md b/content/faq.ja.md
index 041aed5708..f3e729594a 100644
--- a/content/faq.ja.md
+++ b/content/faq.ja.md
@@ -20,7 +20,7 @@ name: よくある質問
バリデータは、トランザクションがプロトコル要件を満たしていて、結果として「有効」であるかどうかを判断します。バリデータが提供する独自の機能は、順序付けされた単位にトランザクションをグループ化し、二重支払いを防ぐことを目的としてその順序に同意することです。
-コンセンサスプロセスの詳細は、[コンセンサス](consensus.html)と[Ripple Labs Tech Talk: Understanding Consensus](https://ripple.com/insights/ripple-labs-tech-talk-consensus-within-the-ripple-protocol/)を参照してください。
+コンセンサスプロセスの詳細は、[コンセンサス](consensus.html)を参照してください。
#### バリデータの実行にはいくらかかりますか?
diff --git a/content/faq.md b/content/faq.md
index 8dd92146ab..433a16035f 100644
--- a/content/faq.md
+++ b/content/faq.md
@@ -44,7 +44,7 @@ Although XRPL was initially developed for payment use cases, both the ledger and
All nodes ensure that transactions meet protocol requirements, and are therefore “valid.” The service that validators uniquely provide is administratively grouping transactions into ordered units, agreeing on one such ordering specifically to prevent double spending.
-See [Consensus](consensus.html) and the [Ripple Labs Tech Talk: Understanding Consensus](https://ripple.com/insights/ripple-labs-tech-talk-consensus-within-the-ripple-protocol/) for more information about the consensus process.
+See [Consensus](consensus.html) for more information about the consensus process.
#### How much does it cost to run a validator?
diff --git a/content/references/protocol-reference/data-types/nftoken.ja.md b/content/references/protocol-reference/data-types/nftoken.ja.md
index 5f794bb69b..400a1357c7 100644
--- a/content/references/protocol-reference/data-types/nftoken.ja.md
+++ b/content/references/protocol-reference/data-types/nftoken.ja.md
@@ -145,7 +145,7 @@ TokenIDの3番目のセクションは、発行者の公開アドレスをビッ
### トークン連番
-5番目のセクションは、発行者が `NFToken` を作成するたびに増加するシーケンス番号です。[NFTokenMint トランザクション][] では `TokenID` のこの部分を `Issuer` アカウントの `MintedTokens` フィールドを基に自動的に設定します。発行者の [AccountRoot オブジェクト][] が `MintedTokens` フィールドを持っていない場合、そのフィールドは値 0 と見なされます。
+5番目のセクションは、発行者が `NFToken` を作成するたびに増加するシーケンス番号です。[NFTokenMint トランザクション][] では `NFTokenID` のこの部分を `Issuer` アカウントの `MintedTokens` フィールドを基に自動的に設定します。発行者の [AccountRoot オブジェクト][] が `MintedTokens` フィールドを持っていない場合、そのフィールドは値 0 と見なされます。
## URI
@@ -176,7 +176,7 @@ xrpl-nft-data-token-info-v1 IN TXT "https://host.example.com/api/token-info/{tok
```
-情報を問い合わせようとしたときに、文字列 `{tokenid}` を要求されたトークンの `TokenID` (64バイトの16進文字列) に置き換えてください。
+情報を問い合わせようとしたときに、文字列 `{tokenid}` を要求されたトークンの `NFTokenID` (64バイトの16進文字列) に置き換えてください。
実装では、`TXT`レコードの存在を確認し、存在すればそれらのクエリ文字列を使用する必要があります。文字列が存在しない場合、実装はデフォルトの URL を使用するように試みるべきです。ドメインが _example.com_ であると仮定すると、デフォルトのURLは次のようになります。
diff --git a/content/references/protocol-reference/data-types/nftoken.md b/content/references/protocol-reference/data-types/nftoken.md
index 666110cce8..8d588faa5e 100644
--- a/content/references/protocol-reference/data-types/nftoken.md
+++ b/content/references/protocol-reference/data-types/nftoken.md
@@ -145,7 +145,7 @@ Notice that the scrambled version of the taxon is `0xBC8B858E`: the scrambled ve
### Token Sequence
-The fifth section is a sequence number that increases with each `NFToken` the issuer creates. The [NFTokenMint transaction][] sets this part of the `TokenID` automatically based on the `MintedTokens` field of the `Issuer` account. If the issuer's [AccountRoot object][] does not have a `MintedTokens` field, the field is assumed to have the value 0; the value of the field is then incremented by exactly 1.
+The fifth section is a sequence number that increases with each `NFToken` the issuer creates. The [NFTokenMint transaction][] sets this part of the `NFTokenID` automatically based on the `MintedTokens` field of the `Issuer` account. If the issuer's [AccountRoot object][] does not have a `MintedTokens` field, the field is assumed to have the value 0; the value of the field is then incremented by exactly 1.
## URI
@@ -176,7 +176,7 @@ xrpl-nft-data-token-info-v1 IN TXT "https://host.example.com/api/token-info/{tok
```
-Replace the string `{tokenid}` with the requested token’s `TokenID` as a 64-byte hex string when you attempt to query information.
+Replace the string `{tokenid}` with the requested token’s `NFTokenID` as a 64-byte hex string when you attempt to query information.
Your implementation should check for the presence of `TXT` records and use those query strings if present. If no string is present, implementations should attempt to use a default URL. Assuming the domain is _example.com_, the default URL would be:
diff --git a/content/references/protocol-reference/ledger-data/ledger-object-types/accountroot.md b/content/references/protocol-reference/ledger-data/ledger-object-types/accountroot.md
index fbf4f923f5..5bb751494a 100644
--- a/content/references/protocol-reference/ledger-data/ledger-object-types/accountroot.md
+++ b/content/references/protocol-reference/ledger-data/ledger-object-types/accountroot.md
@@ -47,9 +47,12 @@ The `AccountRoot` object has the following fields:
| `PreviousTxnLgrSeq` | Number | UInt32 | The [index of the ledger][Ledger Index] that contains the transaction that most recently modified this object. |
| `Sequence` | Number | UInt32 | The [sequence number](basic-data-types.html#account-sequence) of the next valid transaction for this account. |
| `AccountTxnID` | String | Hash256 | _(Optional)_ The identifying hash of the transaction most recently sent by this account. This field must be enabled to use the [`AccountTxnID` transaction field](transaction-common-fields.html#accounttxnid). To enable it, send an [AccountSet transaction with the `asfAccountTxnID` flag enabled](accountset.html#accountset-flags). |
+| `BurnedNFTokens` | Number | UInt32 | _(Optional)_ How many total of this account's issued [non-fungible tokens](non-fungible-tokens.html) :not_enabled: have been burned. This number is always equal or less than `MintedNFTokens`. |
| `Domain` | String | Blob | _(Optional)_ A domain associated with this account. In JSON, this is the hexadecimal for the ASCII representation of the domain. [Cannot be more than 256 bytes in length.](https://github.com/ripple/rippled/blob/55dc7a252e08a0b02cd5aa39e9b4777af3eafe77/src/ripple/app/tx/impl/SetAccount.h#L34) |
| `EmailHash` | String | Hash128 | _(Optional)_ The md5 hash of an email address. Clients can use this to look up an avatar through services such as [Gravatar](https://en.gravatar.com/). |
| `MessageKey` | String | Blob | _(Optional)_ A public key that may be used to send encrypted messages to this account. In JSON, uses hexadecimal. Must be exactly 33 bytes, with the first byte indicating the key type: `0x02` or `0x03` for secp256k1 keys, `0xED` for Ed25519 keys. |
+| `MintedNFTokens` | Number | UInt32 | _(Optional)_ How many total [non-fungible tokens](non-fungible-tokens.html) :not_enabled: have been minted by and on behalf of this account. |
+| `NFTokenMinter` | String | AccountID | _(Optional)_ Another account that is authorized to mint [non-fungible tokens](non-fungible-tokens.html) :not_enabled: on behalf of this account. |
| `RegularKey` | String | AccountID | _(Optional)_ The address of a [key pair](cryptographic-keys.html) that can be used to sign transactions for this account instead of the master key. Use a [SetRegularKey transaction][] to change this value. |
| `TicketCount` | Number | UInt32 | _(Optional)_ How many [Tickets](tickets.html) this account owns in the ledger. This is updated automatically to ensure that the account stays within the hard limit of 250 Tickets at a time. This field is omitted if the account has zero Tickets. _(Added by the [TicketBatch amendment][].)_ |
| `TickSize` | Number | UInt8 | _(Optional)_ How many significant digits to use for exchange rates of Offers involving currencies issued by this address. Valid values are `3` to `15`, inclusive. _(Added by the [TickSize amendment][].)_ |
diff --git a/content/references/protocol-reference/ledger-data/ledger-object-types/nftokenpage.md b/content/references/protocol-reference/ledger-data/ledger-object-types/nftokenpage.md
index b5367c3333..4f56f437da 100644
--- a/content/references/protocol-reference/ledger-data/ledger-object-types/nftokenpage.md
+++ b/content/references/protocol-reference/ledger-data/ledger-object-types/nftokenpage.md
@@ -142,9 +142,9 @@ An `NFTokenPage` object can have the following required and optional fields:
`NFTokenPage` identifiers are constructed so as to specifically allow for the adoption of a more efficient paging structure, ideally suited for `NFTokens`.
-The identifier of an `NFTokenPage` is derived by concatenating the 160-bit `AccountID` of the owner of the page, followed by a 96 bit value that indicates whether a particular `TokenID` can be contained in this page.
+The identifier of an `NFTokenPage` is derived by concatenating the 160-bit `AccountID` of the owner of the page, followed by a 96 bit value that indicates whether a particular `NFTokenID` can be contained in this page.
-More specifically, and assuming that the function `low96(x)` returns the low 96 bits of a 256-bit value, an NFT with `TokenID` `A` can be included in a page with `NFTokenPageID` `B` if and only if `low96(A) >= low96(B)`.
+More specifically, and assuming that the function `low96(x)` returns the low 96 bits of a 256-bit value, an NFT with `NFTokenID` `A` can be included in a page with `NFTokenPageID` `B` if and only if `low96(A) >= low96(B)`.
For example, applying the `low96` function to the NFT described before, which had an ID of `000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65` the function `low96` would return `42540EE208C3098E00000D65`.
@@ -153,7 +153,7 @@ This curious construct exploits the structure of the SHAMap to allow for efficie
### Searching for an `NFToken` object
-To search for a specific `NFToken`, compute the `NFTokenPageID` using the account of the owner and the `TokenID` of the token, as described above. Search for a ledger entry where the identifier is less than or equal to that value. If that entry does not exist or is not an `NFTokenPage`, the `NFToken` is not held by the given account.
+To search for a specific `NFToken`, compute the `NFTokenPageID` using the account of the owner and the `NFTokenID` of the token, as described above. Search for a ledger entry where the identifier is less than or equal to that value. If that entry does not exist or is not an `NFTokenPage`, the `NFToken` is not held by the given account.
### Adding an `NFToken` object
diff --git a/content/references/protocol-reference/ledger-data/ledger-object-types/signerlist.ja.md b/content/references/protocol-reference/ledger-data/ledger-object-types/signerlist.ja.md
index d3f71642ae..bf05711497 100644
--- a/content/references/protocol-reference/ledger-data/ledger-object-types/signerlist.ja.md
+++ b/content/references/protocol-reference/ledger-data/ledger-object-types/signerlist.ja.md
@@ -73,6 +73,7 @@ _([MultiSign Amendment][]が必要です。)_
|:---------------|:----------|:--------------|:--------------------------------|
| `Account` | 文字列 | AccountID | 署名がマルチ署名に提供されるXRP Ledgerアドレス。レジャーの資金供給のあるアドレスである必要はありません。 |
| `SignerWeight` | 数値 | UInt16 | この署名者による署名の重み。マルチ署名は、付与された署名の重みの合計がSignerListの`SignerQuorum`値を超えている場合にのみ有効となります。 |
+| `WalletLocator` | 文字列 | Hash256 | (省略可)Arbitrary hexadecimal data. This can be used to identify the signer or for other, related purposes. Requires the [ExpandedSignerList amendment][] :not_enabled:. |
マルチ署名済みトランザクションを処理する際に、サーバーはトランザクション実行時にレジャーに関する`Account`値を間接参照します。アドレスが資金供給のある[AccountRootオブジェクト](accountroot.html)に対応して _いない_ 場合、そのアドレスに関連付けられているマスターシークレットによってのみ有効な署名を生成できます。アカウントがレジャーに _確かに_ 存在している場合は、アカウントの状態により異なります。アカウントにレギュラーキーが設定されている場合はレギュラーキーを使用できます。アカウントのマスターキーが無効化されていない場合に限り、アカウントのマスターキーを使用できます。マルチ署名を別のマルチ署名の一部として使用することはできません。
diff --git a/content/references/protocol-reference/ledger-data/ledger-object-types/signerlist.md b/content/references/protocol-reference/ledger-data/ledger-object-types/signerlist.md
index ac8a1597ab..1f23082e55 100644
--- a/content/references/protocol-reference/ledger-data/ledger-object-types/signerlist.md
+++ b/content/references/protocol-reference/ledger-data/ledger-object-types/signerlist.md
@@ -69,10 +69,11 @@ The `SignerEntries` may be any combination of funded and unfunded addresses that
Each member of the `SignerEntries` field is an object that describes that signer in the list. A Signer Entry has the following fields:
-| Name | JSON Type | Internal Type | Description |
-|:---------------|:----------|:--------------|:--------------------------------|
-| `Account` | String | AccountID | An XRP Ledger address whose signature contributes to the multi-signature. It does not need to be a funded address in the ledger. |
-| `SignerWeight` | Number | UInt16 | The weight of a signature from this signer. A multi-signature is only valid if the sum weight of the signatures provided meets or exceeds the signer list's `SignerQuorum` value. |
+| Name | JSON Type | Internal Type | Description |
+|:----------------|:----------|:--------------|:-------------------------------|
+| `Account` | String | AccountID | An XRP Ledger address whose signature contributes to the multi-signature. It does not need to be a funded address in the ledger. |
+| `SignerWeight` | Number | UInt16 | The weight of a signature from this signer. A multi-signature is only valid if the sum weight of the signatures provided meets or exceeds the signer list's `SignerQuorum` value. |
+| `WalletLocator` | String | Hash256 | _(Optional)_ Arbitrary hexadecimal data. This can be used to identify the signer or for other, related purposes. Requires the [ExpandedSignerList amendment][] :not_enabled:. |
When processing a multi-signed transaction, the server looks up the `Account` values with respect to the ledger at the time of transaction execution. If the address _does not_ correspond to a funded [AccountRoot object](accountroot.html), then only the [master private key](cryptographic-keys.html) associated with that address can be used to produce a valid signature. If the account _does_ exist in the ledger, then it depends on the state of that account. If the account has a Regular Key configured, the Regular Key can be used. The account's master key can only be used if it is not disabled. A multi-signature cannot be used as part of another multi-signature.
diff --git a/content/references/protocol-reference/transactions/transaction-results/tec-codes.md b/content/references/protocol-reference/transactions/transaction-results/tec-codes.md
index 363606df1d..2b82a5fb9a 100644
--- a/content/references/protocol-reference/transactions/transaction-results/tec-codes.md
+++ b/content/references/protocol-reference/transactions/transaction-results/tec-codes.md
@@ -15,6 +15,7 @@ For the most part, transactions with `tec` codes take no action other than to de
| Code | Value | Explanation |
|:---------------------------|:------|:----------------------------------------|
+| `tecCANT_ACCEPT_OWN_NFTOKEN_OFFER` | 157 | The transaction tried to accept an offer that was placed by the same account to buy or sell a [non-fungible token](non-fungible-tokens.html). _(Added by the [NonFungibleTokensV1 amendment][]. :not_enabled:)_ |
| `tecCLAIM` | 100 | Unspecified failure, with transaction cost destroyed. |
| `tecCRYPTOCONDITION_ERROR` | 146 | This [EscrowCreate][] or [EscrowFinish][] transaction contained a malformed or mismatched crypto-condition. |
| `tecDIR_FULL` | 121 | The transaction tried to add an object (such as a trust line, Check, Escrow, or Payment Channel) to an account's owner directory, but that account cannot own any more objects in the ledger. |
@@ -27,11 +28,16 @@ For the most part, transactions with `tec` codes take no action other than to de
| `tecINSUF_RESERVE_LINE` | 122 | The transaction failed because the sending account does not have enough XRP to create a new trust line. (See: [Reserves](reserves.html)) This error occurs when the counterparty already has a trust line in a non-default state to the sending account for the same currency. (See `tecNO_LINE_INSUF_RESERVE` for the other case.) |
| `tecINSUF_RESERVE_OFFER` | 123 | The transaction failed because the sending account does not have enough XRP to create a new Offer. (See: [Reserves](reserves.html)) |
| `tecINSUFF_FEE` | 136 | The transaction failed because the sending account does not have enough XRP to pay the [transaction cost](transaction-cost.html) that it specified. (In this case, the transaction processing destroys all of the sender's XRP even though that amount is lower than the specified transaction cost.) This result only occurs if the account's balance decreases _after_ this transaction has been distributed to enough of the network to be included in a consensus set. Otherwise, the transaction fails with [`terINSUF_FEE_B`](ter-codes.html) before being distributed. |
+| `tecINSUFFICIENT_FUNDS` | 158 | One of the accounts involved does not hold enough of a necessary asset. _(Added by the [NonFungibleTokensV1 amendment][]. :not_enabled:)_ |
+| `tecINSUFFICIENT_PAYMENT` | 161 | The amount specified is not enough to pay all fees involved in the transaction. For example, when trading a non-fungible token, the buy amount may not be enough to pay both the broker fee and the sell amount. _(Added by the [NonFungibleTokensV1 amendment][]. :not_enabled:)_ |
| `tecINSUFFICIENT_RESERVE` | 141 | The transaction would increase the [reserve requirement](reserves.html) higher than the sending account's balance. [SignerListSet][], [PaymentChannelCreate][], [PaymentChannelFund][], and [EscrowCreate][] can return this error code. See [Signer Lists and Reserves](signerlist.html#signer-lists-and-reserves) for more information. |
| `tecINTERNAL` | 144 | Unspecified internal error, with transaction cost applied. This error code should not normally be returned. If you can reproduce this error, please [report an issue](https://github.com/ripple/rippled/issues). |
| `tecINVARIANT_FAILED` | 147 | An invariant check failed when trying to execute this transaction. Added by the [EnforceInvariants amendment][]. If you can reproduce this error, please [report an issue](https://github.com/ripple/rippled/issues). |
| `tecKILLED` | 150 | The [OfferCreate transaction][] specified the `tfFillOrKill` flag and could not be filled, so it was killed. _(Added by the [fix1578 amendment][].)_ |
+| `tecMAX_SEQUENCE_REACHED` | 153 | A sequence number field is already at its maximum. This includes the `MintedNFTokens` field. _(Added by the [NonFungibleTokensV1 amendment][]. :not_enabled:)_ |
| `tecNEED_MASTER_KEY` | 142 | This transaction tried to cause changes that require the master key, such as [disabling the master key or giving up the ability to freeze balances](accountset.html#accountset-flags). [New in: rippled 0.28.0][] |
+| `tecNFTOKEN_BUY_SELL_MISMATCH` | 155 | The [NFTokenAcceptOffer transaction][] :not_enabled: attempted to match incompatible offers to buy and sell a non-fungible token. _(Added by the [NonFungibleTokensV1 amendment][]. :not_enabled:)_ |
+| `tecNFTOKEN_OFFER_TYPE_MISMATCH` | 156 | One or more of the offers specified in the transaction was not the right type of offer. (For example, a buy offer was specified in the `NFTokenSellOffer` field.) _(Added by the [NonFungibleTokensV1 amendment][]. :not_enabled:)_ |
| `tecNO_ALTERNATIVE_KEY` | 130 | The transaction tried to remove the only available method of [authorizing transactions](transaction-basics.html#authorizing-transactions). This could be a [SetRegularKey transaction][] to remove the regular key, a [SignerListSet transaction][] to delete a SignerList, or an [AccountSet transaction][] to disable the master key. (Prior to `rippled` 0.30.0, this was called `tecMASTER_DISABLED`.) |
| `tecNO_AUTH` | 134 | The transaction failed because it needs to add a balance on a trust line to an account with the `lsfRequireAuth` flag enabled, and that trust line has not been authorized. If the trust line does not exist at all, `tecNO_LINE` occurs instead. |
| `tecNO_DST` | 124 | The account on the receiving end of the transaction does not exist. This includes Payment and TrustSet transaction types. (It could be created if it received enough XRP.) |
@@ -43,7 +49,9 @@ For the most part, transactions with `tec` codes take no action other than to de
| `tecNO_LINE_REDUNDANT` | 127 | The transaction failed because it tried to set a trust line to its default state, but the trust line did not exist. |
| `tecNO_PERMISSION` | 139 | The sender does not have permission to do this operation. For example, the [EscrowFinish transaction][] tried to release a held payment before its `FinishAfter` time, someone tried to use [PaymentChannelFund][] on a channel the sender does not own, or a [Payment][] tried to deliver funds to an account with the "DepositAuth" flag enabled. |
| `tecNO_REGULAR_KEY` | 131 | The [AccountSet transaction][] tried to disable the master key, but the account does not have another way to [authorize transactions](transaction-basics.html#authorizing-transactions). If [multi-signing](multi-signing.html) is enabled, this code is deprecated and `tecNO_ALTERNATIVE_KEY` is used instead. |
+| `tecNO_SUITABLE_NFTOKEN_PAGE` | 154 | The transaction tried to mint or acquire a non-fungible token but the account receiving the `NFToken` does not have a directory page that can hold it. This situation is rare. _(Added by the [NonFungibleTokensV1 amendment][]. :not_enabled:)_ |
| `tecNO_TARGET` | 138 | The transaction referenced an Escrow or PayChannel ledger object that doesn't exist, either because it never existed or it has already been deleted. (For example, another [EscrowFinish transaction][] has already executed the held payment.) Alternatively, the destination account has `asfDisallowXRP` set so it cannot be the destination of this [PaymentChannelCreate][] or [EscrowCreate][] transaction. |
+| `tecOBJECT_NOT_FOUND` | 160 | One of the objects specified by this transaction did not exist in the ledger. _(Added by the [NonFungibleTokensV1 amendment][]. :not_enabled:)_ |
| `tecOVERSIZE` | 145 | This transaction could not be processed, because the server created an excessively large amount of [metadata](transaction-metadata.html) when it tried to apply the transaction. [New in: rippled 0.29.0-hf1][] |
| `tecOWNERS` | 132 | The transaction requires that account sending it has a nonzero "owners count", so the transaction cannot succeed. For example, an account cannot enable the [`lsfRequireAuth`](accountset.html#accountset-flags) flag if it has any trust lines or available offers. |
| `tecPATH_DRY` | 128 | The transaction failed because the provided [paths](paths.html) did not have enough liquidity to send anything at all. This could mean that the source and destination accounts are not linked by [trust lines](trust-lines-and-issuing.html). |
diff --git a/content/references/protocol-reference/transactions/transaction-results/tef-codes.md b/content/references/protocol-reference/transactions/transaction-results/tef-codes.md
index 64ee38709a..3694cb4c8b 100644
--- a/content/references/protocol-reference/transactions/transaction-results/tef-codes.md
+++ b/content/references/protocol-reference/transactions/transaction-results/tef-codes.md
@@ -28,6 +28,7 @@ These codes indicate that the transaction failed and was not included in a ledge
| `tefINVARIANT_FAILED` | An invariant check failed when trying to claim the [transaction cost](transaction-cost.html). Added by the [EnforceInvariants amendment][]. If you can reproduce this error, please [report an issue](https://github.com/ripple/rippled/issues). |
| `tefMASTER_DISABLED` | The transaction was signed with the account's master key, but the account has the `lsfDisableMaster` field set. |
| `tefMAX_LEDGER` | The transaction included a [`LastLedgerSequence`](reliable-transaction-submission.html#lastledgersequence) parameter, but the current ledger's sequence number is already higher than the specified value. |
+| `tefNFTOKEN_IS_NOT_TRANSFERABLE` | The transaction attempted to send a [non-fungible token](non-fungible-tokens.html) to another account, but the `NFToken` has the `lsfTransferable` flag disabled and the transfer would not be to or from the issuer. _(Added by the [NonFungibleTokensV1 amendment][]. :not_enabled:)_ |
| `tefNO_AUTH_REQUIRED` | The [TrustSet transaction][] tried to mark a trust line as authorized, but the `lsfRequireAuth` flag is not enabled for the corresponding account, so authorization is not necessary. |
| `tefNO_TICKET` | The transaction attempted to use a [Ticket](tickets.html), but the specified `TicketSequence` number does not exist in the ledger, and cannot be created in the future because it is earlier than the sender's current sequence number. |
| `tefNOT_MULTI_SIGNING` | The transaction was [multi-signed](multi-signing.html), but the sending account has no SignerList defined. |
diff --git a/content/references/protocol-reference/transactions/transaction-results/tem-codes.md b/content/references/protocol-reference/transactions/transaction-results/tem-codes.md
index 9052f34390..28451f5dab 100644
--- a/content/references/protocol-reference/transactions/transaction-results/tem-codes.md
+++ b/content/references/protocol-reference/transactions/transaction-results/tem-codes.md
@@ -20,6 +20,7 @@ These codes indicate that the transaction was malformed, and cannot succeed acco
| `temBAD_FEE` | The transaction improperly specified its `Fee` value, for example by listing a non-XRP currency or some negative amount of XRP. |
| `temBAD_ISSUER` | The transaction improperly specified the `issuer` field of some currency included in the request. |
| `temBAD_LIMIT` | The [TrustSet transaction][] improperly specified the `LimitAmount` value of a trust line. |
+| `temBAD_NFTOKEN_TRANSFER_FEE` | The [NFTokenMint transaction][] improperly specified the `TransferFee` field of the transaction. _(Added by the [NonFungibleTokensV1 amendment][]. :not_enabled:)_ |
| `temBAD_OFFER` | The [OfferCreate transaction][] specifies an invalid offer, such as offering to trade XRP for itself, or offering a negative amount. |
| `temBAD_PATH` | The [Payment transaction][] specifies one or more [Paths](paths.html) improperly, for example including an issuer for XRP, or specifying an account differently. |
| `temBAD_PATH_LOOP` | One of the [Paths](paths.html) in the [Payment transaction][] was flagged as a loop, so it cannot be processed in a bounded amount of time. |
diff --git a/content/references/protocol-reference/transactions/transaction-types/accountset.ja.md b/content/references/protocol-reference/transactions/transaction-types/accountset.ja.md
index a2f49fdaa1..dc0a5c6b53 100644
--- a/content/references/protocol-reference/transactions/transaction-types/accountset.ja.md
+++ b/content/references/protocol-reference/transactions/transaction-types/accountset.ja.md
@@ -58,7 +58,7 @@ AccountSetトランザクションは、[XRP Ledgerのアカウント](accountro
アカウントの`Domain`フィールドには任意のドメインを挿入できます。アカウントとドメインが同一の人物または企業に属していることを証明するには、「双方向リンク」を確立することをお勧めします。
- 所有するアカウントに対して、所有するドメインを`Domain`フィールドで設定します。
-- そのドメインのWebサイトで、所有アカウントをリストするテキストファイルをホスティングし、必要に応じて、XRP Ledgerの用途に関するその他の情報も記述します。慣例上、このファイルの名前は`ripple.txt`とします。例については、を参照してください。
+- そのドメインのWebサイトで、所有アカウントをリストするテキストファイルをホスティングし、必要に応じて、XRP Ledgerの用途に関するその他の情報も記述します。慣例上、このファイルの名前は`ripple.txt`とします。
**注意:** 中間者攻撃を防止するには、最新のTLS証明書を使用してHTTPSでWebサイトを提供します。
## AccountSetのフラグ
diff --git a/content/references/protocol-reference/transactions/transaction-types/accountset.md b/content/references/protocol-reference/transactions/transaction-types/accountset.md
index b1b8a7db51..837f77b4d9 100644
--- a/content/references/protocol-reference/transactions/transaction-types/accountset.md
+++ b/content/references/protocol-reference/transactions/transaction-types/accountset.md
@@ -35,7 +35,7 @@ An AccountSet transaction modifies the properties of an [account in the XRP Ledg
| [Domain](#domain) | String | Blob | _(Optional)_ The domain that owns this account, as a string of hex representing the ASCII for the domain in lowercase. [Cannot be more than 256 bytes in length.](https://github.com/ripple/rippled/blob/55dc7a252e08a0b02cd5aa39e9b4777af3eafe77/src/ripple/app/tx/impl/SetAccount.h#L34) |
| `EmailHash` | String | Hash128 | _(Optional)_ Hash of an email address to be used for generating an avatar image. Conventionally, clients use [Gravatar](http://en.gravatar.com/site/implement/hash/) to display this image. |
| `MessageKey` | String | Blob | _(Optional)_ Public key for sending encrypted messages to this account. To set the key, it must be exactly 33 bytes, with the first byte indicating the key type: `0x02` or `0x03` for secp256k1 keys, `0xED` for Ed25519 keys. To remove the key, use an empty value. |
-| `Minter` :not_enabled: | String | Blob | _(Optional)_ Sets an alternate account that is allowed to mint NFTokens on this account's behalf using NFTokenMint's `Issuer` field. This field is part of the experimental XLS-20 standard for non-fungible tokens. |
+| `NFTokenMinter` :not_enabled: | String | Blob | _(Optional)_ Sets an alternate account that is allowed to mint NFTokens on this account's behalf using NFTokenMint's `Issuer` field. This field is part of the experimental XLS-20 standard for non-fungible tokens. |
| [`SetFlag`](#accountset-flags) | Number | UInt32 | _(Optional)_ Integer flag to enable for this account. |
| [`TransferRate`](#transferrate) | Number | UInt32 | _(Optional)_ The fee to charge when users transfer this account's tokens, represented as billionths of a unit. Cannot be more than `2000000000` or less than `1000000000`, except for the special case `0` meaning no fee. |
| [`TickSize`](ticksize.html) | Number | UInt8 | _(Optional)_ Tick size to use for offers involving a currency issued by this address. The exchange rates of those offers is rounded to this many significant digits. Valid values are `3` to `15` inclusive, or `0` to disable. _(Added by the [TickSize amendment][].)_ |
@@ -72,7 +72,7 @@ The available AccountSet flags are:
| Flag Name | Decimal Value | Corresponding Ledger Flag | Description |
|:-------------------|:--------------|:--------------------------|:--------------|
| `asfAccountTxnID` | 5 | (None) | Track the ID of this account's most recent transaction. Required for [`AccountTxnID`](transaction-common-fields.html#accounttxnid) |
-| `asfAuthorizedMinter` :not_enabled:| 10 | (None) | Enable to allow another account to mint non-fungible tokens (NFTokens) on this account's behalf. Specify the authorized account in the `Minter` field of the [AccountRoot](accountroot.html) object. This is an experimental field to enable behavior for NFToken support. |
+| `asfAuthorizedNFTokenMinter` :not_enabled:| 10 | (None) | Enable to allow another account to mint non-fungible tokens (NFTokens) on this account's behalf. Specify the authorized account in the `NFTokenMinter` field of the [AccountRoot](accountroot.html) object. This is an experimental field to enable behavior for NFToken support. |
| `asfDefaultRipple` | 8 | `lsfDefaultRipple` | Enable [rippling](rippling.html) on this account's trust lines by default. [New in: rippled 0.27.3][] |
| `asfDepositAuth` | 9 | `lsfDepositAuth` | Enable [Deposit Authorization](depositauth.html) on this account. _(Added by the [DepositAuth amendment][].)_ |
| `asfDisableMaster` | 4 | `lsfDisableMaster` | Disallow use of the master key pair. Can only be enabled if the account has configured another way to sign transactions, such as a [Regular Key](cryptographic-keys.html) or a [Signer List](multi-signing.html). |
diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.md b/content/references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.md
index db9c4d609f..828380e06a 100644
--- a/content/references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.md
+++ b/content/references/protocol-reference/transactions/transaction-types/nftokenacceptoffer.md
@@ -20,10 +20,10 @@ The `NFTokenAcceptOffer` transaction is used to accept offers to `buy` or `sell`
The mode in which the transaction operates depends on the presence of the `NFTokenSellOffer` and `NFTokenBuyOffer` fields of the transaction:
| `NFTokenSellOffer` | `NFTokenBuyOffer` | Mode |
-|:------------|:-----------|:---------|
-| ✔️ | ✔️ | Brokered |
-| ✔️ | X | Direct |
-| X | ✔️ | Direct |
+|:-------------------|:------------------|:---------|
+| ✔️ | ✔️ | Brokered |
+| ✔️ | X | Direct |
+| X | ✔️ | Direct |
If neither of those fields is specified, the transaction is malformed and produces a `tem` class error.
@@ -64,22 +64,38 @@ In brokered mode, the `NFTokenAcceptOffer` transaction fails if:
## Fields
+{% include '_snippets/tx-fields-intro.md' %}
-| Field | JSON Type | [Internal Type][] | Description |
-|:----------------|:-----------------|:------------------|:--------------------|
-| `TransactionType` | String | UInt16 | Transaction type `NFTokenAcceptOffer`. The integer identifier is 29. |
-| `NFTokenSellOffer` | String | Hash256 | _(Optional)_ Identifies the `NFTokenOffer` that offers to sell the `NFToken`. |
-| `NFTokenBuyOffer` | String | Hash256 | _(Optional)_ Identifies the `NFTokenOffer` that offers to buy the `NFToken`. |
-| `NFTokenBrokerFee` | [Currency Amount][] | Amount | _(Optional)_ This field is only valid in brokered mode, and specifies the amount that the broker keeps as part of their fee for bringing the two offers together; the remaining amount is sent to the seller of the NFToken being bought. If specified, the fee must be such that, prior to accounting for the transfer fee charged by the issuer, the amount that the seller would receive is at least as much as the amount indicated in the sell offer. |
+| Field | JSON Type | [Internal Type][] | Description |
+|:-------------------|:--------------------|:------------------|:--------------|
+| `NFTokenSellOffer` | String | Hash256 | _(Optional)_ Identifies the `NFTokenOffer` that offers to sell the `NFToken`. |
+| `NFTokenBuyOffer` | String | Hash256 | _(Optional)_ Identifies the `NFTokenOffer` that offers to buy the `NFToken`. |
+| `NFTokenBrokerFee` | [Currency Amount][] | Amount | _(Optional)_ This field is only valid in brokered mode, and specifies the amount that the broker keeps as part of their fee for bringing the two offers together; the remaining amount is sent to the seller of the `NFToken` being bought. If specified, the fee must be such that, prior to accounting for the transfer fee charged by the issuer, the amount that the seller would receive is at least as much as the amount indicated in the sell offer. |
-In direct mode, you must specify **either** the `NFTokenSellOffer` or the `NFTokenBuyOffer`. In brokered mode, you must specify **both** the `NFTokenSellOffer` and the `NFTokenBuyOffer`.
+In direct mode, you must specify **either** the `NFTokenSellOffer` or the `NFTokenBuyOffer` field. In brokered mode, you must specify **both** fields.
-This functionality is intended to allow the `owner` of a `NFToken` to offer their token for sale to a third party broker, who may then attempt to sell the `NFToken` on for a larger amount, without the broker having to own the `NFToken` or custody funds.
+This functionality is intended to allow the owner of an `NFToken` to offer their token for sale to a third party broker, who may then attempt to sell the `NFToken` on for a larger amount, without the broker having to own the `NFToken` or custody funds.
If both offers are for the same asset, it is possible that the order in which funds are transferred might cause a transaction that would succeed to fail due to an apparent lack of funds. To ensure deterministic transaction execution and maximize the chances of successful execution, the account attempting to buy the `NFToken` is debited first. Funds due to the broker are credited _before_ crediting the seller.
-In brokered mode, The offers referenced by `NFTokenBuyOffer` and `NFTokenSellOffer` must both specify the same `NFTokenID`; that is, both must be for the same `NFToken`.
+In brokered mode, the offers referenced by `NFTokenBuyOffer` and `NFTokenSellOffer` must both specify the same `NFTokenID`; that is, both must be for the same `NFToken`.
+## Error Cases
+
+In addition to errors that can occur for all transactions, {{currentpage.name}} transactions can result in the following [transaction result codes](transaction-results.html):
+
+| Error Code | Description |
+|:-----------------------------------|:----------------------------------------|
+| `temDISABLED` | The [NonFungibleTokensV1 amendment][] is not enabled. |
+| `temMALFORMED` | The transaction was not validly formatted. For example, it specified neither `NFTokenSellOffer` nor `NFTokenBuyOffer`, or it specified a negative `NFTokenBrokerFee`. |
+| `tecCANT_ACCEPT_OWN_NFTOKEN_OFFER` | The buyer and seller are the same account. |
+| `tecEXPIRED` | An offer specified in the transaction has already expired. |
+| `tecINSUFFICIENT_FUNDS` | The buyer does not have the full amount they are offering. If the buy amount is specified in XRP, this could be because of the [reserve requirement](reserves.html). If the buy amount is a token, it could be because the token is [frozen](freezes.html). |
+| `tecINSUFFICIENT_PAYMENT` | In brokered mode, the buy amount offered is not high enough to pay the `BrokerFee` _and_ the sell cost of the `NFToken`. |
+| `tecOBJECT_NOT_FOUND` | One of the offers specified in the transaction does not exist in the ledger. |
+| `tecNFTOKEN_BUY_SELL_MISMATCH` | In brokered mode, the two offers are not a valid match. For example, the seller is asking more than the buyer is offering, the buy and sell offer are denominated in different assets, or the seller specified a destination that is not the buyer or the broker. |
+| `tecNFTOKEN_OFFER_TYPE_MISMATCH` | The object identified by the `NFTokenBuyOffer` is not actually a buy offer, or the object identified by the `NFTokenSellOffer` is not actually a sell offer. |
+| `tecNO_PERMISSION` | The seller does not own the `NFToken` being sold; or the matching offer specifies a different `Destination` account than the account accepting the offer. |
diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokenburn.md b/content/references/protocol-reference/transactions/transaction-types/nftokenburn.md
index fab0829016..66890f98ef 100644
--- a/content/references/protocol-reference/transactions/transaction-types/nftokenburn.md
+++ b/content/references/protocol-reference/transactions/transaction-types/nftokenburn.md
@@ -11,153 +11,40 @@ status: not_enabled
The `NFTokenBurn` transaction is used to remove a `NFToken` object from the `NFTokenPage` in which it is being held, effectively removing the token from the ledger (_burning_ it).
+The sender of this transaction must be the owner of the `NFToken` to burn; or, if the `NFToken` has the `lsfBurnable` flag enabled, can be the issuer or the issuer's authorized `NFTokenMinter` account instead.
+
If this operation succeeds, the corresponding `NFToken` is removed. If this operation empties the `NFTokenPage` holding the `NFToken` or results in consolidation, thus removing a `NFTokenPage`, the owner’s reserve requirement is reduced by one.
## Example {{currentpage.name}} JSON
-
-```
+```json
{
- "TransactionType": "NFTokenBurn",
- "Account": "rNCFjv8Ek5oDrNiMJ3pw6eLLFtMjZLJnf2",
- "Owner": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
- "Fee": 10,
- "NFTokenID": "000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"
+ "TransactionType": "NFTokenBurn",
+ "Account": "rNCFjv8Ek5oDrNiMJ3pw6eLLFtMjZLJnf2",
+ "Owner": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",
+ "Fee": "10",
+ "NFTokenID": "000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"
}
```
{% include '_snippets/tx-fields-intro.md' %}
-
-
- | Field Name
- |
- Required?
- |
- JSON Type
- |
- Internal Type
- |
- Description
- |
-
-
- TransactionType
- |
- Yes
- |
- string
- |
- UInt16
- |
- The NFTokenBurn transaction type. The integer value is 26.
- |
-
-
- Account
- |
- Yes
- |
- string
- |
- AccountID
- |
- The AccountID that submitted this transaction. The account must be either the present owner of the token or, if the lsfBurnable flag is set in the NFToken, the issuer account or an account authorized by the issuer, (that is, the NFTokenMinter).
- |
-
-
- Owner
- |
- No
- |
- string
- |
- AccountID
- |
- The account that owns the NFToken to be destroyed. This field is required when an issuer burns a NFToken minted using the `tfBurnable` flag that is owned by another account.
- |
-
-
- NFTokenID
- |
- Yes
- |
- string
- |
- Hash256
- |
- Identifies the NFToken object to be removed by the transaction.
- |
-
-
- Owner
- |
- No
- |
- string
- |
- AccountID
- |
- Identifies the owner of the NFToken with the given TokenID. Only used if that owner is different than the account signing this transaction. This is used to burn tokens with the lsfBurnable flag that have been traded.
- |
-
-
+| Field | JSON Type | [Internal Type][] | Description |
+|:------------------|:----------|:------------------|:-------------------------|
+| `NFTokenID` | String | Hash256 | The `NFToken` to be removed by this transaction. |
+| `Owner` | String | AccountID | _(Optional)_ The owner of the `NFToken` to burn. Only used if that owner is different than the account sending this transaction. The issuer or authorized minter can use this field to burn NFTs that have the `lsfBurnable` flag enabled. |
+## Error Cases
-## Account Root Enhancements
-
-
-### NFTokenMinter
-
-
-Issuers might want to issue NFTs from their well known account, while at the same time wanting to delegate the issuance of such NFTs to a mint or other third party.
-
-
-
-
- | Field Name
- |
- Required?
- |
- JSON Type
- |
- Internal Type
- |
- Description
- |
-
-
- NFTokenMinter
- |
-
- |
- string
- |
- AccountID
- |
- The NFTokenMinter field, if set, specifies an alternate account that is allowed to execute the NFTokenMint and NFTokenBurn operations on behalf of the account.
- |
-
-
-
-
-The `SetAccount` transaction allows the `NFTokenMinter` field to be set or cleared.
-
-### MintedNFTokens
-
-
-The `MintedNFTokens` field is used to form the `NFTokenID` of a new object, to ensure the uniqueness of `NFToken` objects. If this field is not present, the value is 0.
-
-
-### BurnedNFTokens
-
-
-The `BurnedNFTokens` field provides a convenient way to determine how many `NFToken` objects issued by an account are still active (that is, not burned). If this field is not present the value 0 is assumed. The field is decremented whenever a token issued by this account is burned.
-
-An account for which the difference in the number of minted and burned tokens, as stored in the `MintedNFTokens` and `BurnedNFTokens` fields respectively, is non-zero cannot be deleted.
+In addition to errors that can occur for all transactions, {{currentpage.name}} transactions can result in the following [transaction result codes](transaction-results.html):
+| Error Code | Description |
+|:-------------------|:--------------------------------------------------------|
+| `temDISABLED` | The [NonFungibleTokensV1 amendment][] is not enabled. |
+| `tecNO_ENTRY` | The specified `TokenID` was not found. |
+| `tecNO_PERMISSION` | The account does not have permission to burn the token. |
{% include '_snippets/rippled-api-links.md' %}
diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokencanceloffer.md b/content/references/protocol-reference/transactions/transaction-types/nftokencanceloffer.md
index 0f68f2b1d3..19cad9b05c 100644
--- a/content/references/protocol-reference/transactions/transaction-types/nftokencanceloffer.md
+++ b/content/references/protocol-reference/transactions/transaction-types/nftokencanceloffer.md
@@ -37,8 +37,7 @@ This transaction removes the listed `NFTokenOffer` object from the ledger, if pr
| Field | JSON Type | [Internal Type][] | Description |
|:------------------|:----------|:------------------|:-------------------------|
-| `TransactionType` | String | UInt16 | NFTokenCancelOffer transaction type. The integer identifier is 28. |
-| `NFTokenOffers` | Array | VECTOR256 | An array of IDs of the `NFTokenOffer` objects to cancel (not the IDs of `NFToken` objects, but the IDs of the `NFTokenOffer` objects). Each entry must be a different [object ID](ledger-object-ids.html) of an [NFTokenOffer](nftokenoffer.html) object; the transaction is invalid if the array contains duplicate entries. |
+| `TokenOffers` | Array | VECTOR256 | An array of IDs of the `NFTokenOffer` objects to cancel (not the IDs of `NFToken` objects, but the IDs of the `NFTokenOffer` objects). Each entry must be a different [object ID](ledger-object-ids.html) of an [NFTokenOffer](nftokenoffer.html) object; the transaction is invalid if the array contains duplicate entries. |
The transaction can succeed even if one or more of the IDs in the `NFTokenOffers` field do not refer to objects that currently exist in the ledger. (For example, those token offers might already have been deleted.) The transaction fails with an error if one of the IDs points to an object that does exist, but is not a [NFTokenOffer](nftokenoffer.html) object.
@@ -46,6 +45,16 @@ It is important to note that if you inadvertently provide a `nft_id` rather than
The transaction fails with an error if one of the IDs points to an object that does exist, but is not a [NFTokenOffer](nftokenoffer.html) object.
+## Error Cases
+
+In addition to errors that can occur for all transactions, {{currentpage.name}} transactions can result in the following [transaction result codes](transaction-results.html):
+
+| Error Code | Description |
+|:-------------------|:--------------------------------------------------------|
+| `temDISABLED` | The [NonFungibleTokensV1 amendment][] is not enabled. |
+| `temMALFORMED` | The transaction was not validly formatted. For example, the `TokenOffers` array was empty or contained more than the maximum number of offers that can be canceled at one time. |
+| `tecNO_PERMISSION` | At least one of the IDs in the `TokenOffers` field refers to an object that cannot be canceled. For example, the sender of this transaction is not the owner or `Destination` of the offer, or the object was not an `NFTokenOffer` type object. |
+
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokencreateoffer.md b/content/references/protocol-reference/transactions/transaction-types/nftokencreateoffer.md
index 3b9a892128..0dfe842bc2 100644
--- a/content/references/protocol-reference/transactions/transaction-types/nftokencreateoffer.md
+++ b/content/references/protocol-reference/transactions/transaction-types/nftokencreateoffer.md
@@ -46,6 +46,25 @@ Transactions of the NFTokenCreateOffer type support additional values in the [`F
| `tfSellToken` | `0x00000001` | `1` | If enabled, indicates that the offer is a sell offer. Otherwise, it is a buy offer. |
+## Error Cases
+
+In addition to errors that can occur for all transactions, {{currentpage.name}} transactions can result in the following [transaction result codes](transaction-results.html):
+
+| Error Code | Description |
+|:---------------------------------|:------------------------------------------|
+| `temDISABLED` | The [NonFungibleTokensV1 amendment][] is not enabled. |
+| `temBAD_AMOUNT` | The `Amount` field is not valid. For example, the amount was zero for a buy offer, or the amount is denominated in fungible tokens but the `NFToken` has the [`lsfOnlyXRP` flag](nftoken.html#nftoken-flags) enabled. |
+| `temBAD_EXPIRATION` | The specified `Expiration` time is invalid (for example, `0`). |
+| `tecDIR_FULL` | The sender already owns too many objects in the ledger, or there are already too many offers to buy or sell this token. |
+| `tecEXPIRED` | The specified `Expiration` time has already passed. |
+| `tecFROZEN` | The `Amount` is denominated in fungible tokens, but one of the trust lines that would receive tokens from this offer is [frozen](freezes.html). This could be the seller's trust line or the `NFToken`'s issuer's trust line (if the `NFToken` has a transfer fee). |
+| `tecINSUFFICIENT_RESERVE` | The sender does not have enough XRP to meet the [reserve requirement](reserves.html) after placing this offer. |
+| `tecNO_DST` | The account specified in the `Destination` field does not exist in the ledger. |
+| `tecNO_ENTRY` | The `NFToken` is not owned by the expected account. |
+| `tecNO_ISSUER` | The issuer specified in the `Amount` field does not exist. |
+| `tecNO_LINE` | The `Amount` field is denominated in fungible tokens, but the `NFToken`'s issuer does not have a trust line for those tokens and the `NFToken` does not have the [`lsfTrustLine` flag](nftoken.html#nftoken-flags) enabled. |
+| `tecUNFUNDED_OFFER` | For a buy offer, the sender does have the funds specified in the `Amount` field available. If the `Amount` is XRP, this could be due to the reserve requirement; if the `Amount` is denominated in fungible tokens, this could be because they are [frozen](freezes.html). |
+| `tefNFTOKEN_IS_NOT_TRANSFERABLE` | The `NFToken` has the [`lsfTransferable` flag](nftoken.html#nftoken-flags) disabled and this transaction would not transfer the `NFToken` to or from the issuer. |
diff --git a/content/references/protocol-reference/transactions/transaction-types/nftokenmint.md b/content/references/protocol-reference/transactions/transaction-types/nftokenmint.md
index 20f0838716..a743f24528 100644
--- a/content/references/protocol-reference/transactions/transaction-types/nftokenmint.md
+++ b/content/references/protocol-reference/transactions/transaction-types/nftokenmint.md
@@ -10,7 +10,7 @@ status: not_enabled
[[Source]](https://github.com/ripple/rippled/blob/xls20/src/ripple/app/tx/impl/NFTokenMint.cpp)
{% include '_snippets/nfts-disclaimer.md' %}
-The `NFTokenMint` transaction creates a NFToken and adds it to the relevant [NFTokenPage object][] of the `NFTokenMinter` as a [NFToken][] object. A required parameter to this transaction is the `Token` field specifying the actual token. This transaction is the only opportunity the `NFTokenMinter` has to specify any token fields that are defined as immutable (for example, the `Flags`).
+The `NFTokenMint` transaction creates a non-fungible token and adds it to the relevant [NFTokenPage object][] of the `NFTokenMinter` as an [NFToken][] object. A required parameter to this transaction is the `Token` field specifying the actual token. This transaction is the only opportunity the `NFTokenMinter` has to specify any token fields that are defined as immutable (for example, the `TokenFlags`).
If the transaction is successful, the newly minted token is owned by the account (the `minter` account) that executed the transaction. If needed, the server creates a new `NFTokenPage` for the account and applies a reserve charge.
@@ -26,7 +26,7 @@ If the transaction is successful, the newly minted token is owned by the account
"TransferFee": 314,
"NFTokenTaxon": 0,
"Flags": 8,
- "Fee": 10,
+ "Fee": "10",
"URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
"Memos": [
{
@@ -44,15 +44,17 @@ If the transaction is successful, the newly minted token is owned by the account
This transaction assumes that the issuer, `rNCFjv8Ek5oDrNiMJ3pw6eLLFtMjZLJnf2`, has set the `NFTokenMinter` field in its `AccountRoot` to `rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B`, thereby authorizing that account to mint tokens on its behalf.
-
{% include '_snippets/tx-fields-intro.md' %}
| Field | JSON Type | [Internal Type][] | Description |
|:--------------|:--------------------|:------------------|:-------------------|
| `NFTokenTaxon` | Number | UInt32 | The taxon associated with the token. The taxon is generally a value chosen by the minter of the token. A given taxon can be used for multiple tokens. Taxon identifiers greater than `0xFFFF'FFFF` are disallowed. |
| `Issuer` | String | AccountID | _(Optional)_ The issuer of the token, if the sender of the account is issuing it on behalf of another account. This field must be omitted if the account sending the transaction is the issuer of the `NFToken`. If provided, the issuer's [AccountRoot object][] must have the `NFTokenMinter` field set to the sender of this transaction (this transaction's `Account` field). |
-| `TransferFee` | Number | UInt16 | _(Optional)_ Specifies the fee charged by the issuer for secondary sales of the token, if such sales are allowed. Valid values for this field are between 0 and 50000 inclusive, allowing transfer rates between 0.000% and 50.000% in increments of 0.001%. This field must NOT be present if the `tfTransferable` flag is not set. |
-| `URI` | String | Blob | _(Optional)_ Up to 256 bytes of arbitrary data. In JSON, this should be encoded as a string of hexadecimal. The hex must be capitalized, not lowercase. You can use the [`xrpl.convertStringToHex`](https://js.xrpl.org/modules.html#convertStringToHex) utility to convert a URI to its hexadecimal equivalent. This is intended to be a URI that points to the data or metadata associated with the NFToken. The contents could decode to an HTTP or HTTPS URL, an IPFS URI, a magnet link, immediate data encoded as an [RFC2379 "data" URL](https://datatracker.ietf.org/doc/html/rfc2397), or even an issuer-specific encoding. The URI is NOT checked for validity.
+| `TransferFee` | Number | UInt16 | _(Optional)_ The value specifies the fee charged by the issuer for secondary sales of the `NFToken`, if such sales are allowed. Valid values for this field are between 0 and 9999 inclusive, allowing transfer rates of between 0.00% and 99.99% in increments of 0.01. If this field is provided, the transaction MUST have the [`tfTransferable` flag](#nftokenmint-flags) enabled. |
+| `URI` | String | Blob | _(Optional)_ Up to 256 bytes of arbitrary data. In JSON, this should be encoded as a string of hexadecimal. You can use the [`xrpl.convertStringToHex`](https://js.xrpl.org/modules.html#convertStringToHex) utility to convert a URI to its hexadecimal equivalent. This is intended to be a URI that points to the data or metadata associated with the NFT. The contents could decode to an HTTP or HTTPS URL, an IPFS URI, a magnet link, immediate data encoded as an [RFC2379 "data" URL](https://datatracker.ietf.org/doc/html/rfc2397), or even an issuer-specific encoding. The URI is NOT checked for validity. |
+
+**Note:** The xrpl.js client library throws an error if you try to sign a transaction with the `URI` field in lowercase hexadecimal. This is a [bug](https://github.com/XRPLF/xrpl.js/issues/2004).
+
## NFTokenMint Flags
@@ -87,7 +89,7 @@ If you want to issue an NFT for another account there are two things you must do
"TransferFee": 314,
"NFTokenTaxon": 0,
"Flags": 8,
- "Fee": 10,
+ "Fee": "10",
"URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
"Memos": [
{
@@ -106,12 +108,18 @@ This transaction assumes that the issuer, `rNCFjv8Ek5oDrNiMJ3pw6eLLFtMjZLJnf2`,
## Error Cases
-- If the `TransferFee` field is not within the acceptable range (0 to 9999 inclusive) the transaction fails with `temBAD_NFTOKEN_TRANSFER_FEE`.
-- If the `URI` field is longer than 256 bytes, the transaction fails with `temMALFORMED`.
-- If the `Issuer` field refers to an account that does not exist, the transaction fails with `tecNO_ISSUER`.
-- If account referenced by the `Issuer` field has not authorized this transaction's sender (using the `NFTokenMinter` setting) to mint `NFToken`s on their behalf, the transaction fails with `tecNO_PERMISSION`.
-- If the owner would not meet the updated [reserve requirement](reserves.html) after minting the token, the transaction fails with `tecINSUFFICIENT_RESERVE`. Note that new `NFToken`s only increase the owner's reserve if it requires a new [NFTokenPage object][], which can each hold up to 32 NFTokens.
-- If the `Issuer`'s `MintedNFTokens` field maxes out, the transaction fails with `tecMAX_SEQUENCE_REACHED`. This is only possible if 232-1 `NFToken`s have been minted in total by the issuer or on their behalf.
+In addition to errors that can occur for all transactions, {{currentpage.name}} transactions can result in the following [transaction result codes](transaction-results.html):
+
+| Error Code | Description |
+|:------------------------------|:---------------------------------------------|
+| `temDISABLED` | The [NonFungibleTokensV1 amendment][] is not enabled. |
+| `temBAD_NFTOKEN_TRANSFER_FEE` | The `TransferFee` is not within the acceptable range. |
+| `temMALFORMED` | The transaction was not validly specified. For example, the `URI` field is longer than 256 bytes. |
+| `tecNO_ISSUER` | The `Issuer` refers to an account that does not exist in the ledger. |
+| `tecNO_PERMISSION` | The account referenced by the `Issuer` field has not authorized this transaction's sender (using the `NFTokenMinter` setting) to mint on their behalf. |
+| `tecINSUFFICIENT_RESERVE` | The owner would not meet the updated [reserve requirement](reserves.html) after minting the token. Note that new `NFToken`s only increase the owner's reserve if it requires a new [NFTokenPage object][], which can each hold up to 32 NFTs. |
+| `tecMAX_SEQUENCE_REACHED` | The `Issuer`'s `MintedNFTokens` field is already at its maximum. This is only possible if 232-1 `NFToken`s have been minted in total by the issuer or on their behalf. |
+
{% include '_snippets/rippled-api-links.md' %}
diff --git a/content/references/protocol-reference/transactions/transaction-types/signerlistset.md b/content/references/protocol-reference/transactions/transaction-types/signerlistset.md
index 6704668e58..556e10874c 100644
--- a/content/references/protocol-reference/transactions/transaction-types/signerlistset.md
+++ b/content/references/protocol-reference/transactions/transaction-types/signerlistset.md
@@ -48,7 +48,7 @@ The SignerListSet transaction creates, replaces, or removes a list of signers th
| Field | JSON Type | [Internal Type][] | Description |
|:--------------|:----------|:------------------|:-----------------------------|
| `SignerQuorum` | Number | UInt32 | A target number for the signer weights. A multi-signature from this list is valid only if the sum weights of the signatures provided is greater than or equal to this value. To delete a signer list, use the value `0`. |
-| `SignerEntries` | Array | Array | (Omitted when deleting) Array of [`SignerEntry` objects](signerlist.html#signer-entry-object), indicating the addresses and weights of signers in this list. This signer list must have at least 1 member and no more than 8 members. No address may appear more than once in the list, nor may the `Account` submitting the transaction appear in the list. |
+| `SignerEntries` | Array | Array | (Omitted when deleting) Array of [`SignerEntry` objects](signerlist.html#signer-entry-object), indicating the addresses and weights of signers in this list. This signer list must have at least 1 member and no more than 8 members. If the [ExpandedSignerList amendment][] :not_enabled: is enabled, the list can have up to 32 members. No address may appear more than once in the list, nor may the `Account` submitting the transaction appear in the list. |
A successful SignerListSet transaction replaces the account's [`SignerList` object](signerlist.html) in the ledger, or adds one if it did not exist before. An account may not have more than one signer list. To delete a signer list, you must set `SignerQuorum` to `0` _and_ omit the `SignerEntries` field. Otherwise, the transaction fails with the error [`temMALFORMED`](tem-codes.html). A transaction to delete a signer list is considered successful even if there was no signer list to delete.
diff --git a/content/references/rippled-api/public-rippled-methods/account-methods/account_channels.ja.md b/content/references/rippled-api/public-rippled-methods/account-methods/account_channels.ja.md
index 8b29386773..c1e59a44aa 100644
--- a/content/references/rippled-api/public-rippled-methods/account-methods/account_channels.ja.md
+++ b/content/references/rippled-api/public-rippled-methods/account-methods/account_channels.ja.md
@@ -21,11 +21,11 @@ _([PayChan Amendment][]が有効になっている必要があります。[新
```json
{
- "id": 1,
- "command": "account_channels",
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
- "ledger_index": "validated"
+ "id": 1,
+ "command": "account_channels",
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "destination_account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
+ "ledger_index": "validated"
}
```
@@ -33,12 +33,12 @@ _([PayChan Amendment][]が有効になっている必要があります。[新
```json
{
- "method": "account_channels",
- "params": [{
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
- "ledger_index": "validated"
- }]
+ "method": "account_channels",
+ "params": [{
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "destination_account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
+ "ledger_index": "validated"
+ }]
}
```
@@ -46,11 +46,14 @@ _([PayChan Amendment][]が有効になっている必要があります。[新
```bash
#Syntax: account_channels [] []
-rippled account_channels rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn validated
+rippled account_channels rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn ra5nK24KXen9AHvsdFTKHSANinZseWnPcX validated
```
+[試してみる>](websocket-api-tool.html#account_channels)
+
+
要求には以下のパラメーターが含まれます。
| フィールド | 型 | 説明 |
@@ -72,29 +75,27 @@ rippled account_channels rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH rf1BiGeXwwQoi8Z2ueFY
```json
{
- "id": 2,
- "status": "success",
- "type": "response",
- "result": {
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "channels": [
- {
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "amount": "100000000",
- "balance": "1000000",
- "channel_id": "5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3",
- "destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
- "destination_tag": 20170428,
- "expiration": 547073182,
- "public_key": "aB44YfzW24VDEJQ2UuLPV2PvqcPCSoLnL7y5M1EzhdW4LnK5xMS3",
- "public_key_hex": "023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6",
- "settle_delay": 86400
- }
- ],
- "ledger_hash": "F168208EECDAA57DDAC32780CDD8330FA3E89F0E84D27A9052AA2F88681EBD08",
- "ledger_index": 37230642,
- "validated": true
- }
+ "id": 1,
+ "result": {
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "channels": [
+ {
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "amount": "1000",
+ "balance": "0",
+ "channel_id": "C7F634794B79DB40E87179A9D1BF05D05797AE7E92DF8E93FD6656E8C4BE3AE7",
+ "destination_account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
+ "public_key": "aBR7mdD75Ycs8DRhMgQ4EMUEmBArF8SEh1hfjrT2V9DQTLNbJVqw",
+ "public_key_hex": "03CFD18E689434F032A4E84C63E2A3A6472D684EAF4FD52CA67742F3E24BAE81B2",
+ "settle_delay": 60
+ }
+ ],
+ "ledger_hash": "1EDBBA3C793863366DF5B31C2174B6B5E6DF6DB89A7212B86838489148E2A581",
+ "ledger_index": 71766314,
+ "validated": true
+ },
+ "status": "success",
+ "type": "response"
}
```
@@ -104,24 +105,25 @@ rippled account_channels rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH rf1BiGeXwwQoi8Z2ueFY
200 OK
{
- "result": {
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "channels": [{
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "amount": "100000000",
- "balance": "0",
- "channel_id": "5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3",
- "destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
- "destination_tag": 20170428,
- "public_key": "aB44YfzW24VDEJQ2UuLPV2PvqcPCSoLnL7y5M1EzhdW4LnK5xMS3",
- "public_key_hex": "023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6",
- "settle_delay": 86400
- }],
- "ledger_hash": "B9D3D80EDF4083A06B2D51202E0BFB63C46FC0985E015D06767C21A62853BF6D",
- "ledger_index": 37230600,
- "status": "success",
- "validated": true
- }
+ "result": {
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "channels": [
+ {
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "amount": "1000",
+ "balance": "0",
+ "channel_id": "C7F634794B79DB40E87179A9D1BF05D05797AE7E92DF8E93FD6656E8C4BE3AE7",
+ "destination_account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
+ "public_key": "aBR7mdD75Ycs8DRhMgQ4EMUEmBArF8SEh1hfjrT2V9DQTLNbJVqw",
+ "public_key_hex": "03CFD18E689434F032A4E84C63E2A3A6472D684EAF4FD52CA67742F3E24BAE81B2",
+ "settle_delay": 60
+ }
+ ],
+ "ledger_hash": "27F530E5C93ED5C13994812787C1ED073C822BAEC7597964608F2C049C2ACD2D",
+ "ledger_index": 71766343,
+ "status": "success",
+ "validated": true
+ }
}
```
@@ -131,24 +133,25 @@ rippled account_channels rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH rf1BiGeXwwQoi8Z2ueFY
200 OK
{
- "result": {
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "channels": [{
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "amount": "100000000",
- "balance": "0",
- "channel_id": "5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3",
- "destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
- "destination_tag": 20170428,
- "public_key": "aB44YfzW24VDEJQ2UuLPV2PvqcPCSoLnL7y5M1EzhdW4LnK5xMS3",
- "public_key_hex": "023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6",
- "settle_delay": 86400
- }],
- "ledger_hash": "B9D3D80EDF4083A06B2D51202E0BFB63C46FC0985E015D06767C21A62853BF6D",
- "ledger_index": 37230600,
- "status": "success",
- "validated": true
- }
+ "result": {
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "channels": [
+ {
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "amount": "1000",
+ "balance": "0",
+ "channel_id": "C7F634794B79DB40E87179A9D1BF05D05797AE7E92DF8E93FD6656E8C4BE3AE7",
+ "destination_account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
+ "public_key": "aBR7mdD75Ycs8DRhMgQ4EMUEmBArF8SEh1hfjrT2V9DQTLNbJVqw",
+ "public_key_hex": "03CFD18E689434F032A4E84C63E2A3A6472D684EAF4FD52CA67742F3E24BAE81B2",
+ "settle_delay": 60
+ }
+ ],
+ "ledger_hash": "27F530E5C93ED5C13994812787C1ED073C822BAEC7597964608F2C049C2ACD2D",
+ "ledger_index": 71766343,
+ "status": "success",
+ "validated": true
+ }
}
```
diff --git a/content/references/rippled-api/public-rippled-methods/account-methods/account_channels.md b/content/references/rippled-api/public-rippled-methods/account-methods/account_channels.md
index a911881c12..a3a44c5e0f 100644
--- a/content/references/rippled-api/public-rippled-methods/account-methods/account_channels.md
+++ b/content/references/rippled-api/public-rippled-methods/account-methods/account_channels.md
@@ -6,7 +6,7 @@ labels:
- Payment Channels
---
# account_channels
-[[Source]](https://github.com/ripple/rippled/blob/release/src/ripple/rpc/handlers/AccountChannels.cpp "Source")
+[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountChannels.cpp "Source")
_(Added by the [PayChan amendment][]. [New in: rippled 0.33.0][])_
@@ -23,8 +23,8 @@ An example of the request format:
{
"id": 1,
"command": "account_channels",
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "destination_account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
"ledger_index": "validated"
}
```
@@ -35,8 +35,8 @@ An example of the request format:
{
"method": "account_channels",
"params": [{
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "destination_account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
"ledger_index": "validated"
}]
}
@@ -46,9 +46,11 @@ An example of the request format:
```bash
#Syntax: account_channels [] []
-rippled account_channels rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn validated
+rippled account_channels rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn ra5nK24KXen9AHvsdFTKHSANinZseWnPcX validated
```
+[Try it! >](websocket-api-tool.html#account_channels)
+
The request includes the following parameters:
@@ -72,29 +74,27 @@ An example of a successful response:
```json
{
- "id": 2,
- "status": "success",
- "type": "response",
+ "id": 1,
"result": {
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"channels": [
{
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "amount": "100000000",
- "balance": "1000000",
- "channel_id": "5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3",
- "destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
- "destination_tag": 20170428,
- "expiration": 547073182,
- "public_key": "aB44YfzW24VDEJQ2UuLPV2PvqcPCSoLnL7y5M1EzhdW4LnK5xMS3",
- "public_key_hex": "023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6",
- "settle_delay": 86400
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "amount": "1000",
+ "balance": "0",
+ "channel_id": "C7F634794B79DB40E87179A9D1BF05D05797AE7E92DF8E93FD6656E8C4BE3AE7",
+ "destination_account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
+ "public_key": "aBR7mdD75Ycs8DRhMgQ4EMUEmBArF8SEh1hfjrT2V9DQTLNbJVqw",
+ "public_key_hex": "03CFD18E689434F032A4E84C63E2A3A6472D684EAF4FD52CA67742F3E24BAE81B2",
+ "settle_delay": 60
}
],
- "ledger_hash": "F168208EECDAA57DDAC32780CDD8330FA3E89F0E84D27A9052AA2F88681EBD08",
- "ledger_index": 37230642,
+ "ledger_hash": "1EDBBA3C793863366DF5B31C2174B6B5E6DF6DB89A7212B86838489148E2A581",
+ "ledger_index": 71766314,
"validated": true
- }
+ },
+ "status": "success",
+ "type": "response"
}
```
@@ -104,24 +104,25 @@ An example of a successful response:
200 OK
{
- "result": {
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "channels": [{
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "amount": "100000000",
- "balance": "0",
- "channel_id": "5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3",
- "destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
- "destination_tag": 20170428,
- "public_key": "aB44YfzW24VDEJQ2UuLPV2PvqcPCSoLnL7y5M1EzhdW4LnK5xMS3",
- "public_key_hex": "023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6",
- "settle_delay": 86400
- }],
- "ledger_hash": "B9D3D80EDF4083A06B2D51202E0BFB63C46FC0985E015D06767C21A62853BF6D",
- "ledger_index": 37230600,
- "status": "success",
- "validated": true
- }
+ "result": {
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "channels": [
+ {
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "amount": "1000",
+ "balance": "0",
+ "channel_id": "C7F634794B79DB40E87179A9D1BF05D05797AE7E92DF8E93FD6656E8C4BE3AE7",
+ "destination_account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
+ "public_key": "aBR7mdD75Ycs8DRhMgQ4EMUEmBArF8SEh1hfjrT2V9DQTLNbJVqw",
+ "public_key_hex": "03CFD18E689434F032A4E84C63E2A3A6472D684EAF4FD52CA67742F3E24BAE81B2",
+ "settle_delay": 60
+ }
+ ],
+ "ledger_hash": "27F530E5C93ED5C13994812787C1ED073C822BAEC7597964608F2C049C2ACD2D",
+ "ledger_index": 71766343,
+ "status": "success",
+ "validated": true
+ }
}
```
@@ -131,24 +132,25 @@ An example of a successful response:
200 OK
{
- "result": {
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "channels": [{
- "account": "rN7n7otQDd6FczFgLdSqtcsAUxDkw6fzRH",
- "amount": "100000000",
- "balance": "0",
- "channel_id": "5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3",
- "destination_account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
- "destination_tag": 20170428,
- "public_key": "aB44YfzW24VDEJQ2UuLPV2PvqcPCSoLnL7y5M1EzhdW4LnK5xMS3",
- "public_key_hex": "023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6",
- "settle_delay": 86400
- }],
- "ledger_hash": "B9D3D80EDF4083A06B2D51202E0BFB63C46FC0985E015D06767C21A62853BF6D",
- "ledger_index": 37230600,
- "status": "success",
- "validated": true
- }
+ "result": {
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "channels": [
+ {
+ "account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
+ "amount": "1000",
+ "balance": "0",
+ "channel_id": "C7F634794B79DB40E87179A9D1BF05D05797AE7E92DF8E93FD6656E8C4BE3AE7",
+ "destination_account": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
+ "public_key": "aBR7mdD75Ycs8DRhMgQ4EMUEmBArF8SEh1hfjrT2V9DQTLNbJVqw",
+ "public_key_hex": "03CFD18E689434F032A4E84C63E2A3A6472D684EAF4FD52CA67742F3E24BAE81B2",
+ "settle_delay": 60
+ }
+ ],
+ "ledger_hash": "27F530E5C93ED5C13994812787C1ED073C822BAEC7597964608F2C049C2ACD2D",
+ "ledger_index": 71766343,
+ "status": "success",
+ "validated": true
+ }
}
```
diff --git a/content/references/rippled-api/public-rippled-methods/account-methods/account_nfts.md b/content/references/rippled-api/public-rippled-methods/account-methods/account_nfts.md
new file mode 100644
index 0000000000..46e22cea84
--- /dev/null
+++ b/content/references/rippled-api/public-rippled-methods/account-methods/account_nfts.md
@@ -0,0 +1,165 @@
+---
+html: account_nfts.html
+parent: account-methods.html
+blurb: Get a list of all NFTs for an account.
+labels:
+ - Non-fungible Tokens, NFTs
+status: not_enabled
+---
+# account_nfts
+[[Source]](https://github.com/ripple/rippled/blob/master/src/ripple/rpc/handlers/AccountObjects.cpp "Source")
+
+The `account_nfts` method returns a list of `NFToken` objects for the specified account.
+
+{% include '_snippets/nfts-disclaimer.md' %}
+
+## Request Format
+An example of the request format:
+
+{% include '_snippets/no-cli-syntax.md' %}
+
+
+
+*WebSocket*
+
+```json
+{
+ "command": "account_nfts",
+ "account": "rsuHaTvJh1bDmDoxX9QcKP7HEBSBt4XsHx",
+ "ledger_index": "validated"
+}
+```
+
+*JSON-RPC*
+
+```json
+{
+ "method": "account_nfts",
+ "params": [{
+ "account": "rsuHaTvJh1bDmDoxX9QcKP7HEBSBt4XsHx",
+ "ledger_index": "validated"
+ }]
+}
+```
+
+
+
+[Try it! >](websocket-api-tool.html?server=wss%3A%2F%2Fxls20-sandbox.rippletest.net%3A51233%2F#account_nfts)
+
+The request includes the following parameters:
+
+| Field | Type | Description |
+|:---------------|:-----------------|:-----------------------------------------|
+| `account` | String | The unique identifier of an account, typically the account's [Address][]. The request returns a list of NFTs owned by this account. |
+| `ledger_hash` | String | _(Optional)_ A 20-byte hex string for the ledger version to use. (See [Specifying Ledgers][]) |
+| `ledger_index` | String or Number | _(Optional)_ The [ledger index][] of the ledger to use, or a shortcut string to choose a ledger automatically. (See [Specifying Ledgers][]) |
+| `limit` | Integer | _(Optional)_ Limit the number of [token pages][NFTokenPage object] to retrieve. Each page can contain up to 32 NFTs. The `limit` value cannot be lower than 20 or more than 400. The default is 100. |
+| `marker` | [Marker][] | _(Optional)_ Value from a previous paginated response. Resume retrieving data where that response left off. |
+
+
+## Response Format
+An example of a successful response:
+
+
+
+*WebSocket*
+
+```json
+{
+ "result": {
+ "account": "rsuHaTvJh1bDmDoxX9QcKP7HEBSBt4XsHx",
+ "account_nfts": [
+ {
+ "Flags": 1,
+ "Issuer": "rGJUF4PvVkMNxG6Bg6AKg3avhrtQyAffcm",
+ "NFTokenID": "00010000A7CAD27B688D14BA1A9FA5366554D6ADCF9CE0875B974D9F00000004",
+ "NFTokenTaxon": 0,
+ "URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
+ "nft_serial": 4
+ },
+ {
+ "Flags": 1,
+ "Issuer": "rGJUF4PvVkMNxG6Bg6AKg3avhrtQyAffcm",
+ "NFTokenID": "00010000A7CAD27B688D14BA1A9FA5366554D6ADCF9CE087727D1EA000000005",
+ "NFTokenTaxon": 0,
+ "URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
+ "nft_serial": 5
+ }
+ ],
+ "ledger_hash": "7971093E67341E325251268A5B7CD665EF450B126F67DF8384D964DF834961E8",
+ "ledger_index": 2380540,
+ "validated": true
+ },
+ "status": "success",
+ "type": "response"
+}
+```
+
+*JSON-RPC*
+
+```json
+{
+ "result": {
+ "account": "rsuHaTvJh1bDmDoxX9QcKP7HEBSBt4XsHx",
+ "account_nfts": [
+ {
+ "Flags": 1,
+ "Issuer": "rGJUF4PvVkMNxG6Bg6AKg3avhrtQyAffcm",
+ "NFTokenID": "00010000A7CAD27B688D14BA1A9FA5366554D6ADCF9CE0875B974D9F00000004",
+ "NFTokenTaxon": 0,
+ "URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
+ "nft_serial": 4
+ },
+ {
+ "Flags": 1,
+ "Issuer": "rGJUF4PvVkMNxG6Bg6AKg3avhrtQyAffcm",
+ "NFTokenID": "00010000A7CAD27B688D14BA1A9FA5366554D6ADCF9CE087727D1EA000000005",
+ "NFTokenTaxon": 0,
+ "URI": "697066733A2F2F62616679626569676479727A74357366703775646D37687537367568377932366E6634646675796C71616266336F636C67747179353566627A6469",
+ "nft_serial": 5
+ }
+ ],
+ "ledger_hash": "46497E9FF17A993324F1A0A693DC068B467184023C7FD162812265EAAFEB97CB",
+ "ledger_index": 2380559,
+ "status": "success",
+ "validated": true
+ }
+}
+```
+
+
+
+The response follows the [standard format][], with a successful result containing the following fields:
+
+| `Field` | Type | Description |
+|:---------------|:-----------------|:-----------------------------------------|
+| `account` | String | The account that owns the list of NFTs |
+| `account_nfts` | Array | A list of NFTs owned by the account, formatted as **NFT Objects** (see below). |
+| `ledger_hash` | String | (May be omitted) The identifying hash of the ledger that was used to generate this response. |
+| `ledger_index` | Number - [Ledger Index][] | _(May be omitted)_ The ledger index of the ledger that was used to generate this response. |
+| `ledger_current_index` | Number - [Ledger Index][] | _(May be omitted)_ The ledger index of the current in-progress ledger version, which was used to generate this response. |
+| `validated` | Boolean | If included and set to `true`, the information in this response comes from a validated ledger version. Otherwise, the information is subject to change. |
+
+### NFT Objects
+
+Each object in the `account_nfts` array represents one [NFToken][] and has the following fields:
+
+| `Field` | Type | Description |
+|:---------------|:---------------------|:-------------------------------------|
+| `Flags` | Number | A bit-map of boolean flags enabled for this NFToken. See [NFToken Flags](nftoken.html#nftoken-flags) for possible values. |
+| `Issuer` | String - [Address][] | The account that issued this NFToken. |
+| `NFTokenID` | String | The unique identifier of this NFToken, in hexadecimal. |
+| `NFTokenTaxon` | Number | The unscrambled version of this token's [taxon](nftoken.html#taxon). Several tokens with the same taxon might represent instances of a limited series. |
+| `URI` | String | The URI data associated with this NFToken, in hexadecimal. |
+| `nft_serial` | Number | The token sequence number of this NFToken, which is unique for its issuer. |
+
+## Possible Errors
+
+* Any of the [universal error types][].
+* `invalidParams` - One or more fields are specified incorrectly, or one or more required fields are missing.
+* `actNotFound` - The [Address][] specified in the `account` field of the request does not correspond to an account in the ledger.
+* `lgrNotFound` - The ledger specified by the `ledger_hash` or `ledger_index` does not exist, or it does exist but the server does not have it.
+
+
+{% include '_snippets/rippled_versions.md' %}
+{% include '_snippets/rippled-api-links.md' %}
diff --git a/content/references/rippled-api/public-rippled-methods/path-and-order-book-methods/nft_buy_offers.md b/content/references/rippled-api/public-rippled-methods/path-and-order-book-methods/nft_buy_offers.md
new file mode 100644
index 0000000000..33ac0e3c02
--- /dev/null
+++ b/content/references/rippled-api/public-rippled-methods/path-and-order-book-methods/nft_buy_offers.md
@@ -0,0 +1,135 @@
+---
+html: nft_buy_offers.html
+parent: path-and-order-book-methods.html
+blurb: Get a list of all buy offers for a NFToken.
+labels:
+ - Non-fungible Tokens, NFTs, NFTokens
+status: not_enabled
+---
+# nft_buy_offers
+[[Source]](https://github.com/ripple/rippled/blob/xls20/src/ripple/rpc/handlers/NFTOffers.cpp "Source")
+
+The `nft_buy_offers` method returns a list of buy offers for a given [NFToken][] object.
+
+{% include '_snippets/nfts-disclaimer.md' %}
+
+## Request Format
+An example of the request format:
+
+{% include '_snippets/no-cli-syntax.md' %}
+
+
+
+*WebSocket*
+
+```json
+{
+ "command": "nft_buy_offers",
+ "nft_id": "00090000D0B007439B080E9B05BF62403911301A7B1F0CFAA048C0A200000007",
+ "ledger_index": "validated"
+}
+```
+
+*JSON-RPC*
+
+```json
+{
+ "method": "nft_buy_offers",
+ "params": [{
+ "nft_id": "00090000D0B007439B080E9B05BF62403911301A7B1F0CFAA048C0A200000007",
+ "ledger_index": "validated"
+ }]
+}
+```
+
+
+
+[Try it! >](websocket-api-tool.html?server=wss%3A%2F%2Fxls20-sandbox.rippletest.net%3A51233%2F#nft_buy_offers)
+
+The request includes the following parameters:
+
+| Field | Type | Description |
+|:---------------|:-----------------|:-----------------------------------------|
+| `nft_id` | String | The unique identifier of a [NFToken][] object. |
+| `ledger_hash` | String | _(Optional)_ A 20-byte hex string for the ledger version to use. (See [Specifying Ledgers][]) |
+| `ledger_index` | String or Number | _(Optional)_ The [ledger index][] of the ledger to use, or a shortcut string to choose a ledger automatically. (See [Specifying Ledgers][]) |
+| `limit` | Integer | _(Optional)_ Limit the number of NFT buy offers to retrieve. This value cannot be lower than 50 or more than 500. The default is 250. |
+| `marker` | [Marker][] | _(Optional)_ Value from a previous paginated response. Resume retrieving data where that response left off. |
+
+
+## Response Format
+An example of a successful response:
+
+
+
+*WebSocket*
+
+```json
+{
+ "result": {
+ "nft_id": "00090000D0B007439B080E9B05BF62403911301A7B1F0CFAA048C0A200000007",
+ "offers": [
+ {
+ "amount": "1500",
+ "flags": 0,
+ "nft_offer_index": "3212D26DB00031889D4EF7D9129BB0FA673B5B40B1759564486C0F0946BA203F",
+ "owner": "rsuHaTvJh1bDmDoxX9QcKP7HEBSBt4XsHx"
+ }
+ ]
+ },
+ "status": "success",
+ "type": "response"
+}
+```
+
+*JSON-RPC*
+
+```json
+{
+ "result": {
+ "nft_id": "00090000D0B007439B080E9B05BF62403911301A7B1F0CFAA048C0A200000007",
+ "offers": [
+ {
+ "amount": "1500",
+ "flags": 0,
+ "nft_offer_index": "3212D26DB00031889D4EF7D9129BB0FA673B5B40B1759564486C0F0946BA203F",
+ "owner": "rsuHaTvJh1bDmDoxX9QcKP7HEBSBt4XsHx"
+ }
+ ],
+ "status": "success"
+ }
+}
+```
+
+
+
+The response follows the [standard format][], with a successful result containing the following fields:
+
+| `Field` | Type | Description |
+|:---------|:-----------|:-----------------------------------------------------|
+| `nft_id` | String | The NFToken these offers are for, as specified in the request. |
+| `offers` | Array | A list of buy offers for the token. Each of these is formatted as a **Buy Offer** (see below). |
+| `limit` | Number | _(May be omitted)_The `limit`, as specified in the request. |
+| `marker` | [Marker][] | _(May be omitted)_ Server-defined value indicating the response is paginated. Pass this to the next call to resume where this call left off. Omitted when there are no pages of information after this one. |
+
+### Buy Offers
+
+Each member of the `offers` array represents one [NFTokenOffer object][] to buy the NFT in question and has the following fields:
+
+| `Field` | Type | Description |
+|:------------------|:-----------------|:--------------------------------------|
+| `amount` | String or Object | The amount offered to buy the NFT for, as a String representing an amount in drops of XRP, or an object representing an amount of a fungible token. (See [Specifying Currency Amounts][Currency Amount]) |
+| `flags` | Number | A set of bit-flags for this offer. See [NFTokenOffer flags](nftokenoffer.html#nftokenoffer-flags) for possible values. |
+| `nft_offer_index` | String | The [ledger object ID](ledger-object-ids.html) of this offer. |
+| `owner` | String | The account that placed this offer. |
+
+## Possible Errors
+
+* Any of the [universal error types][].
+* `invalidParams` - One or more fields are specified incorrectly, or one or more required fields are missing.
+* `actNotFound` - The [Address][] specified in the `account` field of the request does not correspond to an account in the ledger.
+* `lgrNotFound` - The ledger specified by the `ledger_hash` or `ledger_index` does not exist, or it does exist but the server does not have it.
+
+
+{% include '_snippets/rippled_versions.md' %}
+{% include '_snippets/rippled-api-links.md' %}
diff --git a/content/references/rippled-api/public-rippled-methods/path-and-order-book-methods/nft_sell_offers.md b/content/references/rippled-api/public-rippled-methods/path-and-order-book-methods/nft_sell_offers.md
new file mode 100644
index 0000000000..5452b3a5e1
--- /dev/null
+++ b/content/references/rippled-api/public-rippled-methods/path-and-order-book-methods/nft_sell_offers.md
@@ -0,0 +1,127 @@
+---
+html: nft_sell_offers.html
+parent: path-and-order-book-methods.html
+blurb: Get a list of all sell offers for a NFToken.
+labels:
+ - Non-fungible Tokens, NFTs, NFTokens
+status: not_enabled
+---
+# nft_sell_offers
+[[Source]](https://github.com/ripple/rippled/blob/xls20/src/ripple/rpc/handlers/NFTOffers.cpp "Source")
+{% include '_snippets/nfts-disclaimer.md' %}
+
+The `nft_sell_offers` method returns a list of sell offers for a given [NFToken][] object.
+
+## Request Format
+An example of the request format:
+
+{% include '_snippets/no-cli-syntax.md' %}
+
+
+
+*WebSocket*
+
+```json
+{
+ "command": "nft_sell_offers",
+ "nft_id": "00090000D0B007439B080E9B05BF62403911301A7B1F0CFAA048C0A200000007",
+ "ledger_index": "validated"
+}
+```
+
+*JSON-RPC*
+
+```json
+{
+ "method": "nft_sell_offers",
+ "tokenid": "00090000D0B007439B080E9B05BF62403911301A7B1F0CFAA048C0A200000007"
+}
+```
+
+
+
+[Try it! >](websocket-api-tool.html?server=wss%3A%2F%2Fxls20-sandbox.rippletest.net%3A51233%2F#nft_sell_offers)
+
+The request includes the following parameters:
+
+| Field | Type | Description |
+|:----------------------|:---------------------------|:------------------------|
+| `tokenid` | String | The unique identifier of a NFToken object. |
+|
+## Response Format
+An example of a successful response:
+
+
+
+*WebSocket*
+
+```json
+{
+ "result": {
+ "nft_id": "00090000D0B007439B080E9B05BF62403911301A7B1F0CFAA048C0A200000007",
+ "offers": [
+ {
+ "amount": "1000",
+ "flags": 1,
+ "nft_offer_index": "9E28E366573187F8E5B85CE301F229E061A619EE5A589EF740088F8843BF10A1",
+ "owner": "rLpSRZ1E8JHyNDZeHYsQs1R5cwDCB3uuZt"
+ }
+ ]
+ },
+ "status": "success",
+ "type": "response"
+}
+```
+
+*JSON-RPC*
+
+```json
+{
+ "result": {
+ "nft_id": "00090000D0B007439B080E9B05BF62403911301A7B1F0CFAA048C0A200000007",
+ "offers": [
+ {
+ "amount": "1000",
+ "flags": 1,
+ "nft_offer_index": "9E28E366573187F8E5B85CE301F229E061A619EE5A589EF740088F8843BF10A1",
+ "owner": "rLpSRZ1E8JHyNDZeHYsQs1R5cwDCB3uuZt"
+ }
+ ],
+ "status": "success"
+ }
+}
+```
+
+
+
+
+The response follows the [standard format][], with a successful result containing the following fields:
+
+| `Field` | Type | Description |
+|:---------|:-----------|:-----------------------------------------------------|
+| `nft_id` | String | The NFToken these offers are for, as specified in the request. |
+| `offers` | Array | A list of buy offers for the token. Each of these is formatted as a **Sell Offer** (see below). |
+| `limit` | Number | _(May be omitted)_The `limit`, as specified in the request. |
+| `marker` | [Marker][] | _(May be omitted)_ Server-defined value indicating the response is paginated. Pass this to the next call to resume where this call left off. Omitted when there are no pages of information after this one. |
+
+### Sell Offers
+
+Each member of the `offers` array represents one [NFTokenOffer object][] to buy the NFT in question and has the following fields:
+
+| `Field` | Type | Description |
+|:------------------|:-----------------|:--------------------------------------|
+| `amount` | String or Object | The amount offered to sell the NFT for, as a String representing an amount in drops of XRP, or an object representing an amount of a fungible token. (See [Specifying Currency Amounts][Currency Amount]) |
+| `flags` | Number | A set of bit-flags for this offer. See [NFTokenOffer flags](nftokenoffer.html#nftokenoffer-flags) for possible values. |
+| `nft_offer_index` | String | The [ledger object ID](ledger-object-ids.html) of this offer. |
+| `owner` | String | The account that placed this offer. |
+
+## Possible Errors
+
+* Any of the [universal error types][].
+* `invalidParams` - One or more fields are specified incorrectly, or one or more required fields are missing.
+* `actNotFound` - The [Address][] specified in the `account` field of the request does not correspond to an account in the ledger.
+* `lgrNotFound` - The ledger specified by the `ledger_hash` or `ledger_index` does not exist, or it does exist but the server does not have it.
+
+
+{% include '_snippets/rippled_versions.md' %}
+{% include '_snippets/rippled-api-links.md' %}
diff --git a/content/references/rippled-api/public-rippled-methods/public-rippled-methods.md b/content/references/rippled-api/public-rippled-methods/public-rippled-methods.md
index 8364cf213b..cd071512eb 100644
--- a/content/references/rippled-api/public-rippled-methods/public-rippled-methods.md
+++ b/content/references/rippled-api/public-rippled-methods/public-rippled-methods.md
@@ -20,6 +20,7 @@ An account in the XRP Ledger represents a holder of XRP and a sender of transact
* **[`account_currencies`](account_currencies.html)** - Get a list of currencies an account can send or receive.
* **[`account_info`](account_info.html)** - Get basic data about an account.
* **[`account_lines`](account_lines.html)** - Get info about an account's trust lines.
+* **[`account_nfts`](account_nfts.html)** :not_enabled: - Get a list of non-fungible tokens owned by an account.
* **[`account_objects`](account_objects.html)** - Get all ledger objects owned by an account.
* **[`account_offers`](account_offers.html)** - Get info about an account's currency exchange offers.
* **[`account_tx`](account_tx.html)** - Get info about an account's transactions.
@@ -50,7 +51,7 @@ Transactions are the only thing that can modify the shared state of the XRP Ledg
By default, the following methods are [admin-only](admin-rippled-methods.html). They can be used as public methods if the server admin has [enabled public signing](enable-public-signing.html).
-* **[`sign`](sign.html)** - Cryptographically sign a transaction.
+* **[`sign`](sign.html)** - Cryptographically sign a transaction.
* **[`sign_for`](sign_for.html)** - Contribute to a multi-signature.
@@ -60,6 +61,8 @@ Paths define a way for payments to flow through intermediary steps on their way
* **[`book_offers`](book_offers.html)** - Get info about offers to exchange two currencies.
* **[`deposit_authorized`](deposit_authorized.html)** - Look up whether one account is authorized to send payments directly to another.
+* **[`nft_buy_offers`](nft_buy_offers.html)** :not_enabled: - Retrieve a list of buy offers for a specified NFToken object.
+* **[`nft_sell_offers`](nft_sell_offers.html)** :not_enabled: - Retrieve a list of sell offers for a specified NFToken object.
* **[`path_find`](path_find.html)** - Find a path for a payment between two accounts and receive updates.
* **[`ripple_path_find`](ripple_path_find.html)** - Find a path for payment between two accounts, once.
diff --git a/content/tutorials/production-readiness/reliable-transaction-submission.ja.md b/content/tutorials/production-readiness/reliable-transaction-submission.ja.md
index 2d00858ae0..366f4785fe 100644
--- a/content/tutorials/production-readiness/reliable-transaction-submission.ja.md
+++ b/content/tutorials/production-readiness/reliable-transaction-submission.ja.md
@@ -301,7 +301,7 @@ JSON-RPC要求:
"Account": "rG5Ro9e3uGEZVCh3zu5gB9ydKUskCs221W",
"Sequence": 4,
"LastLedgerSequence": 10268600,
- "Fee": 10000,
+ "Fee": "10000",
"Amount": {
"currency": "FOO",
"issuer": "rG5Ro9e3uGEZVCh3zu5gB9ydKUskCs221W",
diff --git a/content/tutorials/production-readiness/reliable-transaction-submission.md b/content/tutorials/production-readiness/reliable-transaction-submission.md
index 6e8a34a8b2..0ad911b0ae 100644
--- a/content/tutorials/production-readiness/reliable-transaction-submission.md
+++ b/content/tutorials/production-readiness/reliable-transaction-submission.md
@@ -319,7 +319,7 @@ Request:
"Account": "rG5Ro9e3uGEZVCh3zu5gB9ydKUskCs221W",
"Sequence": 4,
"LastLedgerSequence": 10268600,
- "Fee": 10000,
+ "Fee": "10000",
"Amount": {
"currency": "FOO",
"issuer": "rG5Ro9e3uGEZVCh3zu5gB9ydKUskCs221W",
diff --git a/content/tutorials/quickstart/mint-and-burn-nftokens.md b/content/tutorials/quickstart/mint-and-burn-nftokens.md
index 8a0125b013..daa3dbeabe 100644
--- a/content/tutorials/quickstart/mint-and-burn-nftokens.md
+++ b/content/tutorials/quickstart/mint-and-burn-nftokens.md
@@ -269,7 +269,7 @@ Disconnect from the ledger.
-### Burn Token
+### Burn Token
```
@@ -295,7 +295,7 @@ Connect to the ledger and get the account wallets.
```
-Define the transaction.
+Define the transaction.
```
@@ -787,3 +787,8 @@ Bold text in the following indicates changes to the form that support the new fu
| Previous | Next |
| :--- | ---: |
| [← 2. Create TrustLine and Send Currency >](create-trustline-send-currency.html) | [4. Transfer NFTokens → >](transfer-nftokens.html) |
+
+
+{% include '_snippets/rippled-api-links.md' %}
+{% include '_snippets/tx-type-links.md' %}
+{% include '_snippets/rippled_versions.md' %}
diff --git a/content/tutorials/quickstart/transfer-nftokens.md b/content/tutorials/quickstart/transfer-nftokens.md
index a3ce1b0676..85cb6c3849 100644
--- a/content/tutorials/quickstart/transfer-nftokens.md
+++ b/content/tutorials/quickstart/transfer-nftokens.md
@@ -150,7 +150,7 @@ To cancel a buy or sell offer that you have created:
-# Code Walkthrough
+# Code Walkthrough
You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples/quickstart/js/quickstart.zip) archive to try each of the samples in your own browser.
@@ -227,7 +227,7 @@ If the Destination field is not empty, append it to the transaction. When the de
Submit the transaction and wait for the results.
-
+
```
@@ -235,7 +235,7 @@ Submit the transaction and wait for the results.
```
-
+
```
@@ -415,7 +415,7 @@ Request the list of buy offers for the token.
Report the results of the transaction.
-
+
```
results += "\n\nTransaction result:\n" +
@@ -893,6 +893,7 @@ async function oPcreateSellOffer() {
client.disconnect()
} // End of oPcreateSellOffer()
+
// *******************************************************
// ************** Operational Create Buy Offer ***********
// *******************************************************
@@ -967,6 +968,7 @@ async function oPcreateBuyOffer() {
client.disconnect()
}// End of oPcreateBuyOffer()
+
// *******************************************************
// ************* Operational Cancel Offer ****************
// *******************************************************
@@ -1110,6 +1112,7 @@ async function oPacceptSellOffer() {
client.disconnect()
}// End of acceptSellOffer()
+
// *******************************************************
// ********* Operational Accept Buy Offer ****************
// *******************************************************
@@ -1151,6 +1154,7 @@ async function oPacceptBuyOffer() {
document.getElementById('operationalResultField').value = results
client.disconnect()
}// End of acceptBuyOffer()
+
```
@@ -1531,3 +1535,7 @@ Update the form with fields and buttons to support the new functions.
| :--- | ---: |
| [← 3. Mint and Burn NFTokens >](mint-and-burn-nftokens.html) | [5. Broker a NFToken Sale → >](broker-sale.html) |
+
+{% include '_snippets/rippled-api-links.md' %}
+{% include '_snippets/tx-type-links.md' %}
+{% include '_snippets/rippled_versions.md' %}
diff --git a/content/tutorials/use-tokens/trade-in-the-decentralized-exchange.md b/content/tutorials/use-tokens/trade-in-the-decentralized-exchange.md
index 931202a7fb..363d2581eb 100644
--- a/content/tutorials/use-tokens/trade-in-the-decentralized-exchange.md
+++ b/content/tutorials/use-tokens/trade-in-the-decentralized-exchange.md
@@ -6,6 +6,7 @@ filters:
- interactive_steps
- include_code
labels:
+ - Decentralized Exchange
- Tokens
---
# Trade in the Decentralized Exchange
@@ -22,6 +23,12 @@ This page provides JavaScript examples that use the [xrpl.js](https://js.xrpl.or
Since JavaScript works in the web browser, you can read along and use the interactive steps without any setup.
+## Example Code
+
+Complete sample code for all of the steps of this tutorial is available under the [MIT license](https://github.com/XRPLF/xrpl-dev-portal/blob/master/LICENSE).
+
+- See [Code Samples: Trade in the Decentralized Exchange](https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples/trade-in-the-decentralized-exchange/) in the source repository for this website.
+
## Steps
{% set n = cycler(* range(1,99)) %}
diff --git a/dactyl-config.yml b/dactyl-config.yml
index e259afc4c6..2baa608834 100644
--- a/dactyl-config.yml
+++ b/dactyl-config.yml
@@ -183,6 +183,10 @@ targets:
# Fix links from untranslated common-misconceptions-about-freezes.html
# Not updated to have the table. The top-level of the page is pretty close.
"currency-formats.html#comparison": "currency-formats.html"
+ # Fix links from untranslated NFToken tx refs to translated NFToken page
+ "nftoken.html#nftoken-flags": "nftoken.html#nftoken-フラグ"
+ "nftoken.html#taxon": "nftoken.html#分類群"
+ "basic-data-types.html#addresses": "basic-data-types.html#アドレス"
pages:
@@ -2733,6 +2737,12 @@ pages:
targets:
- ja
+ # TODO: translate
+ - md: references/rippled-api/public-rippled-methods/account-methods/account_nfts.md
+ targets:
+ - en
+ - ja
+
- md: references/rippled-api/public-rippled-methods/account-methods/account_objects.md
targets:
- en
@@ -2918,6 +2928,18 @@ pages:
targets:
- ja
+ # TODO: translate
+ - md: references/rippled-api/public-rippled-methods/path-and-order-book-methods/nft_buy_offers.md
+ targets:
+ - en
+ - ja
+
+ # TODO: translate
+ - md: references/rippled-api/public-rippled-methods/path-and-order-book-methods/nft_sell_offers.md
+ targets:
+ - en
+ - ja
+
- md: references/rippled-api/public-rippled-methods/path-and-order-book-methods/path_find.md
targets:
- en
@@ -4105,6 +4127,14 @@ pages:
targets:
- en
+ - name: XRPL Jobs
+ html: https://jobs.xrpl.org/
+ parent: contribute.html
+ blurb: Discover Your Next Career Opportunity.
+ targets:
+ - en
+ - ja
+
- name: Dev Blog
html: https://xrpl.org/blog/
parent: contribute.html
@@ -4264,6 +4294,8 @@ known_broken_links:
- https://trezor.io/
- https://www.lmax.com/
- https://www.etoro.com/crypto/exchange/
+ - https://xrplnft.devpost.com/
+ - https://xrpl-hackathon-2021.devpost.com/project-gallery
# This site often times out, but it does work and is the original.
- https://theworld.com/~reinhold/diceware.html