Merge pull request #501 from mDuo13/comingsoon

Add (DEV) sidebar label for features not enabled
This commit is contained in:
Rome Reginelli
2019-02-27 16:32:36 -08:00
committed by GitHub
63 changed files with 264 additions and 155 deletions

View File

@@ -1041,6 +1041,23 @@ a.current {
padding-left: 5px;
}
/* Status labels ("DEV" etc) for non-enabled features ----------------------- */
.status {
cursor: help;
padding: 1px 2px;
font-weight: normal;
text-indent: 0;
}
.status.not_enabled {
color: #0F72E5;
}
.status.enabled {
color: #5cb85c;
}
/* Responsive design for different viewscreens ------------------------------ */
@media (max-width: 991px) {

View File

@@ -95,3 +95,45 @@
[{{method}} method]: {{method|lower}}.html
[{{method}} command]: {{method|lower}}.html
{% endfor %}
<!--{# Amendment links #}-->
{% set amendment_names = [
"Checks",
"CryptoConditions",
"CryptoConditionsSuite",
"DepositAuth",
"DepositPreauth",
"EnforceInvariants",
"Escrow",
"FeeEscalation",
"fix1201",
"fix1368",
"fix1373",
"fix1512",
"fix1513",
"fix1515",
"fix1523",
"fix1528",
"fix1543",
"fix1571",
"fix1578",
"fix1623",
"fixTakerDryOfferRemoval",
"Flow",
"FlowCross",
"FlowV2",
"MultiSign",
"MultiSignReserve",
"OwnerPaysFee",
"PayChan",
"SHAMapV2",
"SortedDirectories",
"SusPay",
"Tickets",
"TickSize",
"TrustSetAuth"
] %}
{% for amd in amendment_names %}
[{{amd}} amendment]: known-amendments.html#{{amd|lower}}
{% endfor %}

View File

@@ -1,5 +1,7 @@
# Checks
_(Requires the [Checks amendment][] :not_enabled:.)_
The Checks feature in the XRP Ledger allows users to create deferred payments that can be canceled or cashed by the intended recipients. Like personal paper checks, XRP Ledger Checks start with the sender of the funds creating a Check that specifies an amount and receiver. The receiver cashes the check to pull the funds from the sender's account into the receiver's account. No money moves until the receiver cashes the Check. Because funds are not put on hold when the Check is created, cashing a Check can fail if the sender doesn't have enough funds when the receiver tries to cash it, just like traditional checks. If there's a failure cashing the check, the sender can retry until the check expires.
XRP Ledger Checks have expiration times after which they may no longer be cashed. If the receiver doesn't successfully cash the Check before it expires, the Check object remains in the XRP Ledger until someone cancels it. Anyone may cancel the Check after it expires. Only the sender and receiver can cancel the Check before it expires or is cashed. The Check object is removed from the Ledger when the sender successfully cashes the check or someone cancels it.
@@ -13,7 +15,7 @@ Checks are similar to [Escrow](escrow.html) and [Payment Channels](use-payment-c
* You can send XRP to yourself through Escrow. You cannot use Checks or Payment Channels to send XRP (or, in the case of Checks, issued currencies) to yourself.
**Note:** The [Checks amendment](known-amendments.html#checks) changes the expiration behavior of the [OfferCreate][] transaction. For more information, see [Offer Expiration](offers.html#offer-expiration).
**Note:** The [Checks amendment][]:not_enabled: changes the expiration behavior of the [OfferCreate][] transaction. For more information, see [Offer Expiration](offers.html#offer-expiration).
## Why Checks?
@@ -94,7 +96,7 @@ For more information about Checks in the XRP Ledger, see:
- [Cash a Check for an exact amount](cash-a-check-for-an-exact-amount.html)
- [Cash a Check for a flexible amount](cash-a-check-for-a-flexible-amount.html)
- [Cancel a Check](cancel-a-check.html)
- [Checks amendment](known-amendments.html#checks)
- [Checks amendment][]
For more information about related features, see:

View File

@@ -66,7 +66,7 @@ You can determine the final disposition of an offer with an `Expiration` as soon
**Note:** Since only new transactions can modify the ledger, an expired offer can stay on the ledger after it becomes inactive. The offer is treated as unfunded and has no effect, but it can continue to appear in results (for example, from the [ledger_entry](ledger_entry.html) command). Later on, the expired offer can get finally deleted as a result of another transaction (such as another OfferCreate) if the server finds it while processing.
If an OfferCreate transaction has an `Expiration` time that has already passed when the transaction first gets included in a ledger, the transaction does not execute the offer. The result code of such a transaction depends on whether the [Checks amendment](known-amendments.html#checks) is enabled. With the Checks amendment enabled, the transaction has the `tecEXPIRED` result code. Otherwise, the transaction has the `tesSUCCESS` transaction code. In either case, the transaction has no effect except to destroy the XRP paid as a [transaction cost](transaction-cost.html).
If an OfferCreate transaction has an `Expiration` time that has already passed when the transaction first gets included in a ledger, the transaction does not execute the offer. The result code of such a transaction depends on whether the [Checks amendment][]:not_enabled: is enabled. With the Checks amendment enabled, the transaction has the `tecEXPIRED` result code. Otherwise, the transaction has the `tesSUCCESS` transaction code. In either case, the transaction has no effect except to destroy the XRP paid as a [transaction cost](transaction-cost.html).
<!--{# common link defs #}-->

View File

@@ -1,6 +1,6 @@
# Tick Size
_Requires the [TickSize amendment](known-amendments.html#ticksize)._
_(Requires the [TickSize amendment][].)_
When an Offer is placed into an order book, its exchange rate is truncated based on the `TickSize` values set by the issuers of the currencies involved in the Offer. When a trader offers to exchange XRP and an issued currency, the `TickSize` from the issuer of the currency applies. When a trader offers to exchange two issued currencies, the offer uses the smaller `TickSize` value (that is, the one with fewer significant digits). If neither currency has a `TickSize` set, the default behavior applies.

View File

@@ -10,7 +10,7 @@ The transaction to authorize a trust line must be signed by the issuing address,
2. A customer sends a [TrustSet transaction][] to create a trust line from her XRP Ledger address to the gateway's issuing address. This indicates that she is willing to hold a specific currency issued by the gateway, up to a specific numeric limit.
3. The gateway's issuing address sends a TrustSet transaction authorizing the customer's trust line.
**Tip:** An issuing gateway can authorize a trust line preemptively (step 3), before the customer has created it. This creates a trust line with zero limit, so that the customer's TrustSet transaction (step 2) sets the limit on the pre-authorized trust line. _(Requires the [TrustSetAuth amendment](known-amendments.html#trustsetauth), which has been enabled in the production XRP Ledger since 2016-07-19.)_
**Tip:** An issuing gateway can authorize a trust line preemptively (step 3), before the customer has created it. This creates a trust line with zero limit, so that the customer's TrustSet transaction (step 2) sets the limit on the pre-authorized trust line. _(Requires the [TrustSetAuth amendment][].)_
## RequireAuth Setting

View File

@@ -1,6 +1,6 @@
# Deposit Authorization
_(Requires the [DepositAuth amendment](known-amendments.html#depositauth).)_
_(Requires the [DepositAuth amendment][].)_
Deposit Authorization is an optional feature of an [account](accounts.html) in the XRP Ledger. With Deposit Authorization enabled, transactions cannot send value of any kind to the account unless the sender of those transactions is the account itself. This includes transfers of XRP and issued currencies.
@@ -14,7 +14,7 @@ The Deposit Authorization flag introduces an option for those using the XRP Ledg
When you have Deposit Authorization enabled, you can receive money from [Checks](known-amendments.html#checks), [Escrow](escrow.html), and [Payment Channels](known-amendments.html#paychan). In these transactions' "two-step" model, first the source sends a transaction to authorize sending funds, then the destination sends a transaction to authorize receiving those funds.
To receive money from [Payment transactions][] when you have Deposit Authorization enabled, you must [preauthorize](#preauthorization) the senders of those Payments. _(Requires the [DepositPreauth amendment][])_
To receive money from [Payment transactions][] when you have Deposit Authorization enabled, you must [preauthorize](#preauthorization) the senders of those Payments. _(Requires the [DepositPreauth amendment][].)_
## Recommended Usage
@@ -37,7 +37,7 @@ An account with Deposit Authorization enabled:
- Can receive XRP from [EscrowFinish transactions][] **only in the following cases**:
- The sender of the EscrowFinish transaction is the destination of the escrow.
- The destination of the EscrowFinish transaction has [preauthorized](#preauthorization) the sender of the EscrowFinish. _(Requires the [DepositPreauth amendment][])_
- **Can** receive XRP or issued currencies by sending a [CheckCash][] transaction. _(Requires the [Checks amendment](known-amendments.html#checks).)_
- **Can** receive XRP or issued currencies by sending a [CheckCash][] transaction. _(Requires the [Checks amendment][] :not_enabled:.)_
- **Can** receive XRP or issued currencies by sending [OfferCreate transactions][].
- If the account sends an OfferCreate transaction that is not fully executed immediately, it **can** receive the remainder of the ordered XRP or issued currency later when the offer is consumed by other accounts' [Payment][] and [OfferCreate][] transactions.
- If the account has created any trust lines without the [NoRipple flag](rippling.html) enabled, or has enabled the DefaultRipple flag and issued any currency, the account **can** receive the issued currencies of those trust lines in [Payment transactions][] as a result of rippling. It cannot be the destination of those transactions.
@@ -64,7 +64,7 @@ If the result of the `Flags` value bitwise-AND the `lsfDepositAuth` flag value (
## Preauthorization
_(Requires the [DepositPreauth amendment][])_
_(Requires the [DepositPreauth amendment][].)_
Accounts with DepositAuth enabled can _preauthorize_ certain senders, to allow payments from those senders to succeed even with DepositAuth enabled. This allows specific senders to send funds directly without the receiver taking action on each transaction individually. Preauthorization is not required to use DepositAuth, but can make certain operations more convenient.
@@ -99,7 +99,6 @@ You can use the [deposit_authorized method][] to see if an account is authorized
- The `DisallowXRP` flag indicates that an account should not receive XRP. This is a softer protection than Deposit Authorization, and is not enforced by the XRP Ledger. (Client applications should honor this flag or at least warn about it.)
- The `RequireDest` flag indicates that an account can only receive currency amounts if the sending transaction specifies a [Destination Tag](become-an-xrp-ledger-gateway.html#source-and-destination-tags). This protects users from forgetting to indicate the purpose of a payment, but does not protect recipients from unknown senders, who can make up arbitrary destination tags.
- [Partial Payments](partial-payments.html) provide a way for accounts to return unwanted payments while subtracting [transfer fees](transfer-fees.html) and exchange rates from the amount delivered instead of adding them to the amount sent.
<!--{# TODO: Add links for Preauth-related reference material DOC-1652 #}-->
<!--{# TODO: Add link to "check for authorization" tutorial DOC-1684 #}-->
<!--{# common link defs #}-->

View File

@@ -21,7 +21,7 @@ Many objects in the ledger are owned by a particular address, and count toward t
- [Offers](offer.html) are owned by the address that placed them. Transaction processing automatically removes Offers that are fully consumed or found to be unfunded. Alternatively, the owner can cancel an Offer by sending an [OfferCancel transaction][], or by sending an [OfferCreate transaction][] that contains an `OfferSequence` parameter.
- [Trust lines](ripplestate.html) are shared between two addresses. The owner reserve can apply to one or both of the addresses, depending on whether the fields that address controls are in their default state. See [Contributing to the Owner Reserve](ripplestate.html#contributing-to-the-owner-reserve) for details.
- Without the [MultiSignReserve amendment](known-amendments.html#multisignreserve), a single [SignerList](signerlist.html) counts as 3 to 10 objects for purposes of the owner reserve, depending on how many members it has. With the [MultiSignReserve amendment](known-amendments.html#multisignreserve) enabled, a single SignerList counts as 1 object for purposes of the owner reserve, regardless of the number of members it has. See also: [SignerLists and Reserves](signerlist.html#signerlists-and-reserves).
- Without the [MultiSignReserve amendment][], a single [SignerList](signerlist.html) counts as 3 to 10 objects for purposes of the owner reserve, depending on how many members it has. With the [MultiSignReserve amendment][] enabled, a single SignerList counts as 1 object for purposes of the owner reserve, regardless of the number of members it has. See also: [SignerLists and Reserves](signerlist.html#signerlists-and-reserves).
- [Held Payments (Escrow)](escrow-object.html) are owned by the address that placed them.
- [Payment Channels](use-payment-channels.html) are owned by the address that created them.
- [Owner directories](directorynode.html) list all the ledger objects that contribute to an address's owner reserve. However, the owner directory itself does not count towards the reserve.
@@ -46,4 +46,7 @@ When an address holds less XRP than its current reserve requirement, it cannot s
The XRP Ledger has a mechanism to adjust the reserve requirements for long-term changes in the value of XRP. Any changes have to be approved by the consensus process. See [Fee Voting](fee-voting.html) for more information.
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -30,7 +30,7 @@ The transaction cost is not paid to any party: the XRP is irrevocably destroyed.
## Load Cost and Open Ledger Cost
When the [FeeEscalation amendment](known-amendments.html#feeescalation) is enabled, there are two thresholds for the transaction cost:
When the [FeeEscalation amendment][] is enabled, there are two thresholds for the transaction cost:
* If the transaction cost does not meet a `rippled` server's [load-based transaction cost threshold](#local-load-cost), the server ignores the transaction completely. (This logic is essentially unchanged with or without the amendment.)
* If the transaction cost does not meet a `rippled` server's [open ledger cost threshold](#open-ledger-cost), the server queues the transaction for a later ledger.
@@ -82,7 +82,7 @@ _Fee levels_ represent the proportional difference between the minimum cost and
The `rippled` APIs have two ways to query the local load-based transaction cost: the `server_info` command (intended for humans) and the `server_state` command (intended for machines).
If the [FeeEscalation amendment](known-amendments.html#feeescalation) is enabled, you can use the [fee method][] to check the open ledger cost.
If the [FeeEscalation amendment][] is enabled, you can use the [fee method][] to check the open ledger cost.
### server_info
@@ -144,7 +144,7 @@ This feature is designed to allow you to recover an account if the regular key i
The [lsfPasswordSpent flag](accountroot.html) starts out disabled. It gets enabled when you send a SetRegularKey transaction signed by the master key pair. It gets disabled again when the account receives a [Payment](payment.html) of XRP.
When the [FeeEscalation amendment](known-amendments.html#feeescalation) is enabled, `rippled` prioritizes key reset transactions above other transactions even though the nominal transaction cost of a key reset transaction is zero.
When the [FeeEscalation amendment][] is enabled, `rippled` prioritizes key reset transactions above other transactions even though the nominal transaction cost of a key reset transaction is zero.
## Changing the Transaction Cost

View File

@@ -43,7 +43,7 @@ The `AccountRoot` object has the following fields:
| `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 | VariableLength | _(Optional)_ A public key that may be used to send encrypted messages to this account. In JSON, uses hexadecimal. No more than 33 bytes. |
| `RegularKey` | String | AccountID | _(Optional)_ The address of a keypair that can be used to sign transactions for this account instead of the master key. Use a [SetRegularKey transaction][] to change this value. |
| `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. _(Requires the [TickSize amendment](known-amendments.html#ticksize).)_ |
| `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. _(Requires the [TickSize amendment][].)_ |
| `TransferRate` | Number | UInt32 | _(Optional)_ A [transfer fee](https://ripple.com/knowledge_center/transfer-fees/) to charge other users for sending currency issued by this account to each other. |
| `WalletLocator` | String | Hash256 | _(Optional)_ **DEPRECATED**. Do not use. |
| `WalletSize` | Number | UInt32 | _(Optional)_ **DEPRECATED**. Do not use. |

View File

@@ -1,7 +1,7 @@
# Check
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L157-L170 "Source")
_Requires the [Checks Amendment](known-amendments.html#checks)._
_(Requires the [Checks amendment][] :not_enabled:.)_
A `Check` object describes a check, similar to a paper personal check, which can be cashed by its destination to get money from its sender. (The potential payment has already been approved by its sender, but no money moves until it is cashed. Unlike an [Escrow](escrow.html), the money for a Check is not set aside, so cashing the Check could fail due to lack of funds.)

View File

@@ -1,7 +1,7 @@
# Escrow
[[Source]<br>](https://github.com/ripple/rippled/blob/c6b6d82a754fe449cc533e18659df483c10a5c98/src/ripple/protocol/impl/LedgerFormats.cpp#L90-L101 "Source")
_(Requires the [Escrow Amendment](known-amendments.html#escrow).)_
_(Requires the [Escrow amendment][].)_
The `Escrow` object type represents a held payment of XRP waiting to be executed or canceled. An [EscrowCreate transaction][] creates an `Escrow` object in the ledger. A successful [EscrowFinish][] or [EscrowCancel][] transaction deletes the object. If the ``Escrow`` object has a [_crypto-condition_](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02), the payment can only succeed if an EscrowFinish transaction provides the corresponding _fulfillment_ that satisfies the condition. (The only supported crypto-condition type is [PREIMAGE-SHA-256](https://tools.ietf.org/html/draft-thomas-crypto-conditions-02#section-8.1).) If the `Escrow` object has a `FinishAfter` time, the held payment can only execute after that time.
@@ -49,7 +49,7 @@ An `Escrow` object has the following fields:
| `SourceTag` | Number | UInt32 | _(Optional)_ An arbitrary tag to further specify the source for this held payment, such as a hosted recipient at the owner's address. |
| `DestinationTag` | Number | UInt32 | _(Optional)_ An arbitrary tag to further specify the destination for this held payment, such as a hosted recipient at the destination address. |
| `OwnerNode` | String | UInt64 | A hint indicating which page of the owner directory links to this object, in case the directory consists of multiple pages. **Note:** The object does not contain a direct link to the owner directory containing it, since that value can be derived from the `Account`. |
| `DestinationNode` | String | UInt64 | _(Optional)_ A hint indicating which page of the destination's owner directory links to this object, in case the directory consists of multiple pages. Omitted on escrows created before enabling the [fix1523 amendment](known-amendments.html#fix1523). |
| `DestinationNode` | String | UInt64 | _(Optional)_ A hint indicating which page of the destination's owner directory links to this object, in case the directory consists of multiple pages. Omitted on escrows created before enabling the [fix1523 amendment][]. |
| `PreviousTxnID` | String | Hash256 | The identifying hash of the transaction that most recently modified this object. |
| `PreviousTxnLgrSeq` | Number | UInt32 | The [index of the ledger][Ledger Index] that contains the transaction that most recently modified this object. |

View File

@@ -1,7 +1,7 @@
# PayChannel
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/impl/LedgerFormats.cpp#L141-L155 "Source")
_(Requires the [PayChan Amendment](known-amendments.html#paychan).)_
_(Requires the [PayChan amendment][].)_
The `PayChannel` object type represents a payment channel. Payment channels enable small, rapid off-ledger payments of XRP that can be later reconciled with the consensus ledger. A payment channel holds a balance of XRP that can only be paid out to a specific destination address until the channel is closed. Any unspent XRP is returned to the channel's owner (the source address that created and funded it) when the channel closes.

View File

@@ -1,7 +1,10 @@
# SignerList
[[Source]<br>](https://github.com/ripple/rippled/blob/6d2e3da30696bd10e3bb11a5ff6d45d2c4dae90f/src/ripple/protocol/impl/LedgerFormats.cpp#L127 "Source")
The `SignerList` object type represents a list of parties that, as a group, are authorized to sign a transaction in place of an individual account. You can create, replace, or remove a SignerList using a [SignerListSet transaction][]. This object type is introduced by the [MultiSign amendment](known-amendments.html#multisign). [New in: rippled 0.31.0][]
_(Requires the [MultiSign amendment][].)_
The `SignerList` object type represents a list of parties that, as a group, are authorized to sign a transaction in place of an individual account. You can create, replace, or remove a SignerList using a [SignerListSet transaction][].
## Example {{currentpage.name}} JSON
@@ -68,21 +71,21 @@ When processing a multi-signed transaction, the server dereferences the `Account
## {{currentpage.name}} Flags
_Requires the [MultiSignReserve Amendment](known-amendments.html#multisignreserve)._
_((NOT_ENABLED_ICON) Requires the [MultiSignReserve amendment][].)_
SignerList objects can have the following flag value:
| Flag Name | Hex Value | Decimal Value | Description |
|:-----------------|:-----------|:--------------|:-------------------------------|
| lsfOneOwnerCount | 0x00010000 | 65536 | If this flag is enabled, this SignerList counts as one item for purposes of the [owner reserve](reserves.html#owner-reserves). Otherwise, this list counts as N+2 items, where N is the number of signers it contains. This flag is automatically enabled if you add or update a signer list after the [MultiSignReserve amendment](known-amendments.html#multisignreserve) is enabled. |
| lsfOneOwnerCount | 0x00010000 | 65536 | If this flag is enabled, this SignerList counts as one item for purposes of the [owner reserve](reserves.html#owner-reserves). Otherwise, this list counts as N+2 items, where N is the number of signers it contains. This flag is automatically enabled if you add or update a signer list after the [MultiSignReserve amendment][] is enabled. |
## SignerLists and Reserves
A SignerList contributes to its owner's [reserve requirement](reserves.html).
Without the [MultiSignReserve Amendment](known-amendments.html#multisignreserve), the SignerList itself counts as two objects, and each member of the list counts as one. As a result, the total owner reserve associated with a SignerList is anywhere from 3 times to 10 times the reserve required by a single trust line ([RippleState](ripplestate.html)) or [Offer](offer.html) object in the ledger.
Without the [MultiSignReserve amendment][], the SignerList itself counts as two objects, and each member of the list counts as one. As a result, the total owner reserve associated with a SignerList is anywhere from 3 times to 10 times the reserve required by a single trust line ([RippleState](ripplestate.html)) or [Offer](offer.html) object in the ledger.
With the [MultiSignReserve Amendment](known-amendments.html#multisignreserve) enabled, the SignerList counts as one object, regardless of how many members it has. As a result, the owner reserve associated with a SignerList is 5 XRP, regardless of how many members it has.
(NOT_ENABLED_ICON) With the [MultiSignReserve amendment][] enabled, the SignerList counts as one object, regardless of how many members it has. As a result, the owner reserve associated with a SignerList is 5 XRP, regardless of how many members it has.
The reserve requirement does not change for SignerLists created before the MultiSignReserve amendment. To take advantage of the new reserve, update the SignerList by sending a [SignerListSet transaction][].

View File

@@ -1,7 +1,7 @@
# account_channels
[[Source]<br>](https://github.com/ripple/rippled/blob/release/src/ripple/rpc/handlers/AccountChannels.cpp "Source")
_(Requires the [PayChan amendment](known-amendments.html#paychan) to be enabled. [New in: rippled 0.33.0][])_
_(Requires the [PayChan amendment][] to be enabled. [New in: rippled 0.33.0][])_
The `account_channels` method returns information about an account's Payment Channels. This includes only channels where the specified account is the channel's source, not the destination. (A channel's "source" and "owner" are the same.) All information retrieved is relative to a particular version of the ledger.

View File

@@ -57,8 +57,8 @@ The request contains the following parameters:
| `strict` | Boolean | (Optional, defaults to False) If set to True, then the `account` field only accepts a public key or XRP Ledger address. |
| `ledger_hash` | String | _(Optional)_ A 20-byte hex string for the ledger version to use. (See [Specifying Ledgers][]) |
| `ledger_index` | String or Unsigned Integer | _(Optional)_ The sequence number of the ledger to use, or a shortcut string to choose a ledger automatically. (See [Specifying Ledgers][]) |
| `queue` | Boolean | _(Optional)_ If `true`, and the [FeeEscalation amendment](known-amendments.html#feeescalation) is enabled, also returns stats about queued transactions associated with this account. Can only be used when querying for the data from the current open ledger. [New in: rippled 0.33.0][] |
| `signer_lists` | Boolean | _(Optional)_ If `true`, and the [MultiSign amendment](known-amendments.html#multisign) is enabled, also returns any [SignerList objects](signerlist.html) associated with this account. [New in: rippled 0.31.0][] |
| `queue` | Boolean | _(Optional)_ If `true`, and the [FeeEscalation amendment][] is enabled, also returns stats about queued transactions associated with this account. Can only be used when querying for the data from the current open ledger. [New in: rippled 0.33.0][] |
| `signer_lists` | Boolean | _(Optional)_ If `true`, and the [MultiSign amendment][] is enabled, also returns any [SignerList objects](signerlist.html) associated with this account. [New in: rippled 0.31.0][] |
The following fields are deprecated and should not be provided: `ident`, `ledger`.

View File

@@ -164,7 +164,7 @@ The response follows the [standard format][], with a successful result containin
| `ledger.transactions` | Array | (Omitted unless requested) Transactions applied in this ledger version. By default, members are the transactions' identifying [Hash][] strings. If the request specified `expand` as true, members are full representations of the transactions instead, in either JSON or binary depending on whether the request specified `binary` as true. |
| `ledger_hash` | String | Unique identifying hash of the entire ledger. |
| `ledger_index` | Number | The [Ledger Index][] of this ledger. |
| `queue_data` | Array | (Omitted unless requested with the `queue` parameter) Array of objects describing queued transactions, in the same order as the queue. If the request specified `expand` as true, members contain full representations of the transactions, in either JSON or binary depending on whether the request specified `binary` as true. Requires the [FeeEscalation amendment](known-amendments.html#feeescalation). [New in: rippled 0.70.0][] |
| `queue_data` | Array | (Omitted unless requested with the `queue` parameter) Array of objects describing queued transactions, in the same order as the queue. If the request specified `expand` as true, members contain full representations of the transactions, in either JSON or binary depending on whether the request specified `binary` as true. Requires the [FeeEscalation amendment][]. [New in: rippled 0.70.0][] |
The following fields are deprecated and may be removed without further notice: `accepted`, `hash` (use `ledger_hash` instead), `seqNum` (use `ledger_index` instead), `totalCoins` (use `total_coins` instead).

View File

@@ -1,7 +1,7 @@
# channel_authorize
[[Source]<br>](https://github.com/ripple/rippled/blob/d4a56f223a3b80f64ff70b4e90ab6792806929ca/src/ripple/rpc/handlers/PayChanClaim.cpp#L41 "Source")
_(Requires the [PayChan amendment](known-amendments.html#paychan) to be enabled. [New in: rippled 0.33.0][])_
_(Requires the [PayChan amendment][] to be enabled. [New in: rippled 0.33.0][])_
The `channel_authorize` method creates a signature that can be used to redeem a specific amount of XRP from a payment channel.

View File

@@ -1,7 +1,7 @@
# channel_verify
[[Source]<br>](https://github.com/ripple/rippled/blob/d4a56f223a3b80f64ff70b4e90ab6792806929ca/src/ripple/rpc/handlers/PayChanClaim.cpp#L89 "Source")
_(Requires the [PayChan amendment](known-amendments.html#paychan) to be enabled. [New in: rippled 0.33.0][])_
_(Requires the [PayChan amendment][] to be enabled. [New in: rippled 0.33.0][])_
The `channel_verify` method checks the validity of a signature that can be used to redeem a specific amount of XRP from a payment channel.

View File

@@ -1,7 +1,7 @@
# fee
[[Source]<br>](https://github.com/ripple/rippled/blob/release/src/ripple/rpc/handlers/Fee1.cpp "Source")
The `fee` command reports the current state of the open-ledger requirements for the [transaction cost](transaction-cost.html). This requires the [FeeEscalation amendment](known-amendments.html#feeescalation) to be enabled. [New in: rippled 0.31.0][]
The `fee` command reports the current state of the open-ledger requirements for the [transaction cost](transaction-cost.html). This requires the [FeeEscalation amendment][] to be enabled. [New in: rippled 0.31.0][]
This is a public command available to unprivileged users. [Updated in: rippled 0.32.0][New in: rippled 0.32.0]

View File

@@ -6,7 +6,7 @@ The `sign_for` command provides one signature for a [multi-signed transaction](m
{% include '_snippets/public-signing-note.md' %}
<!--_ -->
This command requires the [MultiSign amendment](known-amendments.html#multisign) to be enabled. [New in: rippled 0.31.0][]
This command requires the [MultiSign amendment][] to be enabled. [New in: rippled 0.31.0][]
## Request Format
An example of the request format:

View File

@@ -3,7 +3,7 @@
The `submit_multisigned` command applies a [multi-signed](multi-signing.html) transaction and sends it to the network to be included in future ledgers. (You can also submit multi-signed transactions in binary form using the [`submit` command in submit-only mode](submit.html#submit-only-mode).)
This command requires the [MultiSign amendment](known-amendments.html#multisign) to be enabled. [New in: rippled 0.31.0][]
This command requires the [MultiSign amendment][] to be enabled. [New in: rippled 0.31.0][]
## Request Format
An example of the request format:

View File

@@ -56,7 +56,7 @@ To check whether a transaction has a given flag enabled, use the bitwise-and ope
Most flags only have meaning for a specific transaction type. The same bitwise value may be reused for flags on different transaction types, so it is important to pay attention to the `TransactionType` field when setting and reading flags.
Bits that are not defined as flags MUST be 0. (The [fix1543 amendment](known-amendments.html#fix1543) enforces this rule on some transaction types. Most transaction types enforce this rule by default.)
Bits that are not defined as flags MUST be 0. (The [fix1543 amendment][] enforces this rule on some transaction types. Most transaction types enforce this rule by default.)
### Global Flags

View File

@@ -19,7 +19,7 @@ For the most part, transactions with `tec` codes take no action other than to de
| `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)) |
| `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 [SignerLists and Reserves](signerlist.html#signerlists-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. Requires the [EnforceInvariants amendment](known-amendments.html#enforceinvariants). 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. Requires the [EnforceInvariants amendment][]. If you can reproduce this error, please [report an issue](https://github.com/ripple/rippled/issues). |
| `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][] |
| `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. |
@@ -27,7 +27,7 @@ For the most part, transactions with `tec` codes take no action other than to de
| `tecNO_DST_INSUF_XRP` | 125 | The account on the receiving end of the transaction does not exist, and the transaction is not sending enough XRP to create it. |
| `tecNO_ENTRY` | 140 | Reserved for future use. |
| `tecNO_ISSUER` | 133 | The account specified in the `issuer` field of a currency amount does not exist. |
| `tecKILLED` | 150 | The [OfferCreate transaction][] specified the tfFillOrKill flag and could not be filled, so it was killed. _(Requires the [fix1578 amendment](known-amendments.html#fix1578).)_ |
| `tecKILLED` | 150 | The [OfferCreate transaction][] specified the tfFillOrKill flag and could not be filled, so it was killed. _(Requires the [fix1578 amendment][].)_ |
| `tecNO_LINE` | 135 | The `TakerPays` field of the [OfferCreate transaction][] specifies an asset whose issuer has `lsfRequireAuth` enabled, and the account making the offer does not have a trust line for that asset. (Normally, making an offer implicitly creates a trust line if necessary, but in this case it does not bother because you cannot hold the asset without authorization.) If the trust line exists, but is not authorized, `tecNO_AUTH` occurs instead. |
| `tecNO_LINE_INSUF_RESERVE` | 126 | 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 does not have a trust line to this account for the same currency. (See `tecINSUF_RESERVE_LINE` for the other case.) |
| `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. |

View File

@@ -17,7 +17,7 @@ These codes indicate that the transaction failed and was not included in a ledge
| `tefEXCEPTION` | While processing the transaction, the server entered an unexpected state. This may be caused by unexpected inputs, for example if the binary data for the transaction is grossly malformed. If you can reproduce this error, please [report an issue](https://github.com/ripple/rippled/issues) to get it fixed. |
| `tefFAILURE` | Unspecified failure in applying the transaction. |
| `tefINTERNAL` | When trying to apply the transaction, the server entered an unexpected state. If you can reproduce this error, please [report an issue](https://github.com/ripple/rippled/issues) to get it fixed. |
| `tefINVARIANT_FAILED` | An invariant check failed when trying to claim the [transaction cost](transaction-cost.html). Requires the [EnforceInvariants amendment](known-amendments.html#enforceinvariants). If you can reproduce this error, please [report an issue](https://github.com/ripple/rippled/issues). |
| `tefINVARIANT_FAILED` | An invariant check failed when trying to claim the [transaction cost](transaction-cost.html). Requires 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. |
| `tefNO_AUTH_REQUIRED` | The [TrustSet transaction][] tried to mark a trustline as authorized, but the `lsfRequireAuth` flag is not enabled for the corresponding account, so authorization is not necessary. |

View File

@@ -30,7 +30,7 @@ An AccountSet transaction modifies the properties of an [account in the XRP Ledg
| MessageKey | String | Blob | _(Optional)_ Public key for sending encrypted messages to this account. |
| [SetFlag][] | Number | UInt32 | _(Optional)_ Integer flag to enable for this account. |
| [TransferRate][] | Unsigned Integer | UInt32 | _(Optional)_ The fee to charge when users transfer this account's issued currencies, 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][] | Unsigned Integer | 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. _(Requires the [TickSize amendment](known-amendments.html#ticksize).)_ |
| [TickSize][] | Unsigned Integer | 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. _(Requires the [TickSize amendment][].)_ |
| WalletLocator | String | Hash256 | _(Optional)_ Not used. |
| WalletSize | Number | UInt32 | _(Optional)_ Not used. |
@@ -72,7 +72,7 @@ The available AccountSet flags are:
|:-----------------|:--------------|:--------------------------|:--------------|
| asfAccountTxnID | 5 | (None) | Track the ID of this account's most recent transaction. Required for [AccountTxnID](transaction-common-fields.html#accounttxnid) |
| 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. _(Requires the [DepositAuth amendment](known-amendments.html#depositauth).)_ |
| asfDepositAuth | 9 | lsfDepositAuth | Enable [Deposit Authorization](depositauth.html) on this account. _(Requires 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). |
| asfDisallowXRP | 3 | lsfDisallowXRP | XRP should not be sent to this account. (Enforced by client applications, not by `rippled`) |
| asfGlobalFreeze | 7 | lsfGlobalFreeze | [Freeze](freezes.html) all assets issued by this account. |

View File

@@ -1,7 +1,7 @@
# CheckCancel
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/CancelCheck.cpp "Source") <!--{# TODO: change from develop to master when 0.90.0 is released #}-->
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/CancelCheck.cpp "Source")
_Requires the [Checks Amendment](known-amendments.html#checks)._
_(NOT_ENABLED_ICON) Requires the [Checks amendment][]._
Cancels an unredeemed Check, removing it from the ledger without sending any money. The source or the destination of the check can cancel a Check at any time using this transaction type. If the Check has expired, any address can cancel it.

View File

@@ -1,7 +1,7 @@
# CheckCash
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/CashCheck.cpp "Source") <!--{# TODO: change from develop to master when 0.90.0 is released #}-->
_Requires the [Checks Amendment](known-amendments.html#checks)._
_Requires the [Checks amendment][]._
Attempts to redeem a Check object in the ledger to receive up to the amount authorized by the corresponding [CheckCreate transaction][]. Only the `Destination` address of a Check can cash it with a CheckCash transaction. Cashing a check this way is similar to executing a [Payment][] initiated by the destination.

View File

@@ -1,7 +1,7 @@
# CheckCreate
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/CreateCheck.cpp "Source") <!--{# TODO: change from develop to master when 0.90.0 is released #}-->
_Requires the [Checks Amendment](known-amendments.html#checks)._
_Requires the [Checks amendment][]._
Create a Check object in the ledger, which is a deferred payment that can be cashed by its intended destination. The sender of this transaction is the sender of the Check.

View File

@@ -1,7 +1,7 @@
# DepositPreauth
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/DepositPreauth.cpp "Source") <!--{# TODO: change from develop to master when 1.1.0 is released #}-->
_Requires the [DepositPreauth amendment](known-amendments.html#depositpreauth)._
_Requires the [DepositPreauth amendment][]._
A DepositPreauth transaction gives another account pre-approval to deliver payments to the sender of this transaction. This is only useful if the sender of this transaction is using (or plans to use) [Deposit Authorization](depositauth.html).

View File

@@ -2,7 +2,7 @@
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/Escrow.cpp "Source")
_Requires the [Escrow Amendment](known-amendments.html#escrow)._
_Requires the [Escrow amendment][]._
Return escrowed XRP to the sender.

View File

@@ -2,7 +2,7 @@
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/Escrow.cpp "Source")
_Requires the [Escrow Amendment](known-amendments.html#escrow)._
_Requires the [Escrow amendment][]._
Sequester XRP until the escrow process either finishes or is canceled.
@@ -37,7 +37,7 @@ Sequester XRP until the escrow process either finishes or is canceled.
Either `CancelAfter` or `FinishAfter` must be specified. If both are included, the `FinishAfter` time must be before the `CancelAfter` time.
With the [fix1571 amendment](known-amendments.html#fix1571) enabled, you must supply `FinishAfter`, `Condition`, or both. [New in: rippled 1.0.0][]
With the [fix1571 amendment][] enabled, you must supply `FinishAfter`, `Condition`, or both. [New in: rippled 1.0.0][]
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}

View File

@@ -2,7 +2,7 @@
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/Escrow.cpp "Source")
_Requires the [Escrow Amendment](known-amendments.html#escrow)._
_Requires the [Escrow amendment][]._
Deliver XRP from a held payment to the recipient.

View File

@@ -46,7 +46,7 @@ Transactions of the OfferCreate type support additional values in the [`Flags` f
|:--------------------|:-----------|:--------------|:--------------------------|
| tfPassive | 0x00010000 | 65536 | If enabled, the offer does not consume offers that exactly match it, and instead becomes an Offer object in the ledger. It still consumes offers that cross it. |
| tfImmediateOrCancel | 0x00020000 | 131072 | Treat the offer as an [Immediate or Cancel order](http://en.wikipedia.org/wiki/Immediate_or_cancel). If enabled, the offer never becomes a ledger object: it only tries to match existing offers in the ledger. If the offer cannot match any offers immediately, it executes "successfully" without trading any currency. In this case, the transaction has the [result code](transaction-results.html) `tesSUCCESS`, but creates no [Offer objects](offer.html) in the ledger. |
| tfFillOrKill | 0x00040000 | 262144 | Treat the offer as a [Fill or Kill order](http://en.wikipedia.org/wiki/Fill_or_kill). Only try to match existing offers in the ledger, and only do so if the entire `TakerPays` quantity can be obtained. If the [fix1578 amendment](known-amendments.html#fix1578) is enabled and the offer cannot be executed when placed, the transaction has the [result code](transaction-results.html) `tecKILLED`; otherwise, the transaction uses the result code `tesSUCCESS` even when it was killed without trading any currency. |
| tfFillOrKill | 0x00040000 | 262144 | Treat the offer as a [Fill or Kill order](http://en.wikipedia.org/wiki/Fill_or_kill). Only try to match existing offers in the ledger, and only do so if the entire `TakerPays` quantity can be obtained. If the [fix1578 amendment][] is enabled and the offer cannot be executed when placed, the transaction has the [result code](transaction-results.html) `tecKILLED`; otherwise, the transaction uses the result code `tesSUCCESS` even when it was killed without trading any currency. |
| tfSell | 0x00080000 | 524288 | Exchange the entire `TakerGets` amount, even if it means obtaining more than the `TakerPays` amount in exchange. |
The following invalid flag combination prompts a `temINVALID_FLAG` error:

View File

@@ -1,7 +1,7 @@
# PaymentChannelClaim
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source")
_Requires the [PayChan Amendment](known-amendments.html#paychan)._
_Requires the [PayChan amendment][]._
Claim XRP from a payment channel, adjust the payment channel's expiration, or both. This transaction can be used differently depending on the transaction sender's role in the specified channel:

View File

@@ -1,7 +1,7 @@
# PaymentChannelCreate
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source")
_Requires the [PayChan Amendment](known-amendments.html#paychan)._
_Requires the [PayChan amendment][]._
Create a unidirectional channel and fund it with XRP. The address sending this transaction becomes the "source address" of the payment channel.

View File

@@ -1,7 +1,7 @@
# PaymentChannelFund
[[Source]<br>](https://github.com/ripple/rippled/blob/master/src/ripple/app/tx/impl/PayChan.cpp "Source")
_Requires the [PayChan Amendment](known-amendments.html#paychan)._
_Requires the [PayChan amendment][]._
Add additional XRP to an open payment channel, update the expiration time of the channel, or both. Only the source address of the channel can use this transaction. (Transactions from other addresses fail with the error `tecNO_PERMISSION`.)

View File

@@ -1,7 +1,7 @@
# SignerListSet
[[Source]<br>](https://github.com/ripple/rippled/blob/ef511282709a6a0721b504c6b7703f9de3eecf38/src/ripple/app/tx/impl/SetSignerList.cpp "Source")
The SignerListSet transaction creates, replaces, or removes a list of signers that can be used to [multi-sign](multi-signing.html) a transaction. This transaction type was introduced by the [MultiSign amendment](known-amendments.html#multisign). [New in: rippled 0.31.0][]
The SignerListSet transaction creates, replaces, or removes a list of signers that can be used to [multi-sign](multi-signing.html) a transaction. This transaction type was introduced by the [MultiSign amendment][]. [New in: rippled 0.31.0][]
## Example {{currentpage.name}} JSON
@@ -51,7 +51,7 @@ You can create, update, or remove a SignerList using the master key, regular key
You cannot remove the last method of signing transactions from an account. If an account's master key is disabled (it has the [`lsfDisableMaster` flag](accountroot.html#accountroot-flags) enabled) and the account does not have a [Regular Key](cryptographic-keys.html) configured, then you cannot delete the SignerList from the account. Instead, the transaction fails with the error [`tecNO_ALTERNATIVE_KEY`](tec-codes.html).
With the [MultiSignReserve Amendment](known-amendments.html#multisignreserve) enabled, creating or replacing a SignerList enables the lsfOneOwnerCount flag on the SignerList object. When this flag is enabled, the XRP Ledger is able to lower the [`OwnerCount`](accountroot.html#accountroot-fields) and [owner reserve](reserves.html#owner-reserves) for a SignerList as provided by the MultiSignReserve amendment. For more information, see [SignerList Flag](signerlist.html#signerlist-flags).
With the [MultiSignReserve amendment][] enabled, creating or replacing a SignerList enables the lsfOneOwnerCount flag on the SignerList object. When this flag is enabled, the XRP Ledger is able to lower the [`OwnerCount`](accountroot.html#accountroot-fields) and [owner reserve](reserves.html#owner-reserves) for a SignerList as provided by the MultiSignReserve amendment. For more information, see [SignerList Flag](signerlist.html#signerlist-flags).
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}

View File

@@ -42,7 +42,7 @@ Transactions of the TrustSet type support additional values in the [`Flags` fiel
| Flag Name | Hex Value | Decimal Value | Description |
|:----------------|:-----------|:--------------|:------------------------------|
| tfSetfAuth | 0x00010000 | 65536 | Authorize the other party to hold issuances from this account. (No effect unless using the [*asfRequireAuth* AccountSet flag](accountset.html#accountset-flags).) Cannot be unset. |
| tfSetNoRipple | 0x00020000 | 131072 | Blocks rippling between two trustlines of the same currency, if this flag is set on both. (See [No Ripple](rippling.html) for details.) If the [fix1578 amendment](known-amendments.html#fix1578) is enabled, a transaction that uses this flag and cannot enable NoRipple fails with the result code `tecNO_PERMISSION`. If the amendment is not enabled, the transaction can result in `tesSUCCESS` (making any other changes it can) even if it cannot enable NoRipple on the trust line. |
| tfSetNoRipple | 0x00020000 | 131072 | Blocks rippling between two trustlines of the same currency, if this flag is set on both. (See [No Ripple](rippling.html) for details.) If the [fix1578 amendment][] is enabled, a transaction that uses this flag and cannot enable NoRipple fails with the result code `tecNO_PERMISSION`. If the amendment is not enabled, the transaction can result in `tesSUCCESS` (making any other changes it can) even if it cannot enable NoRipple on the trust line. |
| tfClearNoRipple | 0x00040000 | 262144 | Clears the No-Rippling flag. (See [NoRipple](rippling.html) for details.) |
| tfSetFreeze | 0x00100000 | 1048576 | [Freeze](freezes.html) the trustline. |
| tfClearFreeze | 0x00200000 | 2097152 | [Unfreeze](freezes.html) the trustline. |

View File

@@ -18,9 +18,9 @@ This tutorial demonstrates how to enable multi-signing for an address.
You need an XRP Ledger address that can send transactions, and has enough XRP available.
Without the [MultiSignReserve Amendment](known-amendments.html#multisignreserve), multi-signing requires more than the usual amount of XRP for the [account reserve](reserves.html) and [transaction cost](transaction-cost.html), increasing with the number of signers and signatures you use.
Without the [MultiSignReserve amendment][], multi-signing requires more than the usual amount of XRP for the [account reserve](reserves.html) and [transaction cost](transaction-cost.html), increasing with the number of signers and signatures you use.
With the [MultiSignReserve Amendment](known-amendments.html#multisignreserve) enabled, multi-signing requires 5 XRP for the account reserve, regardless of the number of signers and signatures you use. The [transaction cost](transaction-cost.html) of a multi-signed transaction is unaffected by this amendment and still increases with the number of signers and signatures you use.
With the [MultiSignReserve amendment][] enabled, multi-signing requires 5 XRP for the account reserve, regardless of the number of signers and signatures you use. The [transaction cost](transaction-cost.html) of a multi-signed transaction is unaffected by this amendment and still increases with the number of signers and signatures you use.
If you started `rippled` in [stand-alone mode](rippled-server-modes.html#reasons-to-run-a-rippled-server-in-stand-alone-mode) with a new genesis ledger, you must:
@@ -133,7 +133,7 @@ In this example, the SignerList has 3 members, with the weights and quorum set u
Make sure that the [Transaction Result](transaction-results.html) is [**tesSUCCESS**](tes-success.html). Otherwise, the transaction failed. If you have a problem in stand-alone mode or a non-production network, check that [multi-sign is enabled](start-a-new-genesis-ledger-in-stand-alone-mode.html#settings-in-new-genesis-ledgers).
**Note:** Without the [MultiSignReserve Amendment](known-amendments.html#multisignreserve), the more members in the SignerList, the more XRP your address must have for purposes of the [owner reserve](reserves.html#owner-reserves). If your address does not have enough XRP, the transaction fails with [tecINSUFFICIENT_RESERVE](tec-codes.html). With the [MultiSignReserve Amendment](known-amendments.html#multisignreserve) enabled, the XRP your address must have for purposes of the [owner reserve](reserves.html#owner-reserves) is 5 XRP, regardless of the number of members in the SignerList. See also: [SignerLists and Reserves](signerlist.html#signerlists-and-reserves).
**Note:** Without the [MultiSignReserve amendment][], the more members in the SignerList, the more XRP your address must have for purposes of the [owner reserve](reserves.html#owner-reserves). If your address does not have enough XRP, the transaction fails with [tecINSUFFICIENT_RESERVE](tec-codes.html). With the [MultiSignReserve amendment][] enabled, the XRP your address must have for purposes of the [owner reserve](reserves.html#owner-reserves) is 5 XRP, regardless of the number of members in the SignerList. See also: [SignerLists and Reserves](signerlist.html#signerlists-and-reserves).
## 4. Close the ledger

View File

@@ -1,6 +1,6 @@
# Cancel a Check
_Requires the [Checks Amendment](known-amendments.html#checks)._
_Requires the [Checks amendment][]._
This tutorial shows how to cancel a [Check](checks.html), which removes the [Check object from the ledger](check.html) without sending money.

View File

@@ -1,6 +1,6 @@
# Cash a Check for a Flexible Amount
_Requires the [Checks Amendment](known-amendments.html#checks)._
_Requires the [Checks amendment][]._
As long as the Check is in the ledger and not expired, the specified recipient can cash it to receive a flexible amount by sending a [CheckCash transaction][] with a `DeliverMin` field. When cashing a Check in this way, the receiver gets as much as is possible to deliver, debiting the Check's sender for the Check's full `SendMax` amount or as much as is available. Cashing fails if it doesn't deliver at least the `DeliverMin` amount to the Check's recipient.

View File

@@ -1,6 +1,6 @@
# Cash a Check for an Exact Amount
_Requires the [Checks Amendment](known-amendments.html#checks)._
_Requires the [Checks amendment][]._
As long as the Check is in the ledger and not expired, the specified recipient can cash it to receive any exact amount up to the amount specified in the Check by sending a [CheckCash transaction][] with an `Amount` field. You would cash a Check this way if you want to receive a specific amount, for example to pay off an invoice or bill exactly.

View File

@@ -1,6 +1,6 @@
# Look Up Checks by Recipient
_Requires the [Checks Amendment](known-amendments.html#checks)._
_Requires the [Checks amendment][]._
This tutorial shows how to look up [Checks](checks.html) by their recipient. You may also want to [look up Checks by sender](look-up-checks-by-sender.html).

View File

@@ -1,6 +1,6 @@
# Look Up Checks by Sender
_Requires the [Checks Amendment](known-amendments.html#checks)._
_Requires the [Checks amendment][]._
This tutorial shows how to look up [Checks](checks.html) by their sender. You may also want to [look up Checks by recipient](look-up-checks-by-recipient.html).

View File

@@ -1,6 +1,6 @@
# Send a Check
_Requires the [Checks Amendment](known-amendments.html#checks)._
_Requires the [Checks amendment][]._
Sending a Check is like writing permission for an intended recipient to pull a payment from you. The outcome of this process is a [Check object in the ledger](check.html) which the recipient can cash later.

View File

@@ -2,4 +2,9 @@
Checks in the XRP Ledger authorize another account to claim funds later, similar to how personal paper checks work.
**Caution:** As of 2018-10-11, the [Checks amendment](known-amendments.html#checks) is not enabled on the XRP Ledger. You can use Checks on the [XRP Test Net](xrp-test-net-faucet.html) only.
**Caution:** As of 2018-10-11, the [Checks amendment][] is not enabled on the XRP Ledger. You can use Checks on the [XRP Test Net](xrp-test-net-faucet.html) only.
<!--{# common link defs #}-->
{% include '_snippets/rippled-api-links.md' %}
{% include '_snippets/tx-type-links.md' %}
{% include '_snippets/rippled_versions.md' %}

View File

@@ -43,7 +43,7 @@ _Websocket_
You can use the [account_objects method][] to look up escrow objects by destination address.
**Note:** You can only look up pending escrow objects by destination address if those escrows were created after the [fix1523 amendment](known-amendments.html#fix1523) was enabled on 2017-11-14.
**Note:** You can only look up pending escrow objects by destination address if those escrows were created after the [fix1523 amendment][] was enabled on 2017-11-14.
Let's say that you want to look up all pending escrow objects with a destination address of `rfztBskAVszuS3s5Kq7zDS74QtHrw893fm`. You can do this using the following example request, where the destination address is the `account` value.

View File

@@ -32,6 +32,7 @@ default_filters:
- badges
- link_replacement
- external_links
- status_badges
callout_class: "devportal-callout"
@@ -273,6 +274,7 @@ pages:
doc_type: Concepts
category: Complex Payment Types
blurb: Checks let users create deferred payments that can be canceled or cashed by the intended recipients.
status: not_enabled
targets:
- local
@@ -818,6 +820,7 @@ pages:
category: Use Complex Payment Types
subcategory: Use Checks
blurb: Checks in the XRP Ledger authorize another account to claim funds later, similar to how personal paper checks work.
status: not_enabled
template: template-landing-children.html
targets:
- local
@@ -828,6 +831,7 @@ pages:
doc_type: Tutorials
category: Use Complex Payment Types
subcategory: Use Checks
status: not_enabled
targets:
- local
@@ -837,6 +841,7 @@ pages:
doc_type: Tutorials
category: Use Complex Payment Types
subcategory: Use Checks
status: not_enabled
targets:
- local
@@ -846,6 +851,7 @@ pages:
doc_type: Tutorials
category: Use Complex Payment Types
subcategory: Use Checks
status: not_enabled
targets:
- local
@@ -855,6 +861,7 @@ pages:
doc_type: Tutorials
category: Use Complex Payment Types
subcategory: Use Checks
status: not_enabled
targets:
- local
@@ -864,6 +871,7 @@ pages:
doc_type: Tutorials
category: Use Complex Payment Types
subcategory: Use Checks
status: not_enabled
targets:
- local
@@ -873,6 +881,7 @@ pages:
doc_type: Tutorials
category: Use Complex Payment Types
subcategory: Use Checks
status: not_enabled
targets:
- local
@@ -2217,6 +2226,7 @@ pages:
category: Ledger Data Formats
subcategory: Ledger Object Types
blurb: A check that can be redeemed for money by its destination.
status: not_enabled
targets:
- local
@@ -2371,6 +2381,7 @@ pages:
category: Transaction Formats
subcategory: Transaction Types
blurb: Cancel a check.
status: not_enabled
targets:
- local
@@ -2382,6 +2393,7 @@ pages:
category: Transaction Formats
subcategory: Transaction Types
blurb: Redeem a check.
status: not_enabled
targets:
- local
@@ -2393,6 +2405,7 @@ pages:
category: Transaction Formats
subcategory: Transaction Types
blurb: Create a check.
status: not_enabled
targets:
- local

View File

@@ -11,7 +11,6 @@
import re
def filter_soup(soup, **kwargs):
"""
Adds an external link marker to external links

View File

@@ -0,0 +1,24 @@
################################################
## Amendment Flask Marker
## Author: Rome Reginelli
## Copyright: Ripple Labs, 2019
##
## Uses the
## - end with an "external link" icon
## (FontAwesome required)
################################################
import os.path
STATUSES = {
":not_enabled:": "template-status_not_enabled.html",
":enabled:": "template-status_enabled.html",
}
def filter_markdown(md, config={}, **kwargs):
for needle, src_file in STATUSES.items():
with open(os.path.join(config["template_path"], src_file)) as f:
replacement = f.read().strip()
md = md.replace(needle, replacement)
return md

View File

@@ -55,10 +55,10 @@
</head>
<body class="xrp-ledger-dev-portal {% if currentpage.sidebar != "disabled" %}sidebar-primary {% endif %}{% block bodyclasses %}{% endblock %}">
<body class="xrp-ledger-dev-portal {% if currentpage.sidebar is undefined or currentpage.sidebar != "disabled" %}sidebar-primary {% endif %}{% block bodyclasses %}{% endblock %}">
<nav class="navbar fixed-top navbar-expand-lg navbar-light bg-white">
<a href="{% if target.no_cover %}/{% else %}index.html{% endif %}" class="navbar-brand"><img src="assets/img/XRPLedger_DevPortal_Gray.svg" class="logo" width="120" height="35" alt="XRP Ledger Dev Portal" /></a>
<a href="{% if target.no_cover is defined and target.no_cover %}/{% else %}index.html{% endif %}" class="navbar-brand"><img src="assets/img/XRPLedger_DevPortal_Gray.svg" class="logo" width="120" height="35" alt="XRP Ledger Dev Portal" /></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarHolder" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
@@ -67,8 +67,8 @@
{% set funnels = [] %}
{% for page in pages %}
{% if page.funnel is defined and page.funnel not in funnels %}
{% set thisfunneltop = pages|selectattr('funnel', 'equalto', page.funnel)|first %}
<li class="nav-item{% if currentpage == thisfunneltop %} active{% elif currentpage.funnel == thisfunneltop.name %} active-parent{% endif %}">
{% set thisfunneltop = pages|selectattr('funnel', 'defined_and_equalto', page.funnel)|first %}
<li class="nav-item{% if currentpage == thisfunneltop %} active{% elif currentpage.funnel is defined and currentpage.funnel == thisfunneltop.name %} active-parent{% endif %}">
<a class="nav-link" href="{{ thisfunneltop.html }}">{{ thisfunneltop.name }}</a>
</li>
{% set _ = funnels.append(page.funnel) %}
@@ -90,20 +90,20 @@
<div class="container-fluid" role="document" id="main_content_wrapper">
<div class="row">
<!-- Right sidebar first so it's at the beginning for mobile layouts -->
{% if currentpage.sidebar != "disabled" and currentpage.sidebar != "left_only" %}
{% if currentpage.sidebar is undefined or (currentpage.sidebar != "disabled" and currentpage.sidebar != "left_only") %}
<aside class="right-sidebar col-lg-3 order-lg-4 p-0" role="complementary">
{% block right_sidebar %}{% endblock %}
</aside>
{% endif %}
<!-- main column -->
<main class="main {% if currentpage.sidebar == "disabled" %}col-md-12{% else %}col-md-7 col-lg-6{% endif %} order-md-3 p-0 {% block mainclasses %}{% endblock %}" role="main" id="main_content_body">
<main class="main {% if currentpage.sidebar is defined and currentpage.sidebar == "disabled" %}col-md-12{% else %}col-md-7 col-lg-6{% endif %} order-md-3 p-0 {% block mainclasses %}{% endblock %}" role="main" id="main_content_body">
{% block breadcrumbs %}
{% include 'template-breadcrumbs.html' %}
{% endblock %}
{% block main %}{% endblock %}
</main>
{% if currentpage.sidebar != "disabled" %}
{% if currentpage.sidebar is undefined or currentpage.sidebar != "disabled" %}
<!-- Left sidebar last so it's at the end for mobile -->
<aside class="sidebar col-md-5 col-lg-3 p-0 order-md-1" role="complementary">
{% block left_sidebar %}

View File

@@ -1,20 +1,20 @@
<nav class="breadcrumbs-wrap {% if currentpage.sidebar == 'disabled' %}p-3 px-sm-4{% else %}p-3{% endif %}" aria-label="breacrumb">
<nav class="breadcrumbs-wrap {% if currentpage.sidebar is defined and currentpage.sidebar == 'disabled' %}p-3 px-sm-4{% else %}p-3{% endif %}" aria-label="breacrumb">
<ul class="breadcrumb bg-white">
<li class="breadcrumb-item"><a href="{% if target.no_cover %}/{% else %}index.html{% endif %}">Home</a></li>
{% if currentpage.funnel and currentpage != pages|selectattr('funnel', 'equalto', currentpage.funnel)|first %}
<li class="active breadcrumb-item"><a href="{{ (pages|selectattr('funnel', 'equalto', currentpage.funnel)|first).html }}">{{ currentpage.funnel }}</a></li>
<li class="breadcrumb-item"><a href="{% if target.no_cover is defined and target.no_cover %}/{% else %}index.html{% endif %}">Home</a></li>
{% if currentpage.funnel is defined and currentpage != pages|selectattr('funnel', 'defined_and_equalto', currentpage.funnel)|first %}
<li class="active breadcrumb-item"><a href="{{ (pages|selectattr('funnel', 'defined_and_equalto', currentpage.funnel)|first).html }}">{{ currentpage.funnel }}</a></li>
{% endif %}
{% if currentpage.doc_type and currentpage != pages|selectattr('doc_type', 'equalto', currentpage.doc_type)|first%}
<li class="active breadcrumb-item"><a href="{{ (pages|selectattr('doc_type', 'equalto', currentpage.doc_type)|first).html }}">{{ currentpage.doc_type }}</a></li>
{% if currentpage.doc_type is defined and currentpage != pages|selectattr('doc_type', 'defined_and_equalto', currentpage.doc_type)|first%}
<li class="active breadcrumb-item"><a href="{{ (pages|selectattr('doc_type', 'defined_and_equalto', currentpage.doc_type)|first).html }}">{{ currentpage.doc_type }}</a></li>
{% endif %}
{% if currentpage.supercategory and currentpage != pages|selectattr('supercategory', 'equalto', currentpage.supercategory)|first %}
<li class="active breadcrumb-item"><a href="{{ (pages|selectattr('supercategory', 'equalto', currentpage.supercategory)|first).html }}">{{ currentpage.supercategory }}</a></li>
{% if currentpage.supercategory is defined and currentpage != pages|selectattr('supercategory', 'defined_and_equalto', currentpage.supercategory)|first %}
<li class="active breadcrumb-item"><a href="{{ (pages|selectattr('supercategory', 'defined_and_equalto', currentpage.supercategory)|first).html }}">{{ currentpage.supercategory }}</a></li>
{% endif %}
{% if currentpage.category and currentpage != pages|selectattr('category', 'equalto', currentpage.category)|first %}
<li class="active breadcrumb-item"><a href="{{ (pages|selectattr('category', 'equalto', currentpage.category)|first).html }}">{{ currentpage.category }}</a></li>
{% if currentpage.category is defined and currentpage != pages|selectattr('category', 'defined_and_equalto', currentpage.category)|first %}
<li class="active breadcrumb-item"><a href="{{ (pages|selectattr('category', 'defined_and_equalto', currentpage.category)|first).html }}">{{ currentpage.category }}</a></li>
{% endif %}
{% if currentpage.subcategory and currentpage != pages|selectattr('subcategory', 'equalto', currentpage.subcategory)|first %}
<li class="active breadcrumb-item"><a href="{{ (pages|selectattr('subcategory', 'equalto', currentpage.subcategory)|first).html }}">{{ currentpage.subcategory }}</a></li>
{% if currentpage.subcategory is defined and currentpage != pages|selectattr('subcategory', 'defined_and_equalto', currentpage.subcategory)|first %}
<li class="active breadcrumb-item"><a href="{{ (pages|selectattr('subcategory', 'defined_and_equalto', currentpage.subcategory)|first).html }}">{{ currentpage.subcategory }}</a></li>
{% endif %}
<li class="active breadcrumb-item">{{ currentpage.name }}</li>
</ul>

View File

@@ -4,7 +4,7 @@
{% set funnels = [] %}
{% for page in pages %}
{% if page.funnel is defined and page.funnel not in funnels %}
{% set parent_page = pages|selectattr('funnel', 'equalto', page.funnel)|first %}
{% set parent_page = pages|selectattr('funnel', 'defined_and_equalto', page.funnel)|first %}
<div class="col mx-xl-5 my-3 foot-nav-col">
<h5><a class="foot-nav-link" href="{{ parent_page.html }}">{{ parent_page.name }}</a><hr /></h5>

View File

@@ -15,7 +15,7 @@
{% set githuburl = target.github_forkurl + "/edit/"
+ target.github_branch + "/tool/" + currentpage.template %}
{% endif %}
{% if target.is_pr_build and have_edit_link %}
{% if target.is_pr_build is defined and target.is_pr_build and have_edit_link %}
{% set githuburl = githuburl + "?pr=/ripple/ripple-dev-portal/pull/"
+ target.github_pr_id %}
{% endif %}

View File

@@ -70,7 +70,7 @@
<h3 class="card-title"><img class="card-title-icon" src="assets/img/map.svg" alt="(map icon)" width="32" height="32" /> View Use Cases</h3>
</div><!--/.card-header-->
<div class="card-body">
{% set parent_page = pages|selectattr("name", "equalto", "Use Cases")|first %}
{% set parent_page = pages|selectattr("name", 'defined_and_equalto', "Use Cases")|first %}
{% set depth = 1 %}
{% include 'template-page-children.html' %}
</div><!--/.card-body-->
@@ -96,7 +96,7 @@
<div class="curated-links">
<ol>
{% for link in target.recently_updated %}
{% set linkpage = pages|selectattr("html", "equalto", link.html)|first %}
{% set linkpage = pages|selectattr("html", 'defined_and_equalto', link.html)|first %}
<li><a href="{{linkpage.html}}">{{linkpage.name}}{% if link.date is defined %} <span class="recently-updated-date">({{link.date}})</span>{% endif %}</a></li>
{% endfor %}
</ol>

View File

@@ -13,7 +13,7 @@
{% set doc_types = [] %}
{% for page in pages %}
{% if page.doc_type is defined and page.doc_type not in doc_types %}
{% set doc_type_top = pages|selectattr('doc_type', 'equalto', page.doc_type)|first %}
{% set doc_type_top = pages|selectattr('doc_type', 'defined_and_equalto', page.doc_type)|first %}
<div class="card">
<div class="card-header bg-dark">
@@ -79,7 +79,7 @@
<div class="curated-links">
<ol>
{% for link in target.recently_updated %}
{% set linkpage = pages|selectattr("html", "equalto", link.html)|first %}
{% set linkpage = pages|selectattr("html", 'defined_and_equalto', link.html)|first %}
<li><a href="{{linkpage.html}}">{{linkpage.name}}{% if link.date is defined %} <span class="recently-updated-date">({{link.date}})</span>{% endif %}</a></li>
{% endfor %}
</ol>

View File

@@ -12,8 +12,8 @@
<h2><a href="rippled-api.html">rippled API Reference</a></h2>
<p class="blurb">Use the <code>rippled</code> API to communicate with a <code>rippled</code> server, the core peer-to-peer server that manages the XRP Ledger.</p>
<div class="card-deck pt-3 pt-sm-4">
{% for page in pages|selectattr("supercategory", "equalto", "rippled API")|list %}
{% if loop.index != 1 and page == pages|selectattr("category", "equalto", page.category)|first %}
{% for page in pages|selectattr("supercategory", 'defined_and_equalto', "rippled API")|list %}
{% if loop.index != 1 and page == pages|selectattr("category", 'defined_and_equalto', page.category)|first %}
<div class="card">
<div class="card-header bg-dark">
<h3 class="card-title">{{page.name}}</h3>
@@ -59,8 +59,8 @@
<p class="blurb">Here are a few other ways to interact with the XRP Ledger.</p>
<div class="card-deck pt-3 pt-sm-4">
{% for page in pages|selectattr("doc_type", "equalto", "References")|selectattr("supercategory", "ne", "rippled API") %}
{% if loop.index != 1 and page == pages|selectattr("category", "equalto", page.category)|first %}
{% for page in pages|selectattr("doc_type", 'defined_and_equalto', "References")|selectattr("supercategory", "undefined_or_ne", "rippled API") %}
{% if loop.index != 1 and page == pages|selectattr("category", 'defined_and_equalto', page.category)|first %}
<div class="card">
<div class="card-header">
<h3 class="card-title"><a href="{{page.html}}">{{page.name}}</a></h3>

View File

@@ -13,26 +13,26 @@
{% set parent_level = "home" %}
{% set level_2 = "funnel" %}
{% set childpages = pages %}{# special case for home #}
{% elif parent_page == pages|selectattr("funnel", "equalto", parent_page.funnel)|first %}
{% elif parent_page == pages|selectattr("funnel", 'defined_and_equalto', parent_page.funnel)|first %}
{% set parent_level = "funnel" %}
{% set level_2 = "doc_type" %}
{% elif parent_page == pages|selectattr("doc_type", "equalto", parent_page.doc_type)|first %}
{% elif parent_page.doc_type is defined and parent_page == pages|selectattr("doc_type", 'defined_and_equalto', parent_page.doc_type)|first %}
{% set parent_level = "doc_type" %}
{% set level_2 = "supercategory" %}
{% elif parent_page == pages|selectattr("supercategory", "equalto", parent_page.supercategory)|first %}
{% elif parent_page.supercategory is defined and parent_page == pages|selectattr("supercategory", 'defined_and_equalto', parent_page.supercategory)|first %}
{% set parent_level = "supercategory" %}
{% set level_2 = "category" %}
{% elif parent_page == pages|selectattr("category", "equalto", parent_page.category)|first %}
{% elif parent_page.category is defined and parent_page == pages|selectattr("category", 'defined_and_equalto', parent_page.category)|first %}
{% set parent_level = "category" %}
{% set level_2 = "subcategory" %}
{% elif parent_page == pages|selectattr("subcategory", "equalto", parent_page.subcategory)|first %}
{% elif parent_page.subcategory is defined and parent_page == pages|selectattr("subcategory", 'defined_and_equalto', parent_page.subcategory)|first %}
{% set parent_level = "subcategory" %}
{% set level_2 = None %}
{% else %}
<!-- TEMPLATE ERROR: page {{parent_page.name}} is not the parent of anything? -->
{% endif %}
{% if parent_level != "home" %}
{% set childpages = pages|selectattr(parent_level, "equalto", parent_page[parent_level])|list %}
{% set childpages = pages|selectattr(parent_level, 'defined_and_equalto', parent_page[parent_level])|list %}
{% endif %}
{% macro print_children(parent, thosepages, indent_level, next_level_field, depth_limit) %}
@@ -51,7 +51,7 @@
{% if onepage.category not in printed_next_levels %}
{% set next_level_children = thosepages|selectattr("category",
"equalto", onepage.category)|list %}
'defined_and_equalto', onepage.category)|list %}
{% set next_level_parent = next_level_children|first %}
<li class="level-{{indent_level}}"><a href="{{next_level_parent.html}}">{{next_level_parent.name}}</a>{% if show_blurbs and next_level_parent.blurb is defined and indent_level == 1 %}<p class="blurb child-blurb">{{next_level_parent.blurb}}</p>{% endif %}</li>
{% if indent_level+1 <= depth_limit and next_level_field != None %}
@@ -70,8 +70,8 @@
{% elif onepage[next_level_field] is defined %}
{# might be a grandchild or lower #}
{% if onepage[next_level_field] not in printed_next_levels %}
{% set next_level_children = thosepages|selectattr(next_level_field,
"equalto", onepage[next_level_field])|list %}
{% set next_level_children = thosepages|selectattr(next_level_field,'defined')|selectattr(next_level_field,
'defined_and_equalto', onepage[next_level_field])|list %}
{% set next_level_parent = next_level_children|first %}
<li class="level-{{indent_level}}"><a href="{{next_level_parent.html}}">{{next_level_parent.name}}</a>{% if show_blurbs and next_level_parent.blurb is defined and indent_level == 1 %}<p class="blurb child-blurb">{{next_level_parent.blurb}}</p>{% endif %}</li>
{% if (indent_level+1 <= depth_limit and next_level_field != None)

View File

@@ -3,35 +3,35 @@
<!--{############# Parent page link ###############################}-->
{% if currentpage.supercategory is defined %}
<div class="sidenav_parent">
{% if currentpage == (pages|selectattr('supercategory', 'equalto', currentpage.supercategory)|first) %}
{% if currentpage == (pages|selectattr('supercategory', 'defined_and_equalto', currentpage.supercategory)|first) %}
<a class="active" href="{{ currentpage.html }}">{{ currentpage.supercategory }}</a>
{% else %}
<a href="{{ (pages|selectattr('supercategory', 'equalto', currentpage.supercategory)|first).html }}"><i class="fa fa-angle-double-left" aria-hidden="true"></i> {{ currentpage.supercategory }}</a>
<a href="{{ (pages|selectattr('supercategory', 'defined_and_equalto', currentpage.supercategory)|first).html }}"><i class="fa fa-angle-double-left" aria-hidden="true"></i> {{ currentpage.supercategory }}</a>
{% endif %}
</div>
{% elif currentpage.doc_type is defined %}
<div class="sidenav_parent">
{% if currentpage == (pages|selectattr('doc_type', 'equalto', currentpage.doc_type)|first) %}
{% if currentpage == (pages|selectattr('doc_type', 'defined_and_equalto', currentpage.doc_type)|first) %}
<a class="active" href="{{ currentpage.html }}">{{ currentpage.doc_type }}</a>
{% else %}
<a href="{{ (pages|selectattr('doc_type', 'equalto', currentpage.doc_type)|first).html }}"><i class="fa fa-angle-double-left" aria-hidden="true"></i> {{ currentpage.doc_type }}</a>
<a href="{{ (pages|selectattr('doc_type', 'defined_and_equalto', currentpage.doc_type)|first).html }}"><i class="fa fa-angle-double-left" aria-hidden="true"></i> {{ currentpage.doc_type }}</a>
{% endif %}
</div>
{% elif currentpage.funnel is defined %}
<div class="sidenav_parent">
{% if currentpage == (pages|selectattr('funnel', 'equalto', currentpage.funnel)|first) %}
{% if currentpage == (pages|selectattr('funnel', 'defined_and_equalto', currentpage.funnel)|first) %}
<a class="active" href="{{ currentpage.html }}">{{ currentpage.funnel }}</a>
{% else %}
<a href="{{ (pages|selectattr('funnel', 'equalto', currentpage.funnel)|first).html }}"><i class="fa fa-angle-double-left" aria-hidden="true"></i> {{ currentpage.funnel }}</a>
<a href="{{ (pages|selectattr('funnel', 'defined_and_equalto', currentpage.funnel)|first).html }}"><i class="fa fa-angle-double-left" aria-hidden="true"></i> {{ currentpage.funnel }}</a>
{% endif %}
</div>
{% endif %}
<!--{############# Sidebar links ###############################}-->
{% if not pages|selectattr("funnel", "equalto", currentpage.funnel)|selectattr("category", "defined")|list|length %}
{% if not pages|selectattr("funnel", 'defined_and_equalto', currentpage.funnel)|selectattr("category", "defined")|list|length %}
<!--{##### Case: no funnel categories, simple one-category sidebar ####}-->
{% set funnelpages = pages|selectattr("funnel", "equalto", currentpage.funnel)|list %}
{% set funnelpages = pages|selectattr("funnel", 'defined_and_equalto', currentpage.funnel)|list %}
<div id="sidenav" aria-multiselectable="true">
<div class="card active">
<div class="card-body">
@@ -39,9 +39,9 @@
{% for page in funnelpages %}
{% if loop.index == 1 %}{# Skip the first element since it's linked by the funnel header #}
{% elif page == currentpage %}
<li><a class="active nosubcat-page" href="{{ page.html }}">{{ page.name }}</a></li>
<li><a class="active nosubcat-page" href="{{ page.html }}">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% else %}
<li><a class="nosubcat-page" href="{{ page.html }}">{{ page.name }}</a></li>
<li><a class="nosubcat-page" href="{{ page.html }}">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% endif %}
{% endfor %}
</ul>
@@ -53,27 +53,27 @@
<!--{# Case: in a supercategory, show cards for that supercategory's categories #}-->
<div id="sidenav" role="tablist" aria-multiselectable="true">
{% for cat in categories %}
{% set catpages = pages|selectattr("category", "equalto", cat)|list %}
{% set catpages = pages|selectattr("category", 'defined_and_equalto', cat)|list %}
{% if currentpage.funnel is defined %}
{% set catpages = catpages|selectattr("funnel", "equalto", currentpage.funnel)|list %}
{% set catpages = catpages|selectattr("funnel", 'defined_and_equalto', currentpage.funnel)|list %}
{% endif %}
{% if currentpage.doc_type is defined %}
{% set catpages = catpages|selectattr("doc_type", "equalto", currentpage.doc_type)|list %}
{% set catpages = catpages|selectattr("doc_type", 'defined_and_equalto', currentpage.doc_type)|list %}
{% endif %}
{% set catpages = catpages|selectattr("supercategory", "equalto", currentpage.supercategory)|list %}
{% set catpages = catpages|selectattr("supercategory", 'defined_and_equalto', currentpage.supercategory)|list %}
{% if catpages|length %}
{% set cat_parent = pages|selectattr('category', 'equalto', cat)|first %}
<div class="card{% if currentpage.category == cat %} active{% endif %}">
{% set cat_parent = pages|selectattr('category', 'defined_and_equalto', cat)|first %}
<div class="card{% if currentpage.category is defined and currentpage.category == cat %} active{% endif %}">
<div class="card-header" role="tab" id="sidenav_cat_head_{{loop.index}}">
<h5 class="card-title">
{% if catpages|length > 1 %}
<a class="{% if currentpage.category != cat %}collapsed {% endif %}sidenav_cat_toggler" role="button" data-toggle="collapse" href="#sidenav_collapse_{{loop.index}}" aria-expanded="true" aria-controls="sidenav_collapse_{{loop.index}}">&nbsp;</a>
<a class="{% if currentpage.category is undefined or currentpage.category != cat %}collapsed {% endif %}sidenav_cat_toggler" role="button" data-toggle="collapse" href="#sidenav_collapse_{{loop.index}}" aria-expanded="true" aria-controls="sidenav_collapse_{{loop.index}}">&nbsp;</a>
{% endif %}
<a class="sidenav_cat_title{% if currentpage == (cat_parent) %} active{% elif currentpage.category == cat %} active-parent{% endif %}" href="{{ cat_parent.html }}">{{ cat }}</a>
<a class="sidenav_cat_title{% if currentpage == (cat_parent) %} active{% elif currentpage.category is defined and currentpage.category == cat %} active-parent{% endif %}" href="{{ cat_parent.html }}">{{ cat }}</a>
</h5>
</div><!-- /.card-header -->
<div id="sidenav_collapse_{{loop.index}}" class="collapse{% if currentpage.category == cat %} show{% endif %}" role="tabpanel" aria-labelledby="sidenav_cat_head_{{loop.index}}">
<div id="sidenav_collapse_{{loop.index}}" class="collapse{% if currentpage.category is defined and currentpage.category == cat %} show{% endif %}" role="tabpanel" aria-labelledby="sidenav_cat_head_{{loop.index}}">
<div class="card-body">
<ul class="sidebar_pagelist">
{% set printed_subcategories = [] %}
@@ -81,25 +81,25 @@
{% if loop.index != 1 %}{# Skip the first element since it's linked by the category header #}
{% if page.subcategory is undefined %}
{% if page == currentpage %}
<li><a class="active nosubcat-page" href="{{ page.html }}">{{ page.name }}</a></li>
<li><a class="active nosubcat-page" href="{{ page.html }}">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% else %}
<li><a class="nosubcat-page" href="{{ page.html }}">{{ page.name }}</a></li>
<li><a class="nosubcat-page" href="{{ page.html }}">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% endif %}
{% elif page.subcategory not in printed_subcategories %}
{% if page == currentpage %}
<li><a class="subcat-title active" href="#main_content_body">{{ page.name }}</a></li>
{% elif page.subcategory == currentpage.subcategory %}
<li><a class="subcat-title active-parent" href="{{ page.html }}">{{ page.name }}</a></li>
<li><a class="subcat-title active" href="#main_content_body">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% elif currentpage.subcategory is defined and page.subcategory == currentpage.subcategory %}
<li><a class="subcat-title active-parent" href="{{ page.html }}">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% else %}
<li><a class="subcat-title" href="{{ page.html }}">{{ page.name }}</a></li>
<li><a class="subcat-title" href="{{ page.html }}">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% endif %}
{% for subpage in catpages|selectattr('subcategory', 'equalto', page.subcategory) %}
{% for subpage in catpages|selectattr('subcategory', 'defined_and_equalto', page.subcategory) %}
{% if subpage != page %}
{% if subpage == currentpage %}
<li><a class="active subpage" href="#main_content_body">{{ subpage.name }}</a></li>
<li><a class="active subpage" href="#main_content_body">{{ subpage.name }}{% if subpage.status is defined and subpage.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% else %}
<li><a class="subpage" href="{{ subpage.html }}">{{ subpage.name }}</a></li>
<li><a class="subpage" href="{{ subpage.html }}">{{ subpage.name }}{% if subpage.status is defined and subpage.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% endif %}
{% endif %}
{% endfor %}
@@ -120,9 +120,9 @@
{% else %}
<!--{##### Case: Not in a supercategory, but siblings might be #}-->
{% set sidebar_pagelist = pages|selectattr("funnel", "equalto", currentpage.funnel)|list %}
{% set sidebar_pagelist = pages|selectattr("funnel", 'defined_and_equalto', currentpage.funnel)|list %}
{% if currentpage.doc_type is defined %}
{% set sidebar_pagelist = sidebar_pagelist|selectattr("doc_type", "equalto", currentpage.doc_type)|list %}
{% set sidebar_pagelist = sidebar_pagelist|selectattr("doc_type", 'defined_and_equalto', currentpage.doc_type)|list %}
{% endif %}
{% set printed_modules = [] %}
<div id="sidenav" role="tablist" aria-multiselectable="true">
@@ -131,7 +131,7 @@
{% if page.supercategory not in printed_modules %}
<!--{################# Supercategory Card ####################}-->
{% set supercat = page.supercategory %}
{% set supercatpages = sidebar_pagelist|selectattr("supercategory", "equalto", page.supercategory)|list %}
{% set supercatpages = sidebar_pagelist|selectattr("supercategory", 'defined_and_equalto', page.supercategory)|list %}
{% if supercatpages|length %}
{% set supercat_parent = supercatpages|first %}
{% set _ = printed_modules.append(page.supercategory) %}
@@ -152,14 +152,14 @@
{% for subpage in supercatpages %}
{% if loop.index != 1 %}{# Skip the first element since it's linked by the supercategory header #}
{% if subpage.category not in printed_categories %}
<li><a class="subcat-title" href="{{ subpage.html }}">{{ subpage.name }}</a></li>
<li><a class="subcat-title" href="{{ subpage.html }}">{{ subpage.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% set category_members = supercatpages|selectattr('category', 'equalto', subpage.category)|list %}
{% set category_members = supercatpages|selectattr('category', 'defined_and_equalto', subpage.category)|list %}
<!-- DEBUG: category_members is {{ category_members }} -->
{% for subsubpage in category_members %}
{% if subsubpage != subpage and (subsubpage.subcategory is undefined or
subsubpage == category_members|selectattr('subcategory', 'equalto', subsubpage.subcategory)|first) %}
<li><a class="subpage" href="{{ subsubpage.html }}">{{ subsubpage.name }}</a></li>
subsubpage == category_members|selectattr('subcategory', 'defined_and_equalto', subsubpage.subcategory)|first) %}
<li><a class="subpage" href="{{ subsubpage.html }}">{{ subsubpage.name }}{% if subsubpage.status is defined and subsubpage.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% endif %}
{% endfor %}
{% set _ = printed_categories.append(subpage.category) %}
@@ -182,20 +182,20 @@
{% elif page.category is defined and page.category not in printed_modules %}
<!--{################# Category Card ####################}-->
{% set cat = page.category %}
{% set catpages = sidebar_pagelist|selectattr("category", "equalto", page.category)|list %}
{% set catpages = sidebar_pagelist|selectattr("category", 'defined_and_equalto', page.category)|list %}
{% if catpages|length %}
{% set cat_parent = catpages|first %}
<div class="card{% if currentpage.category == cat %} active{% endif %}">
<div class="card{% if currentpage.category is defined and currentpage.category == cat %} active{% endif %}">
<div class="card-header" role="tab" id="sidenav_cat_head_{{loop.index}}">
<h5 class="card-title">
{% if catpages|length > 1 %}
<a class="{% if currentpage.category != cat %}collapsed {% endif %}sidenav_cat_toggler" role="button" data-toggle="collapse" href="#sidenav_collapse_{{loop.index}}" aria-expanded="true" aria-controls="sidenav_collapse_{{loop.index}}">&nbsp;</a>
<a class="{% if currentpage.category is undefined or currentpage.category != cat %}collapsed {% endif %}sidenav_cat_toggler" role="button" data-toggle="collapse" href="#sidenav_collapse_{{loop.index}}" aria-expanded="true" aria-controls="sidenav_collapse_{{loop.index}}">&nbsp;</a>
{% endif %}
<a class="sidenav_cat_title{% if currentpage == (cat_parent) %} active{% elif currentpage.category == cat %} active-parent{% endif %}" href="{{ cat_parent.html }}">{{ cat }}</a>
<a class="sidenav_cat_title{% if currentpage == (cat_parent) %} active{% elif currentpage.category is defined and currentpage.category == cat %} active-parent{% endif %}" href="{{ cat_parent.html }}">{{ cat }}</a>
</h5>
</div><!-- /.card-header -->
<div id="sidenav_collapse_{{loop.index}}" class="collapse{% if currentpage.category == cat %} show{% endif %}" role="tabpanel" aria-labelledby="sidenav_cat_head_{{loop.index}}">
<div id="sidenav_collapse_{{loop.index}}" class="collapse{% if currentpage.category is defined and currentpage.category == cat %} show{% endif %}" role="tabpanel" aria-labelledby="sidenav_cat_head_{{loop.index}}">
<div class="card-body">
<ul class="sidebar_pagelist">
{% set printed_subcategories = [] %}
@@ -203,25 +203,25 @@
{% if loop.index != 1 %}{# Skip the first element since it's linked by the category header #}
{% if page.subcategory is undefined %}
{% if page == currentpage %}
<li><a class="active nosubcat-page" href="{{ page.html }}">{{ page.name }}</a></li>
<li><a class="active nosubcat-page" href="{{ page.html }}">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% else %}
<li><a class="nosubcat-page" href="{{ page.html }}">{{ page.name }}</a></li>
<li><a class="nosubcat-page" href="{{ page.html }}">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% endif %}
{% elif page.subcategory not in printed_subcategories %}
{% if page == currentpage %}
<li><a class="subcat-title active" href="#main_content_body">{{ page.name }}</a></li>
{% elif page.subcategory == currentpage.subcategory %}
<li><a class="subcat-title active-parent" href="{{ page.html }}">{{ page.name }}</a></li>
<li><a class="subcat-title active" href="#main_content_body">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% elif page.subcategory is defined and currentpage.subcategory is defined and page.subcategory == currentpage.subcategory %}
<li><a class="subcat-title active-parent" href="{{ page.html }}">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% else %}
<li><a class="subcat-title" href="{{ page.html }}">{{ page.name }}</a></li>
<li><a class="subcat-title" href="{{ page.html }}">{{ page.name }}{% if page.status is defined and page.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% endif %}
{% for subpage in catpages|selectattr('subcategory', 'equalto', page.subcategory) %}
{% for subpage in catpages|selectattr('subcategory', 'defined_and_equalto', page.subcategory) %}
{% if subpage != page %}
{% if subpage == currentpage %}
<li><a class="active subpage" href="#main_content_body">{{ subpage.name }}</a></li>
<li><a class="active subpage" href="#main_content_body">{{ subpage.name }}{% if subpage.status is defined and subpage.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% else %}
<li><a class="subpage" href="{{ subpage.html }}">{{ subpage.name }}</a></li>
<li><a class="subpage" href="{{ subpage.html }}">{{ subpage.name }}{% if subpage.status is defined and subpage.status == "not_enabled" %} {% include 'template-status_not_enabled.html' %}{% endif %}</a></li>
{% endif %}
{% endif %}
{% endfor %}

View File

@@ -0,0 +1 @@
<span class="status enabled" title="This feature is enabled on the production XRP Ledger as the result of an amendment."><i class="fa fa-flag"></i></span>

View File

@@ -0,0 +1 @@
<span class="status not_enabled" title="This feature is not currently enabled on the production XRP Ledger."><i class="fa fa-flask"></i></span>

View File

@@ -15,7 +15,7 @@
<div class="curated-links">
<ul>
{% for link in currentpage.useful_background %}
{% set linkpage = pages|selectattr("html", "equalto", link)|first %}
{% set linkpage = pages|selectattr("html", 'defined_and_equalto', link)|first %}
<li><a href="{{linkpage.html}}">{{linkpage.name}}</a></li>
{% endfor %}
</ol>