mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-30 16:45:49 +00:00
multisign tutorial
This commit is contained in:
@@ -60,6 +60,7 @@
|
||||
<li><a href="tutorial-rippleapi-beginners-guide.html">RippleAPI Beginners Guide</a></li>
|
||||
<li><a href="tutorial-rippled-setup.html">rippled Setup</a></li>
|
||||
<li><a href="tutorial-reliable-transaction-submission.html">Reliable Transaction Submission</a></li>
|
||||
<li><a href="tutorial-multisign.html">Multi-Signing Transactions</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
@@ -972,6 +973,119 @@
|
||||
<li>The AccountID of the high account</li>
|
||||
<li>The 160-bit currency code of the trust line(s)</li>
|
||||
</ul>
|
||||
<h2 id="signerlist">SignerList</h2>
|
||||
<p><a href="https://github.com/ripple/rippled/blob/6d2e3da30696bd10e3bb11a5ff6d45d2c4dae90f/src/ripple/protocol/impl/LedgerFormats.cpp#L127" title="Source">[Source]<br/></a></p>
|
||||
<p>The <code>SignerList</code> node type represents a list of parties that, as a group, are authorized to sign a transaction in place of an individual account.</p>
|
||||
<p>Example SignerList node:</p>
|
||||
<pre><code>{
|
||||
"Flags": 0,
|
||||
"LedgerEntryType": "SignerList",
|
||||
"OwnerNode": "0000000000000000",
|
||||
"PreviousTxnID": "5904C0DC72C58A83AEFED2FFC5386356AA83FCA6A88C89D00646E51E687CDBE4",
|
||||
"PreviousTxnLgrSeq": 16061435,
|
||||
"SignerEntries": [
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
|
||||
"SignerWeight": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n",
|
||||
"SignerWeight": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"SignerEntry": {
|
||||
"Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
|
||||
"SignerWeight": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"SignerListID": 0,
|
||||
"SignerQuorum": 3,
|
||||
"index": "A9C28A28B85CD533217F5C0A0C7767666B093FA58A0F2D80026FCC4CD932DDC7"
|
||||
}
|
||||
</code></pre>
|
||||
<p>A SignerList node has the following fields:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>JSON Type</th>
|
||||
<th>Internal Type</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>OwnerNode</td>
|
||||
<td>String</td>
|
||||
<td>UInt64</td>
|
||||
<td>A hint indicating which page of the owner directory links to this node, in case the directory consists of multiple nodes.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SignerQuorum</td>
|
||||
<td>Number</td>
|
||||
<td>UInt32</td>
|
||||
<td>A target number for signer weights. To produce a valid signature for the owner of this SignerList, the signers must provide valid signatures whose weights sum to this value or more.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SignerEntries</td>
|
||||
<td>Array</td>
|
||||
<td>Array</td>
|
||||
<td>An array of SignerEntry objects representing the parties who are part of this signer list.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SignerListID</td>
|
||||
<td>Number</td>
|
||||
<td>UInt32</td>
|
||||
<td>An ID for this signer list. Currently always set to <code>0</code>. If a future update allows multiple signer lists for an account, this may change.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>PreviousTxnID</td>
|
||||
<td>String</td>
|
||||
<td>Hash256</td>
|
||||
<td>The identifying hash of the transaction that most recently modified this node.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>PreviousTxnLgrSeq</td>
|
||||
<td>Number</td>
|
||||
<td>UInt32</td>
|
||||
<td>The sequence number (<code>ledger_index</code>) of the ledger that contains the transaction that most recently modified this node.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="signerentry-object">SignerEntry object</h3>
|
||||
<p>Each member of the <code>SignerEntries</code> field is an object that describes that signer in the list. A SignerEntry has the following fields:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>JSON Type</th>
|
||||
<th>Internal Type</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Account</td>
|
||||
<td>String</td>
|
||||
<td>AccountID</td>
|
||||
<td>An address whose signature contributes to the multi-signature. This does not need to be a funded Ripple account.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SignerWeight</td>
|
||||
<td>Number</td>
|
||||
<td>UInt16</td>
|
||||
<td>The weight of signatures from this signer. A multi-signature is only valid of the sum weight of the signatures provided meets or exceeds the SignerList's <code>SignerQuorum</code> value.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>When processing a multi-signed transaction, the server dereferences the <code>Account</code> values with respect to the ledger at the time of transaction execution. If the address <em>does not</em> correspond to a funded <a href="#accountroot">AccountRoot node</a>, then only the master secret associated with that address can be used to produce a valid signature. If the account <em>does</em> exist in the ledger, then it depends on the state of that account. If the account has a Regular Key configured, the Regular Key can be used. The account's master key can only be used if it is not disabled. Even if the account has a SignerList configured, a multi-signature cannot be used as a valid component to another multi-signature. (In other words, "multi-level" multi-signing is disallowed.)</p>
|
||||
<h3 id="signerlists-and-reserves">SignerLists and Reserves</h3>
|
||||
<p>A SignerList contributes to the <a href="https://wiki.ripple.com/Reserves">Account Reserve</a>. The SignerList itself counts as two objects, and each member of the list counts as one, so that the total owner reserve associated with a SignerList is anywhere from 3 times to 10 times the reserve required by a single trust line (<a href="#ripplestate">RippleState</a>) or <a href="#offer">Offer</a> node in the ledger.</p>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user