From e53e4581d14f1fb03e93cc7ac18791a7360801f5 Mon Sep 17 00:00:00 2001 From: mDuo13 Date: Fri, 1 Apr 2016 18:21:33 -0700 Subject: [PATCH] rippled - feature, submit_multisigned --- concept-amendments.html | 14 +- content/reference-rippled.md | 307 ++++++++++++++++++++++++++----- reference-rippled.html | 339 +++++++++++++++++++++++++++++------ 3 files changed, 563 insertions(+), 97 deletions(-) diff --git a/concept-amendments.html b/concept-amendments.html index 7a2f5af094..cd956cece5 100644 --- a/concept-amendments.html +++ b/concept-amendments.html @@ -158,8 +158,20 @@

It is theoretically possible (but extremely unlikely) that a tfLostMajority EnableAmendment pseudo-transaction could be included in the same ledger as the pseudo-transaction to enable an amendment. In this case, the pseudo-transaction with the tfLostMajority pseudo-transaction has no effect.

Amendment Voting

Operators of rippled validators can choose which amendments to support or reject using the feature command. This decides which amendments the validator votes for in the amendment process. By default, rippled votes in favor of every amendment it knows about.

-

The operator of a rippled validator can "veto" an amendment using the feature command. In this case, that validator never sends a vote in favor of the amendment. If enough trusted validators veto an amendment, then the amendment does not apply.

+

The operator of a rippled validator can "veto" an amendment. In this case, that validator never sends a vote in favor of the amendment. If enough servers veto an amendment, that prevents it from reaching consistent 80% support, so the amendment does not apply.

As with all aspects of the consensus process, amendment votes are only taken into account by servers that trust the validators sending those votes. Currently, Ripple recommends only trusting the 5 default validators that Ripple (the company) operates. For now, trusting only those validators is sufficient to coordinate with Ripple on releasing new features.

+

Configuring Amendment Voting

+

You can temporarily configure an amendment using the feature command. To make a persistent change to your server's support for an amendment, modify your server's rippled.cfg file.

+

Use the [veto_amendments] stanza to list amendments you do not want the server to vote for. Each line should contains one amendment's unique ID, optionally followed by the short name for the amendment. For example:

+
[veto_amendments]
+C1B8D934087225F509BEB5A8EC24447854713EE447D277F69545ABFA0E0FD490 Tickets
+DA1BD556B42D85EA9C84066D028D355B52416734D3283F85E216EA5DA6DB7E13 SusPay
+
+

Use the [amendments] stanza to list amendments you want to vote for. (Even if you do not list them here, by default a server votes for all the amendments it knows how to apply.) Each line should contains one amendment's unique ID, optionally followed by the short name for the amendment. For example:

+
[amendments]
+4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373 MultiSign
+42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE FeeEscalation
+

Testing Amendments

If you want to see how rippled behaves with an amendment enabled, before that amendment gets enabled on the production network, you can run use rippled's configuration file to forcibly enable a feature. This is intended for development purposes only.

Because other members of the consensus network probably do not have the feature enabled, you should not use this feature while connecting to the production network. While testing with features forcibly enabled, you should run rippled in Stand-Alone Mode.

diff --git a/content/reference-rippled.md b/content/reference-rippled.md index c6c3c2d592..cd85c03737 100755 --- a/content/reference-rippled.md +++ b/content/reference-rippled.md @@ -523,7 +523,9 @@ API methods for the Websocket and JSON-RPC APIs are defined by command names, an * [`server_info` - Retrieve status of the server in human-readable format](#server-info) * [`server_state` - Retrieve status of the server in machine-readable format](#server-state) * [`sign` - Cryptographically sign a transaction](#sign) +* [`sign_for` - Contribute to a multi-signature](#sign-for) * [`submit` - Send a transaction to the network](#submit) +* [`submit_multisigned` - Send a multi-signed transaction to the network](#submit-multisigned) * [`subscribe` - Listen for updates about a particular subject](#subscribe) * [`transaction_entry` - Retrieve info about a transaction from a particular ledger version](#transaction-entry) * [`tx` - Retrieve info about a transaction from all the ledgers on hand](#tx) @@ -537,6 +539,7 @@ The `owner_info` command is deprecated. Use [`account_objects`](#account-objects * [`can_delete` - Allow online deletion of ledgers up to a specific ledger](#can-delete) * [`connect` - Force the rippled server to connect to a specific peer](#connect) * [`consensus_info` - Get information about the state of consensus as it happens](#consensus-info) +* [`feature` - Get information about protocol amendments](#feature) * [`fetch_info` - Get information about the server's sync with the network](#fetch-info) * [`get_counts` - Get statistics about the server's internals and memory usage](#get-counts) * [`ledger_accept` - Close and advance the ledger in stand-alone mode](#ledger-accept) @@ -6774,35 +6777,35 @@ An example of the request format: ``` { - "id": "submit_multisigned_example", - "command": "submit_multisigned", - "tx_json": { - "Account": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC", - "Fee": "30000", - "Flags": 262144, - "LimitAmount": { - "currency": "USD", - "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", - "value": "0" - }, - "Sequence": 4, - "Signers": [{ - "Signer": { - "Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", - "SigningPubKey": "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF", - "TxnSignature": "3045022100CC9C56DF51251CB04BB047E5F3B5EF01A0F4A8A549D7A20A7402BF54BA744064022061EF8EF1BCCBF144F480B32508B1D10FD4271831D5303F920DE41C64671CB5B7" - } - }, { - "Signer": { - "Account": "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n", - "SigningPubKey": "03398A4EDAE8EE009A5879113EAA5BA15C7BB0F612A87F4103E793AC919BD1E3C1", - "TxnSignature": "3045022100FEE8D8FA2D06CE49E9124567DCA265A21A9F5465F4A9279F075E4CE27E4430DE022042D5305777DA1A7801446780308897699412E4EDF0E1AEFDF3C8A0532BDE4D08" - } - }], - "SigningPubKey": "", - "TransactionType": "TrustSet", - "hash": "81A477E2A362D171BB16BE17B4120D9F809A327FA00242ABCA867283BEA2F4F8" - } + "id": "submit_multisigned_example" + "command": "submit_multisigned", + "tx_json": { + "Account": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC", + "Fee": "30000", + "Flags": 262144, + "LimitAmount": { + "currency": "USD", + "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "value": "100" + }, + "Sequence": 2, + "Signers": [{ + "Signer": { + "Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "SigningPubKey": "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF", + "TxnSignature": "30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5" + } + }, { + "Signer": { + "Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v", + "SigningPubKey": "028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B", + "TxnSignature": "30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1" + } + }], + "SigningPubKey": "", + "TransactionType": "TrustSet", + "hash": "BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6" + } } ``` @@ -6891,7 +6894,7 @@ The request includes the following parameters: | Field | Type | Description | |----------|--------|-------------| | tx\_json | Object | [Transaction in JSON format](reference-transaction-format.html) with an array of `Signers`. To be successful, the weights of the signatures must be equal or higher than the quorum of the [SignerList](reference-ledger-format.html#signerlist). | -| fail\_hard | Boolean | (Optional) If true, (TODO) whatever fail_hard actually does. | +| fail\_hard | Boolean | (Optional, defaults to false) If true, and the transaction fails locally, do not retry or relay the transaction to other servers. | #### Response Format #### @@ -6902,7 +6905,47 @@ An example of a successful response: *WebSocket* ``` -//TODO: actual example here +{ + "id": "submit_multisigned_example", + "status": "success", + "type": "response", + "result": { + "engine_result": "tesSUCCESS", + "engine_result_code": 0, + "engine_result_message": "The transaction was applied. Only final in a validated ledger.", + "tx_blob": "1200142200040000240000000263D5038D7EA4C680000000000000000000000000005553440000000000B5F762798A53D543A014CAF8B297CFF8F2F937E868400000000000753073008114A3780F5CB5A44D366520FC44055E8ED44D9A2270F3E010732102B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF744730450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E58114204288D2E47F8EF6C99BCC457966320D12409711E1E0107321028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B744630440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC181147908A7F0EDD48EA896C3580A399F0EE78611C8E3E1F1", + "tx_json": { + "Account": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC", + "Fee": "30000", + "Flags": 262144, + "LimitAmount": { + "currency": "USD", + "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "value": "100" + }, + "Sequence": 2, + "Signers": [ + { + "Signer": { + "Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "SigningPubKey": "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF", + "TxnSignature": "30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5" + } + }, + { + "Signer": { + "Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v", + "SigningPubKey": "028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B", + "TxnSignature": "30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1" + } + } + ], + "SigningPubKey": "", + "TransactionType": "TrustSet", + "hash": "BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6" + } + } +} ``` *JSON-RPC* @@ -6964,17 +7007,10 @@ The response follows the [standard format](#response-formatting), with a success #### Possible Errors #### -TODO: confirm this list (copy-pasta from traditional submit) - * Any of the [universal error types](#universal-errors). -* `invalidTransaction` - The transaction is malformed or otherwise invalid. * `invalidParams` - One or more fields are specified incorrectly, or one or more required fields are missing. -* `highFee` - The `fee_mult_max` parameter was specified, but the server's current fee multiplier exceeds the specified one. (Sign-and-Submit mode only) -* `tooBusy` - The transaction did not include paths, but the server is too busy to do pathfinding right now. Does not occur if you are connected as an admin. (Sign-and-Submit mode only) -* `noPath` - The transaction did not include paths, and the server was unable to find a path by which this payment can occur. (Sign-and-Submit mode only) -* `internalTransaction` - An internal error occurred when processing the transaction. This could be caused by many aspects of the transaction, including a bad signature or some fields being malformed. -* `internalSubmit` - An internal error occurred when submitting the transaction. This could be caused by many aspects of the transaction, including a bad signature or some fields being malformed. -* `internalJson` - An internal error occurred when serializing the transaction to JSON. This could be caused by many aspects of the transaction, including a bad signature or some fields being malformed. +* `srcActMalformed` - The `Account` field from the `tx_json` was invalid or missing. +* `internal` - An internal error occurred. This includes the case where a signature is not valid for the transaction JSON provided. @@ -8791,6 +8827,197 @@ The fields describing a fetch in progress are subject to change without notice. * Any of the [universal error types](#universal-errors). +## feature ## +[[Source]
](https://github.com/ripple/rippled/blob/develop/src/ripple/rpc/handlers/Feature1.cpp "Source") + +The `feature` command returns information about [amendments](concept-amendments.html) this server knows about, including whether they are enabled and whether the server is voting in favor of those amendments in the [amendment process](concept-amendments.html#amendment-process). + +You can use the `feature` command to temporarily configure the server to vote against or in favor of an amendment. This change does not persist if you restart the server. To make lasting changes in amendment voting, use the `rippled.cfg` file. See [Configuring Amendment Voting](concept-amendments.html#configuring-amendment-voting) for more information. + +_The `feature` method is an [admin command](#connecting-to-rippled) that cannot be run by unpriviledged users._ + +#### Request Format #### +An example of the request format: + + + +*WebSocket - list all* + +``` +{ + "id": "list_all_features", + "command": "feature" +} +``` + +*WebSocket - reject* + +``` +{ + "id": "reject_multi_sign", + "command": "feature", + "feature": "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373", + "vetoed": true +} +``` + +*JSON-RPC* + +``` +{ + "method": "feature", + "params": [ + { + "feature": "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373", + "vetoed": false + } + ] +} +``` + +*Commandline* + +``` +#Syntax: feature [ [accept|reject]] +rippled feature 4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373 accept +``` + + + +The request includes the following parameters: + +| Field | Type | Description | +|---------|------|-------------| +| feature | String | (Optional) The unique ID of an amendment, as hexadecimal; or the short name of the amendment. If provided, limits the response to one amendment. Otherwise, the response lists all amendments. | +| vetoed | Boolean | (Optional; ignored unless `feature` also specified) If true, instructs the server to vote against the amendment specified by `feature`. If false, instructs the server to vote in favor of the amendment. | + +**Note:** You can configure your server to vote in favor of a new amendment, even if the server does not currently know how to apply that amendment, by specifying the amendment ID in the `feature` field. For example, you might want to do this if you plan to upgrade soon to a new `rippled` version that _does_ support the amendment. + +#### Response Format #### + +An example of a successful response: + + + +*WebSocket - list all* + +``` +{ + "id": "list_all_features", + "status": "success", + "type": "response", + "result": { + "features": { + "42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE": { + "enabled": false, + "name": "FeeEscalation", + "supported": true, + "vetoed": false + }, + "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": { + "enabled": false, + "name": "MultiSign", + "supported": true, + "vetoed": false + }, + "6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC": { + "enabled": false, + "name": "TrustSetAuth", + "supported": true, + "vetoed": false + }, + "C1B8D934087225F509BEB5A8EC24447854713EE447D277F69545ABFA0E0FD490": { + "enabled": false, + "name": "Tickets", + "supported": true, + "vetoed": false + }, + "DA1BD556B42D85EA9C84066D028D355B52416734D3283F85E216EA5DA6DB7E13": { + "enabled": false, + "name": "SusPay", + "supported": true, + "vetoed": false + } + } + } +} +``` + +*WebSocket - reject* + +``` +{ + "id": "reject_multi_sign", + "status": "success", + "type": "response", + "result": { + "features": { + "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": { + "enabled": false, + "name": "MultiSign", + "supported": true, + "vetoed": true + } + } + } +} +``` + +*JSON-RPC* + +``` +200 OK +{ + "result": { + "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": { + "enabled": false, + "name": "MultiSign", + "supported": true, + "vetoed": false + }, + "status": "success" + } +} +``` + +*Commandline* + +``` +Loading: "/etc/rippled.cfg" +Connecting to 127.0.0.1:5005 +{ + "result": { + "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": { + "enabled": false, + "name": "MultiSign", + "supported": true, + "vetoed": false + }, + "status": "success" + } +} +``` + + + +The response follows the [standard format](#response-formatting), with a successful result containing **a map of amendments** as a JSON object. The keys of the object are amendment IDs. The values for each key are _amendment objects_ that describe the status of the amendment with that ID. If the request specified a `feature`, the map contains only the requested amendment object, after applying any changes from the request. Each amendment object has the following fields: + +| Field | Type | Description | +|-----------|---------|-------------| +| enabled | Boolean | Whether this amendment is currently enabled in the latest ledger. | +| name | String | (May be omitted) The human-readable name for this amendment, if known. | +| supported | Boolean | Whether this server knows how to apply this amendment. | +| vetoed | Boolean | Whether the server has been instructed to vote against this amendment. | + +**Caution:** The `name` for an amendment does not strictly indicate what that amendment does. The name is not guaranteed to be unique or consistent across servers. + +#### Possible Errors #### + +* Any of the [universal error types](#universal-errors). +* `badFeature` - The `feature` specified was invalidly formatted, or the server does not know an amendment with that name. + + + ## get_counts ## [[Source]
](https://github.com/ripple/rippled/blob/c7118a183a660648aa88a3546a6b2c5bce858440/src/ripple/rpc/handlers/GetCounts.cpp "Source") diff --git a/reference-rippled.html b/reference-rippled.html index 28be290d6c..eab1c1b1a7 100644 --- a/reference-rippled.html +++ b/reference-rippled.html @@ -756,7 +756,9 @@ Null method
  • server_info - Retrieve status of the server in human-readable format
  • server_state - Retrieve status of the server in machine-readable format
  • sign - Cryptographically sign a transaction
  • +
  • sign_for - Contribute to a multi-signature
  • submit - Send a transaction to the network
  • +
  • submit_multisigned - Send a multi-signed transaction to the network
  • subscribe - Listen for updates about a particular subject
  • transaction_entry - Retrieve info about a transaction from a particular ledger version
  • tx - Retrieve info about a transaction from all the ledgers on hand
  • @@ -769,6 +771,7 @@ Null method
  • can_delete - Allow online deletion of ledgers up to a specific ledger
  • connect - Force the rippled server to connect to a specific peer
  • consensus_info - Get information about the state of consensus as it happens
  • +
  • feature - Get information about protocol amendments
  • fetch_info - Get information about the server's sync with the network
  • get_counts - Get statistics about the server's internals and memory usage
  • ledger_accept - Close and advance the ledger in stand-alone mode
  • @@ -7848,7 +7851,7 @@ submit sssssssssssssssssssssssssssss '{"TransactionType":"Payment", "Account":"r

    WebSocket

    {
    -    "id": "submit_multisigned_example",
    +    "id": "submit_multisigned_example"
         "command": "submit_multisigned",
         "tx_json": {
             "Account": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
    @@ -7857,25 +7860,25 @@ submit sssssssssssssssssssssssssssss '{"TransactionType":"Payment", "Account":"r
             "LimitAmount": {
                 "currency": "USD",
                 "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
    -            "value": "0"
    +            "value": "100"
             },
    -        "Sequence": 4,
    +        "Sequence": 2,
             "Signers": [{
                 "Signer": {
                     "Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
                     "SigningPubKey": "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF",
    -                "TxnSignature": "3045022100CC9C56DF51251CB04BB047E5F3B5EF01A0F4A8A549D7A20A7402BF54BA744064022061EF8EF1BCCBF144F480B32508B1D10FD4271831D5303F920DE41C64671CB5B7"
    +                "TxnSignature": "30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"
                 }
             }, {
                 "Signer": {
    -                "Account": "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n",
    -                "SigningPubKey": "03398A4EDAE8EE009A5879113EAA5BA15C7BB0F612A87F4103E793AC919BD1E3C1",
    -                "TxnSignature": "3045022100FEE8D8FA2D06CE49E9124567DCA265A21A9F5465F4A9279F075E4CE27E4430DE022042D5305777DA1A7801446780308897699412E4EDF0E1AEFDF3C8A0532BDE4D08"
    +                "Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
    +                "SigningPubKey": "028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B",
    +                "TxnSignature": "30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1"
                 }
             }],
             "SigningPubKey": "",
             "TransactionType": "TrustSet",
    -        "hash": "81A477E2A362D171BB16BE17B4120D9F809A327FA00242ABCA867283BEA2F4F8"
    +        "hash": "BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6"
         }
     }
     
    @@ -7970,7 +7973,7 @@ rippled submit_multisigned '{ fail_hard Boolean -(Optional) If true, (TODO) whatever fail_hard actually does. +(Optional, defaults to false) If true, and the transaction fails locally, do not retry or relay the transaction to other servers. @@ -7978,7 +7981,47 @@ rippled submit_multisigned '{

    An example of a successful response:

    WebSocket

    -
    //TODO: actual example here
    +
    {
    +  "id": "submit_multisigned_example",
    +  "status": "success",
    +  "type": "response",
    +  "result": {
    +    "engine_result": "tesSUCCESS",
    +    "engine_result_code": 0,
    +    "engine_result_message": "The transaction was applied. Only final in a validated ledger.",
    +    "tx_blob": "1200142200040000240000000263D5038D7EA4C680000000000000000000000000005553440000000000B5F762798A53D543A014CAF8B297CFF8F2F937E868400000000000753073008114A3780F5CB5A44D366520FC44055E8ED44D9A2270F3E010732102B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF744730450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E58114204288D2E47F8EF6C99BCC457966320D12409711E1E0107321028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B744630440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC181147908A7F0EDD48EA896C3580A399F0EE78611C8E3E1F1",
    +    "tx_json": {
    +      "Account": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
    +      "Fee": "30000",
    +      "Flags": 262144,
    +      "LimitAmount": {
    +        "currency": "USD",
    +        "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
    +        "value": "100"
    +      },
    +      "Sequence": 2,
    +      "Signers": [
    +        {
    +          "Signer": {
    +            "Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
    +            "SigningPubKey": "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF",
    +            "TxnSignature": "30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"
    +          }
    +        },
    +        {
    +          "Signer": {
    +            "Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
    +            "SigningPubKey": "028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B",
    +            "TxnSignature": "30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1"
    +          }
    +        }
    +      ],
    +      "SigningPubKey": "",
    +      "TransactionType": "TrustSet",
    +      "hash": "BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6"
    +    }
    +  }
    +}
     

    JSON-RPC

    200 OK
    @@ -8061,17 +8104,11 @@ rippled submit_multisigned '{
     
     
     

    Possible Errors

    -

    TODO: confirm this list (copy-pasta from traditional submit)

    • Any of the universal error types.
    • -
    • invalidTransaction - The transaction is malformed or otherwise invalid.
    • invalidParams - One or more fields are specified incorrectly, or one or more required fields are missing.
    • -
    • highFee - The fee_mult_max parameter was specified, but the server's current fee multiplier exceeds the specified one. (Sign-and-Submit mode only)
    • -
    • tooBusy - The transaction did not include paths, but the server is too busy to do pathfinding right now. Does not occur if you are connected as an admin. (Sign-and-Submit mode only)
    • -
    • noPath - The transaction did not include paths, and the server was unable to find a path by which this payment can occur. (Sign-and-Submit mode only)
    • -
    • internalTransaction - An internal error occurred when processing the transaction. This could be caused by many aspects of the transaction, including a bad signature or some fields being malformed.
    • -
    • internalSubmit - An internal error occurred when submitting the transaction. This could be caused by many aspects of the transaction, including a bad signature or some fields being malformed.
    • -
    • internalJson - An internal error occurred when serializing the transaction to JSON. This could be caused by many aspects of the transaction, including a bad signature or some fields being malformed.
    • +
    • srcActMalformed - The Account field from the tx_json was invalid or missing.
    • +
    • internal - An internal error occurred. This includes the case where a signature is not valid for the transaction JSON provided.

    book_offers

    [Source]

    @@ -10338,11 +10375,201 @@ Connecting to 127.0.0.1:5005 +

    feature

    +

    [Source]

    +

    The feature command returns information about amendments this server knows about, including whether they are enabled and whether the server is voting in favor of those amendments in the amendment process.

    +

    You can use the feature command to temporarily configure the server to vote against or in favor of an amendment. This change does not persist if you restart the server. To make lasting changes in amendment voting, use the rippled.cfg file. See Configuring Amendment Voting for more information.

    +

    The feature method is an admin command that cannot be run by unpriviledged users.

    +

    Request Format

    +

    An example of the request format:

    +
    +

    WebSocket - list all

    +
    {
    +  "id": "list_all_features",
    +  "command": "feature"
    +}
    +
    +

    WebSocket - reject

    +
    {
    +  "id": "reject_multi_sign",
    +  "command": "feature",
    +  "feature": "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373",
    +  "vetoed": true
    +}
    +
    +

    JSON-RPC

    +
    {
    +    "method": "feature",
    +    "params": [
    +        {
    +            "feature": "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373",
    +            "vetoed": false
    +        }
    +    ]
    +}
    +
    +

    Commandline

    +
    #Syntax: feature [<feature_id> [accept|reject]]
    +rippled feature 4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373 accept
    +
    +
    +

    The request includes the following parameters:

    + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDescription
    featureString(Optional) The unique ID of an amendment, as hexadecimal; or the short name of the amendment. If provided, limits the response to one amendment. Otherwise, the response lists all amendments.
    vetoedBoolean(Optional; ignored unless feature also specified) If true, instructs the server to vote against the amendment specified by feature. If false, instructs the server to vote in favor of the amendment.
    +

    Note: You can configure your server to vote in favor of a new amendment, even if the server does not currently know how to apply that amendment, by specifying the amendment ID in the feature field. For example, you might want to do this if you plan to upgrade soon to a new rippled version that does support the amendment.

    +

    Response Format

    +

    An example of a successful response:

    +
    +

    WebSocket - list all

    +
    {
    +  "id": "list_all_features",
    +  "status": "success",
    +  "type": "response",
    +  "result": {
    +    "features": {
    +      "42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE": {
    +        "enabled": false,
    +        "name": "FeeEscalation",
    +        "supported": true,
    +        "vetoed": false
    +      },
    +      "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": {
    +        "enabled": false,
    +        "name": "MultiSign",
    +        "supported": true,
    +        "vetoed": false
    +      },
    +      "6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC": {
    +        "enabled": false,
    +        "name": "TrustSetAuth",
    +        "supported": true,
    +        "vetoed": false
    +      },
    +      "C1B8D934087225F509BEB5A8EC24447854713EE447D277F69545ABFA0E0FD490": {
    +        "enabled": false,
    +        "name": "Tickets",
    +        "supported": true,
    +        "vetoed": false
    +      },
    +      "DA1BD556B42D85EA9C84066D028D355B52416734D3283F85E216EA5DA6DB7E13": {
    +        "enabled": false,
    +        "name": "SusPay",
    +        "supported": true,
    +        "vetoed": false
    +      }
    +    }
    +  }
    +}
    +
    +

    WebSocket - reject

    +
    {
    +    "id": "reject_multi_sign",
    +    "status": "success",
    +    "type": "response",
    +    "result": {
    +        "features": {
    +            "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": {
    +                "enabled": false,
    +                "name": "MultiSign",
    +                "supported": true,
    +                "vetoed": true
    +            }
    +        }
    +    }
    +}
    +
    +

    JSON-RPC

    +
    200 OK
    +{
    +    "result": {
    +        "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": {
    +            "enabled": false,
    +            "name": "MultiSign",
    +            "supported": true,
    +            "vetoed": false
    +        },
    +        "status": "success"
    +    }
    +}
    +
    +

    Commandline

    +
    Loading: "/etc/rippled.cfg"
    +Connecting to 127.0.0.1:5005
    +{
    +    "result": {
    +        "4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373": {
    +            "enabled": false,
    +            "name": "MultiSign",
    +            "supported": true,
    +            "vetoed": false
    +        },
    +        "status": "success"
    +    }
    +}
    +
    +
    +

    The response follows the standard format, with a successful result containing a map of amendments as a JSON object. The keys of the object are amendment IDs. The values for each key are amendment objects that describe the status of the amendment with that ID. If the request specified a feature, the map contains only the requested amendment object, after applying any changes from the request. Each amendment object has the following fields:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeDescription
    enabledBooleanWhether this amendment is currently enabled in the latest ledger.
    nameString(May be omitted) The human-readable name for this amendment, if known.
    supportedBooleanWhether this server knows how to apply this amendment.
    vetoedBooleanWhether the server has been instructed to vote against this amendment.
    +

    Caution: The name for an amendment does not strictly indicate what that amendment does. The name is not guaranteed to be unique or consistent across servers.

    +

    Possible Errors

    +
      +
    • Any of the universal error types.
    • +
    • badFeature - The feature specified was invalidly formatted, or the server does not know an amendment with that name.
    • +

    get_counts

    [Source]

    The get_counts command provides various stats about the health of the server, mostly the number of objects of different types that it currently holds in memory.

    The get_counts method is an admin command that cannot be run by unpriviledged users.

    -

    Request Format

    +

    Request Format

    An example of the request format:

    WebSocket

    @@ -10384,7 +10611,7 @@ rippled get_counts 100 -

    Response Format

    +

    Response Format

    An example of a successful response:

    JSON-RPC

    @@ -10487,7 +10714,7 @@ Connecting to 127.0.0.1:5005

    For most other entries, the value indicates the number of objects of that type currently in memory.

    -

    Possible Errors

    +

    Possible Errors

    • Any of the universal error types.
    • invalidParams - One or more fields are specified incorrectly, or one or more required fields are missing.
    • @@ -10496,7 +10723,7 @@ Connecting to 127.0.0.1:5005

      [Source]

      The ledger_cleaner command controls the Ledger Cleaner, an asynchronous maintenance process that can find and repair corruption in rippled's database of ledgers.

      The ledger_cleaner method is an admin command that cannot be run by unpriviledged users.

      -

      Request Format

      +

      Request Format

      An example of the request format:

      WebSocket

      @@ -10555,7 +10782,7 @@ Connecting to 127.0.0.1:5005 -

      Response Format

      +

      Response Format

      An example of a successful response:

      JSON-RPC

      @@ -10586,7 +10813,7 @@ Connecting to 127.0.0.1:5005 -

      Possible Errors

      +

      Possible Errors

      • Any of the universal error types.
      • internal if one the parameters was specified in a way that the server couldn't interpret. (This is a bug, and it should return invalidParams instead.)
      • @@ -10595,7 +10822,7 @@ Connecting to 127.0.0.1:5005

        [Source]

        The log_level command changes the rippled server's logging verbosity, or returns the current logging level for each category (called a partition) of log messages.

        The log_level method is an admin command that cannot be run by unpriviledged users.

        -

        Request Format

        +

        Request Format

        An example of the request format:

        WebSocket

        @@ -10633,7 +10860,7 @@ rippled log_level PathRequest debug -

        Response Format

        +

        Response Format

        Examples of successful responses:

        Commandline (set log level)

        @@ -10725,7 +10952,7 @@ Connecting to 127.0.0.1:5005 -

        Possible Errors

        +

        Possible Errors

        • Any of the universal error types.
        • invalidParams - One or more fields are specified incorrectly, or one or more required fields are missing.
        • @@ -10734,7 +10961,7 @@ Connecting to 127.0.0.1:5005

          [Source]

          The logrotate command closes and reopens the log file. This is intended to facilitate log rotation on Linux file systems.

          The logrotate method is an admin command that cannot be run by unpriviledged users.

          -

          Request Format

          +

          Request Format

          An example of the request format:

          WebSocket

          @@ -10748,7 +10975,7 @@ Connecting to 127.0.0.1:5005

    The request includes no parameters.

    -

    Response Format

    +

    Response Format

    An example of a successful response:

    JSON-RPC

    @@ -10790,7 +11017,7 @@ Connecting to 127.0.0.1:5005 -

    Possible Errors

    +

    Possible Errors

    @@ -10798,7 +11025,7 @@ Connecting to 127.0.0.1:5005

    [Source]

    Use the validation_create command to generate the keys for a rippled validating node. Similar to the wallet_propose command, this command makes no real changes, but only generates a set of keys in the proper format.

    The validation_create method is an admin command that cannot be run by unpriviledged users.

    -

    Request Format

    +

    Request Format

    An example of the request format:

    WebSocket

    @@ -10841,7 +11068,7 @@ rippled validation_create "BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIR

    Note: The security of your validator depends on the entropy of your seed. Do not use a secret value that is not sufficiently randomized for real business purposes. We recommend omitting the secret when generating new credentials for the first time.

    -

    Response Format

    +

    Response Format

    An example of a successful response:

    JSON-RPC

    @@ -10894,7 +11121,7 @@ Connecting to 127.0.0.1:5005 -

    Possible Errors

    +

    Possible Errors

    • Any of the universal error types.
    • badSeed - The request provided an invalid seed value. This usually means that the seed value appears to be a valid string of a different format, such as an account address or validation public key.
    • @@ -10903,7 +11130,7 @@ Connecting to 127.0.0.1:5005

      [Source]

      The validation_seed command temporarily sets the secret value that rippled uses to sign validations. This value resets based on the config file when you restart the server.

      The validation_seed request is an admin command that cannot be run by unpriviledged users!

      -

      Request Format

      +

      Request Format

      An example of the request format:

      WebSocket

      @@ -10935,7 +11162,7 @@ rippled validation_seed 'BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE' -

      Response Format

      +

      Response Format

      An example of a successful response:

      JSON-RPC

      @@ -10989,7 +11216,7 @@ Connecting to 127.0.0.1:5005 -

      Possible Errors

      +

      Possible Errors

      • Any of the universal error types.
      • badSeed - The request provided an invalid secret value. This usually means that the secret value appears to be a valid string of a different format, such as an account address or validation public key.
      • @@ -10998,7 +11225,7 @@ Connecting to 127.0.0.1:5005

        [Source]

        The peers command returns a list of all other rippled servers currently connected to this one, including information on their connection and sync status.

        The peers request is an admin command that cannot be run by unpriviledged users!

        -

        Request Format

        +

        Request Format

        An example of the request format:

        WebSocket

        @@ -11012,7 +11239,7 @@ Connecting to 127.0.0.1:5005

        The request includes no additional parameters.

        -

        Response Format

        +

        Response Format

        An example of a successful response:

        WebSocket

        @@ -11472,7 +11699,7 @@ Connecting to 127.0.0.1:5005 -

        Possible Errors

        +

        Possible Errors

        @@ -11480,7 +11707,7 @@ Connecting to 127.0.0.1:5005

        [Source]

        The print command returns the current status of various internal subsystems, including peers, the ledger cleaner, and the resource manager.

        The print request is an admin command that cannot be run by unpriviledged users!

        -

        Request Format

        +

        Request Format

        An example of the request format:

        WebSocket

        @@ -11494,7 +11721,7 @@ Connecting to 127.0.0.1:5005

        The request includes no parameters.

        -

        Response Format

        +

        Response Format

        An example of a successful response:

        Commandline

        @@ -11683,7 +11910,7 @@ Connecting to 127.0.0.1:5005

        The response follows the standard format. Additional fields in the result depend on the internal state of the rippled server. The results of this command are subject to change without notice.

        -

        Possible Errors

        +

        Possible Errors

        @@ -11692,7 +11919,7 @@ Connecting to 127.0.0.1:5005

        ping

        [Source]

        The ping command returns an acknowledgement, so that clients can test the connection status and latency.

        -

        Request Format

        +

        Request Format

        An example of the request format:

        WebSocket

        @@ -11716,7 +11943,7 @@ rippled ping

        Try it! >

        The request includes no parameters.

        -

        Response Format

        +

        Response Format

        An example of a successful response:

        WebSocket

        @@ -11737,14 +11964,14 @@ rippled ping

        The response follows the standard format, with a successful result containing no fields. The client can measure the round-trip time from request to response as latency.

        -

        Possible Errors

        +

        Possible Errors

        random

        [Source]

        The random command provides a random number to be used as a source of entropy for random number generation by clients.

        -

        Request Format

        +

        Request Format

        An example of the request format:

        WebSocket

        @@ -11767,7 +11994,7 @@ rippled random

        The request includes no parameters.

        -

        Response Format

        +

        Response Format

        An example of a successful response:

        WebSocket

        @@ -11807,14 +12034,14 @@ rippled random -

        Possible Errors

        +

        Possible Errors

        • Any of the universal error types.
        • internal - Some internal error occurred, possibly relating to the random number generator.

        json

        The json method is a proxy to running other commands, and accepts the parameters for the command as a JSON value. It is exclusive to the Commandline client, and intended for cases where the commandline syntax for specifying parameters is inadequate or undesirable.

        -

        Request Format

        +

        Request Format

        An example of the request format:

        Commandline

        @@ -11822,7 +12049,7 @@ rippled random rippled -q json ledger_closed '{}'
        -

        Response Format

        +

        Response Format

        An example of a successful response:

        WebSocket

        @@ -11840,7 +12067,7 @@ rippled -q json ledger_closed '{}'

        [Source]

        The connect command forces the rippled server to connect to a specific peer rippled server.

        The connect request is an admin command that cannot be run by unpriviledged users!

        -

        Request Format

        +

        Request Format

        An example of the request format:

        WebSocket

        @@ -11888,7 +12115,7 @@ rippled connect 192.170.145.88 51235 -

        Response Format

        +

        Response Format

        An example of a successful response:

        JSON-RPC

        @@ -11928,7 +12155,7 @@ Connecting to 127.0.0.1:5005 -

        Possible Errors

        +

        Possible Errors

        • Any of the universal error types.
        • invalidParams - One or more fields are specified incorrectly, or one or more required fields are missing.
        • @@ -11938,7 +12165,7 @@ Connecting to 127.0.0.1:5005

          [Source]

          Gracefully shuts down the server.

          The stop request is an admin command that cannot be run by unpriviledged users!

          -

          Request Format

          +

          Request Format

          An example of the request format:

          WebSocket

          @@ -11960,7 +12187,7 @@ Connecting to 127.0.0.1:5005

          The request includes no parameters.

          -

          Response Format

          +

          Response Format

          An example of a successful response:

          JSON-RPC

          @@ -11999,7 +12226,7 @@ Connecting to 127.0.0.1:5005 -

          Possible Errors

          +

          Possible Errors