mirror of
https://github.com/XRPLF/rippled.git
synced 2026-02-04 22:15:28 +00:00
deploy: 6c67f1f525
This commit is contained in:
@@ -323,7 +323,7 @@ $(document).ready(function() { init_codefold(0); });
|
||||
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a3f2a31e585bbecb3af3740d34d7df15f">RPC::invalid_field_error</a>(<span class="stringliteral">"tx_json.Destination"</span>);</div>
|
||||
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
|
||||
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">if</span> (params.<a class="code hl_function" href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">isMember</a>(jss::build_path) &&</div>
|
||||
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> ((doPath == <span class="keyword">false</span>) || amount.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>()))</div>
|
||||
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> ((doPath == <span class="keyword">false</span>) || amount.holds<<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>()))</div>
|
||||
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(</div>
|
||||
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>,</div>
|
||||
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="stringliteral">"Field 'build_path' not allowed in this context."</span>);</div>
|
||||
@@ -365,7 +365,7 @@ $(document).ready(function() { init_codefold(0); });
|
||||
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> sendMax.<a class="code hl_function" href="classripple_1_1STAmount.html#a532cc28fd8b3d99c5de749e7e78fd08d">setIssuer</a>(srcAddressID);</div>
|
||||
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> }</div>
|
||||
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> </div>
|
||||
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">if</span> (sendMax.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && amount.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>())</div>
|
||||
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> <span class="keywordflow">if</span> (sendMax.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && amount.native())</div>
|
||||
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(</div>
|
||||
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, <span class="stringliteral">"Cannot build XRP to XRP paths."</span>);</div>
|
||||
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
|
||||
@@ -1216,382 +1216,386 @@ $(document).ready(function() { init_codefold(0); });
|
||||
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> <span class="keywordflow">if</span> (!tx_json.<a class="code hl_function" href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">isMember</a>(sfSigningPubKey.getJsonName()))</div>
|
||||
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#aec2e1163b39a450d3917af9dd15b0f06">RPC::missing_field_error</a>(<span class="stringliteral">"tx_json.SigningPubKey"</span>);</div>
|
||||
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> </div>
|
||||
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> <span class="keywordflow">if</span> (!tx_json[sfSigningPubKey.getJsonName()].<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>().<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/empty.html">empty</a>())</div>
|
||||
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(</div>
|
||||
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>,</div>
|
||||
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> <span class="stringliteral">"When multi-signing 'tx_json.SigningPubKey' must be empty."</span>);</div>
|
||||
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> </div>
|
||||
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>();</div>
|
||||
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span>}</div>
|
||||
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> <span class="comment">// Multi-signing into a signature_target object field is fine,</span></div>
|
||||
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> <span class="comment">// because it means the signature is not for the transaction</span></div>
|
||||
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> <span class="comment">// Account.</span></div>
|
||||
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> <span class="keywordflow">if</span> (!jvRequest.<a class="code hl_function" href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">isMember</a>(jss::signature_target) &&</div>
|
||||
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> !tx_json[sfSigningPubKey.getJsonName()].<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>().<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/empty.html">empty</a>())</div>
|
||||
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(</div>
|
||||
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>,</div>
|
||||
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> <span class="stringliteral">"When multi-signing 'tx_json.SigningPubKey' must be empty."</span>);</div>
|
||||
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> </div>
|
||||
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>();</div>
|
||||
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span>}</div>
|
||||
</div>
|
||||
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> </div>
|
||||
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span><span class="comment">// Sort and validate an stSigners array.</span></div>
|
||||
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span><span class="comment">//</span></div>
|
||||
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span><span class="comment">// Returns a null Json::Value if there are no errors.</span></div>
|
||||
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span><span class="keyword">static</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a></div>
|
||||
<div class="foldopen" id="foldopen01093" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"><a class="line" href="namespaceripple_1_1RPC_1_1detail.html#ae55247d02759e159363f3e9e370eee81"> 1093</a></span><a class="code hl_function" href="namespaceripple_1_1RPC_1_1detail.html#ae55247d02759e159363f3e9e370eee81">sortAndValidateSigners</a>(<a class="code hl_class" href="classripple_1_1STArray.html">STArray</a>& signers, <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>& signingForID)</div>
|
||||
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span>{</div>
|
||||
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> <span class="keywordflow">if</span> (signers.empty())</div>
|
||||
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a5b6ce0616f6995340f4dd846660c3749">RPC::make_param_error</a>(<span class="stringliteral">"Signers array may not be empty."</span>);</div>
|
||||
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> </div>
|
||||
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> <span class="comment">// Signers must be sorted by Account.</span></div>
|
||||
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/sort.html">std::sort</a>(</div>
|
||||
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> signers.begin(),</div>
|
||||
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> signers.end(),</div>
|
||||
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> [](<a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& a, <a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& b) {</div>
|
||||
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> return (a[sfAccount] < b[sfAccount]);</div>
|
||||
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> });</div>
|
||||
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> </div>
|
||||
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> <span class="comment">// Signers may not contain any duplicates.</span></div>
|
||||
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> <span class="keyword">auto</span> <span class="keyword">const</span> dupIter = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/adjacent_find.html">std::adjacent_find</a>(</div>
|
||||
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> signers.begin(),</div>
|
||||
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span> signers.end(),</div>
|
||||
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> [](<a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& a, <a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& b) {</div>
|
||||
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> return (a[sfAccount] == b[sfAccount]);</div>
|
||||
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> });</div>
|
||||
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> </div>
|
||||
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordflow">if</span> (dupIter != signers.end())</div>
|
||||
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> {</div>
|
||||
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a> err;</div>
|
||||
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> err << <span class="stringliteral">"Duplicate Signers:Signer:Account entries ("</span></div>
|
||||
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span> << <a class="code hl_function" href="namespaceripple.html#a08a13b62b18272366f788632359e8793">toBase58</a>((*dupIter)[sfAccount]) << <span class="stringliteral">") are not allowed."</span>;</div>
|
||||
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a5b6ce0616f6995340f4dd846660c3749">RPC::make_param_error</a>(err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream/str.html">str</a>());</div>
|
||||
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> }</div>
|
||||
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> </div>
|
||||
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> <span class="comment">// An account may not sign for itself.</span></div>
|
||||
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> <span class="keywordflow">if</span> (signers.end() !=</div>
|
||||
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a>(</div>
|
||||
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> signers.begin(),</div>
|
||||
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> signers.end(),</div>
|
||||
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> [&signingForID](<a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& elem) {</div>
|
||||
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span> return elem[sfAccount] == signingForID;</div>
|
||||
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> }))</div>
|
||||
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> {</div>
|
||||
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a> err;</div>
|
||||
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> err << <span class="stringliteral">"A Signer may not be the transaction's Account ("</span></div>
|
||||
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span> << <a class="code hl_function" href="namespaceripple.html#a08a13b62b18272366f788632359e8793">toBase58</a>(signingForID) << <span class="stringliteral">")."</span>;</div>
|
||||
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a5b6ce0616f6995340f4dd846660c3749">RPC::make_param_error</a>(err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream/str.html">str</a>());</div>
|
||||
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> }</div>
|
||||
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> <span class="keywordflow">return</span> {};</div>
|
||||
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span>}</div>
|
||||
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span> </div>
|
||||
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span><span class="comment">// Sort and validate an stSigners array.</span></div>
|
||||
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span><span class="comment">//</span></div>
|
||||
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span><span class="comment">// Returns a null Json::Value if there are no errors.</span></div>
|
||||
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span><span class="keyword">static</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a></div>
|
||||
<div class="foldopen" id="foldopen01097" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"><a class="line" href="namespaceripple_1_1RPC_1_1detail.html#ae55247d02759e159363f3e9e370eee81"> 1097</a></span><a class="code hl_function" href="namespaceripple_1_1RPC_1_1detail.html#ae55247d02759e159363f3e9e370eee81">sortAndValidateSigners</a>(<a class="code hl_class" href="classripple_1_1STArray.html">STArray</a>& signers, <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>& signingForID)</div>
|
||||
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span>{</div>
|
||||
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> <span class="keywordflow">if</span> (signers.empty())</div>
|
||||
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a5b6ce0616f6995340f4dd846660c3749">RPC::make_param_error</a>(<span class="stringliteral">"Signers array may not be empty."</span>);</div>
|
||||
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> </div>
|
||||
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> <span class="comment">// Signers must be sorted by Account.</span></div>
|
||||
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/sort.html">std::sort</a>(</div>
|
||||
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> signers.begin(),</div>
|
||||
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> signers.end(),</div>
|
||||
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> [](<a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& a, <a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& b) {</div>
|
||||
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> return (a[sfAccount] < b[sfAccount]);</div>
|
||||
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> });</div>
|
||||
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span> </div>
|
||||
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> <span class="comment">// Signers may not contain any duplicates.</span></div>
|
||||
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> <span class="keyword">auto</span> <span class="keyword">const</span> dupIter = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/adjacent_find.html">std::adjacent_find</a>(</div>
|
||||
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> signers.begin(),</div>
|
||||
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> signers.end(),</div>
|
||||
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> [](<a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& a, <a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& b) {</div>
|
||||
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> return (a[sfAccount] == b[sfAccount]);</div>
|
||||
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> });</div>
|
||||
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> </div>
|
||||
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span> <span class="keywordflow">if</span> (dupIter != signers.end())</div>
|
||||
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> {</div>
|
||||
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a> err;</div>
|
||||
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> err << <span class="stringliteral">"Duplicate Signers:Signer:Account entries ("</span></div>
|
||||
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> << <a class="code hl_function" href="namespaceripple.html#a08a13b62b18272366f788632359e8793">toBase58</a>((*dupIter)[sfAccount]) << <span class="stringliteral">") are not allowed."</span>;</div>
|
||||
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a5b6ce0616f6995340f4dd846660c3749">RPC::make_param_error</a>(err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream/str.html">str</a>());</div>
|
||||
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> }</div>
|
||||
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> </div>
|
||||
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> <span class="comment">// An account may not sign for itself.</span></div>
|
||||
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> <span class="keywordflow">if</span> (signers.end() !=</div>
|
||||
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a>(</div>
|
||||
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> signers.begin(),</div>
|
||||
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> signers.end(),</div>
|
||||
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span> [&signingForID](<a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& elem) {</div>
|
||||
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> return elem[sfAccount] == signingForID;</div>
|
||||
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span> }))</div>
|
||||
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span> {</div>
|
||||
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a> err;</div>
|
||||
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> err << <span class="stringliteral">"A Signer may not be the transaction's Account ("</span></div>
|
||||
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> << <a class="code hl_function" href="namespaceripple.html#a08a13b62b18272366f788632359e8793">toBase58</a>(signingForID) << <span class="stringliteral">")."</span>;</div>
|
||||
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a5b6ce0616f6995340f4dd846660c3749">RPC::make_param_error</a>(err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream/str.html">str</a>());</div>
|
||||
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span> }</div>
|
||||
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> <span class="keywordflow">return</span> {};</div>
|
||||
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span>}</div>
|
||||
</div>
|
||||
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> </div>
|
||||
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span>} <span class="comment">// namespace detail</span></div>
|
||||
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> </div>
|
||||
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span><a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a></div>
|
||||
<div class="foldopen" id="foldopen01143" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"><a class="line" href="namespaceripple_1_1RPC.html#aced54d69612c2b58940e2132e905dfc6"> 1143</a></span><a class="code hl_function" href="namespaceripple_1_1RPC.html#aced54d69612c2b58940e2132e905dfc6">transactionSignFor</a>(</div>
|
||||
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jvRequest,</div>
|
||||
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span> <span class="keywordtype">unsigned</span> <a class="code hl_variable" href="namespaceripple_1_1RPC.html#a47dbdaa21d9c40b369424e671ccd7e20">apiVersion</a>,</div>
|
||||
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> <a class="code hl_enumeration" href="classripple_1_1NetworkOPs.html#ada325f492d3aa1aa62d4b159e106c37a">NetworkOPs::FailHard</a> failType,</div>
|
||||
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span> <a class="code hl_enumeration" href="namespaceripple.html#ae08fe18f17b24699ce41d3898fbb8c2c">Role</a> role,</div>
|
||||
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::seconds</a> validatedLedgerAge,</div>
|
||||
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> <a class="code hl_class" href="classripple_1_1Application.html">Application</a>& app)</div>
|
||||
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span>{</div>
|
||||
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> <span class="keyword">auto</span> <span class="keyword">const</span>& ledger = app.<a class="code hl_function" href="classripple_1_1Application.html#a151d1401a346131fc6fb3efb197133e6">openLedger</a>().<a class="code hl_function" href="classripple_1_1OpenLedger.html#ad34da15d3e40a35a73bbabe104478114">current</a>();</div>
|
||||
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> <span class="keyword">auto</span> j = app.<a class="code hl_function" href="classripple_1_1Application.html#a2897c28a5b5040e80e66f676d201d03f">journal</a>(<span class="stringliteral">"RPCHandler"</span>);</div>
|
||||
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> JLOG(j.debug()) << <span class="stringliteral">"transactionSignFor: "</span> << jvRequest;</div>
|
||||
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span> </div>
|
||||
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> <span class="comment">// Verify presence of the signer's account field.</span></div>
|
||||
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> <span class="keywordtype">char</span> <span class="keyword">const</span> accountField[] = <span class="stringliteral">"account"</span>;</div>
|
||||
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span> </div>
|
||||
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> <span class="keywordflow">if</span> (!jvRequest.<a class="code hl_function" href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">isMember</a>(accountField))</div>
|
||||
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#aec2e1163b39a450d3917af9dd15b0f06">RPC::missing_field_error</a>(accountField);</div>
|
||||
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> </div>
|
||||
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> <span class="comment">// Turn the signer's account into an AccountID for multi-sign.</span></div>
|
||||
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> <span class="keyword">auto</span> <span class="keyword">const</span> signerAccountID =</div>
|
||||
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> parseBase58<AccountID>(jvRequest[accountField].asString());</div>
|
||||
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordflow">if</span> (!signerAccountID)</div>
|
||||
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> {</div>
|
||||
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(</div>
|
||||
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a967859223f75630b2c78876fca0c0436">rpcSRC_ACT_MALFORMED</a>, <a class="code hl_function" href="namespaceripple_1_1RPC.html#a786aa1fb7be9a79763f72a11aa8224b6">RPC::invalid_field_message</a>(accountField));</div>
|
||||
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> }</div>
|
||||
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> </div>
|
||||
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> <span class="keywordflow">if</span> (!jvRequest.<a class="code hl_function" href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">isMember</a>(jss::tx_json))</div>
|
||||
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#aec2e1163b39a450d3917af9dd15b0f06">RPC::missing_field_error</a>(jss::tx_json);</div>
|
||||
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> </div>
|
||||
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> {</div>
|
||||
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>& tx_json(jvRequest[jss::tx_json]);</div>
|
||||
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> </div>
|
||||
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> <span class="keywordflow">if</span> (!tx_json.<a class="code hl_function" href="classJson_1_1Value.html#a8cf96c0f2a552051fcfc78ffee60e037">isObject</a>())</div>
|
||||
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a97b09da785b1944b7b1964eeff97a43b">RPC::object_field_error</a>(jss::tx_json);</div>
|
||||
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> </div>
|
||||
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span> <span class="comment">// If the tx_json.SigningPubKey field is missing,</span></div>
|
||||
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span> <span class="comment">// insert an empty one.</span></div>
|
||||
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> <span class="keywordflow">if</span> (!tx_json.<a class="code hl_function" href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">isMember</a>(sfSigningPubKey.getJsonName()))</div>
|
||||
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> tx_json[sfSigningPubKey.getJsonName()] = <span class="stringliteral">""</span>;</div>
|
||||
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> }</div>
|
||||
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span> </div>
|
||||
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> <span class="comment">// When multi-signing, the "Sequence" and "SigningPubKey" fields must</span></div>
|
||||
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> <span class="comment">// be passed in by the caller.</span></div>
|
||||
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> <span class="keyword">using namespace </span>detail;</div>
|
||||
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> {</div>
|
||||
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> err = checkMultiSignFields(jvRequest);</div>
|
||||
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span> }</div>
|
||||
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> </div>
|
||||
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> <span class="comment">// Add and amend fields based on the transaction type.</span></div>
|
||||
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> SigningForParams signForParams(*signerAccountID);</div>
|
||||
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> </div>
|
||||
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> transactionPreProcessResult preprocResult = transactionPreProcessImpl(</div>
|
||||
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> jvRequest, role, signForParams, validatedLedgerAge, app);</div>
|
||||
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> </div>
|
||||
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> <span class="keywordflow">if</span> (!preprocResult.second)</div>
|
||||
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> <span class="keywordflow">return</span> preprocResult.first;</div>
|
||||
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> </div>
|
||||
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> signForParams.validMultiSign(),</div>
|
||||
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span> <span class="stringliteral">"ripple::RPC::transactionSignFor : valid multi-signature"</span>);</div>
|
||||
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> </div>
|
||||
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span>} <span class="comment">// namespace detail</span></div>
|
||||
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> </div>
|
||||
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span><a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a></div>
|
||||
<div class="foldopen" id="foldopen01147" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"><a class="line" href="namespaceripple_1_1RPC.html#aced54d69612c2b58940e2132e905dfc6"> 1147</a></span><a class="code hl_function" href="namespaceripple_1_1RPC.html#aced54d69612c2b58940e2132e905dfc6">transactionSignFor</a>(</div>
|
||||
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jvRequest,</div>
|
||||
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> <span class="keywordtype">unsigned</span> <a class="code hl_variable" href="namespaceripple_1_1RPC.html#a47dbdaa21d9c40b369424e671ccd7e20">apiVersion</a>,</div>
|
||||
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span> <a class="code hl_enumeration" href="classripple_1_1NetworkOPs.html#ada325f492d3aa1aa62d4b159e106c37a">NetworkOPs::FailHard</a> failType,</div>
|
||||
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> <a class="code hl_enumeration" href="namespaceripple.html#ae08fe18f17b24699ce41d3898fbb8c2c">Role</a> role,</div>
|
||||
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::seconds</a> validatedLedgerAge,</div>
|
||||
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> <a class="code hl_class" href="classripple_1_1Application.html">Application</a>& app)</div>
|
||||
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span>{</div>
|
||||
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> <span class="keyword">auto</span> <span class="keyword">const</span>& ledger = app.<a class="code hl_function" href="classripple_1_1Application.html#a151d1401a346131fc6fb3efb197133e6">openLedger</a>().<a class="code hl_function" href="classripple_1_1OpenLedger.html#ad34da15d3e40a35a73bbabe104478114">current</a>();</div>
|
||||
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> <span class="keyword">auto</span> j = app.<a class="code hl_function" href="classripple_1_1Application.html#a2897c28a5b5040e80e66f676d201d03f">journal</a>(<span class="stringliteral">"RPCHandler"</span>);</div>
|
||||
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span> JLOG(j.debug()) << <span class="stringliteral">"transactionSignFor: "</span> << jvRequest;</div>
|
||||
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> </div>
|
||||
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> <span class="comment">// Verify presence of the signer's account field.</span></div>
|
||||
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> <span class="keywordtype">char</span> <span class="keyword">const</span> accountField[] = <span class="stringliteral">"account"</span>;</div>
|
||||
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> </div>
|
||||
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> <span class="keywordflow">if</span> (!jvRequest.<a class="code hl_function" href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">isMember</a>(accountField))</div>
|
||||
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#aec2e1163b39a450d3917af9dd15b0f06">RPC::missing_field_error</a>(accountField);</div>
|
||||
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> </div>
|
||||
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> <span class="comment">// Turn the signer's account into an AccountID for multi-sign.</span></div>
|
||||
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> <span class="keyword">auto</span> <span class="keyword">const</span> signerAccountID =</div>
|
||||
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> parseBase58<AccountID>(jvRequest[accountField].asString());</div>
|
||||
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> <span class="keywordflow">if</span> (!signerAccountID)</div>
|
||||
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> {</div>
|
||||
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(</div>
|
||||
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a967859223f75630b2c78876fca0c0436">rpcSRC_ACT_MALFORMED</a>, <a class="code hl_function" href="namespaceripple_1_1RPC.html#a786aa1fb7be9a79763f72a11aa8224b6">RPC::invalid_field_message</a>(accountField));</div>
|
||||
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> }</div>
|
||||
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> </div>
|
||||
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> <span class="keywordflow">if</span> (!jvRequest.<a class="code hl_function" href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">isMember</a>(jss::tx_json))</div>
|
||||
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#aec2e1163b39a450d3917af9dd15b0f06">RPC::missing_field_error</a>(jss::tx_json);</div>
|
||||
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> </div>
|
||||
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> {</div>
|
||||
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>& tx_json(jvRequest[jss::tx_json]);</div>
|
||||
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span> </div>
|
||||
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span> <span class="keywordflow">if</span> (!tx_json.<a class="code hl_function" href="classJson_1_1Value.html#a8cf96c0f2a552051fcfc78ffee60e037">isObject</a>())</div>
|
||||
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a97b09da785b1944b7b1964eeff97a43b">RPC::object_field_error</a>(jss::tx_json);</div>
|
||||
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> </div>
|
||||
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> <span class="comment">// If the tx_json.SigningPubKey field is missing,</span></div>
|
||||
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span> <span class="comment">// insert an empty one.</span></div>
|
||||
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> <span class="keywordflow">if</span> (!tx_json.<a class="code hl_function" href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">isMember</a>(sfSigningPubKey.getJsonName()))</div>
|
||||
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> tx_json[sfSigningPubKey.getJsonName()] = <span class="stringliteral">""</span>;</div>
|
||||
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> }</div>
|
||||
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> </div>
|
||||
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> <span class="comment">// When multi-signing, the "Sequence" and "SigningPubKey" fields must</span></div>
|
||||
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> <span class="comment">// be passed in by the caller.</span></div>
|
||||
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> <span class="keyword">using namespace </span>detail;</div>
|
||||
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span> {</div>
|
||||
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> err = checkMultiSignFields(jvRequest);</div>
|
||||
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> }</div>
|
||||
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> </div>
|
||||
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> <span class="comment">// Add and amend fields based on the transaction type.</span></div>
|
||||
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> SigningForParams signForParams(*signerAccountID);</div>
|
||||
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> </div>
|
||||
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> transactionPreProcessResult preprocResult = transactionPreProcessImpl(</div>
|
||||
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> jvRequest, role, signForParams, validatedLedgerAge, app);</div>
|
||||
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> </div>
|
||||
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> <span class="keywordflow">if</span> (!preprocResult.second)</div>
|
||||
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span> <span class="keywordflow">return</span> preprocResult.first;</div>
|
||||
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> </div>
|
||||
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> {</div>
|
||||
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> account_state =</div>
|
||||
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> ledger->read(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(*signerAccountID));</div>
|
||||
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> <span class="comment">// Make sure the account and secret belong together.</span></div>
|
||||
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> <span class="keyword">auto</span> <span class="keyword">const</span> err = acctMatchesPubKey(</div>
|
||||
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> account_state, *signerAccountID, signForParams.getPublicKey());</div>
|
||||
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> </div>
|
||||
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> <span class="keywordflow">if</span> (err != <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a6f69b339743d28bbc421fa3b31437173">rpcSUCCESS</a>)</div>
|
||||
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a67869382f83fd55cf3096d2591a57b07">rpcError</a>(err);</div>
|
||||
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span> }</div>
|
||||
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> XRPL_ASSERT(</div>
|
||||
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> signForParams.validMultiSign(),</div>
|
||||
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> <span class="stringliteral">"ripple::RPC::transactionSignFor : valid multi-signature"</span>);</div>
|
||||
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> </div>
|
||||
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> {</div>
|
||||
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> account_state =</div>
|
||||
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> ledger->read(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(*signerAccountID));</div>
|
||||
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> <span class="comment">// Make sure the account and secret belong together.</span></div>
|
||||
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> <span class="keyword">auto</span> <span class="keyword">const</span> err = acctMatchesPubKey(</div>
|
||||
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span> account_state, *signerAccountID, signForParams.getPublicKey());</div>
|
||||
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span> </div>
|
||||
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> <span class="comment">// Inject the newly generated signature into tx_json.Signers.</span></div>
|
||||
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> <span class="keyword">auto</span>& sttx = preprocResult.second;</div>
|
||||
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> {</div>
|
||||
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span> <span class="comment">// Make the signer object that we'll inject.</span></div>
|
||||
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> <a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> signer = <a class="code hl_function" href="classripple_1_1STObject.html#ab027b1e13d78b76dd6f41f0fb3459792">STObject::makeInnerObject</a>(sfSigner);</div>
|
||||
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span> signer[sfAccount] = *signerAccountID;</div>
|
||||
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> signer.<a class="code hl_function" href="classripple_1_1STObject.html#af1235d307d6f464392a583d0dfaa3cc4">setFieldVL</a>(sfTxnSignature, signForParams.getSignature());</div>
|
||||
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span> signer.<a class="code hl_function" href="classripple_1_1STObject.html#af1235d307d6f464392a583d0dfaa3cc4">setFieldVL</a>(</div>
|
||||
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> sfSigningPubKey, signForParams.getPublicKey().slice());</div>
|
||||
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> </div>
|
||||
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> <a class="code hl_class" href="classripple_1_1STObject.html">STObject</a>& sigTarget = [&]() -> <a class="code hl_class" href="classripple_1_1STObject.html">STObject</a>& {</div>
|
||||
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> <span class="keyword">auto</span> <span class="keyword">const</span> target = signForParams.getSignatureTarget();</div>
|
||||
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> <span class="keywordflow">if</span> (target)</div>
|
||||
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> <span class="keywordflow">return</span> sttx-><a class="code hl_function" href="classripple_1_1STObject.html#a649f361b3f9994fb28953efb9cf3a6b7">peekFieldObject</a>(*target);</div>
|
||||
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> <span class="keywordflow">return</span> *sttx;</div>
|
||||
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> }();</div>
|
||||
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> <span class="comment">// If there is not yet a Signers array, make one.</span></div>
|
||||
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> <span class="keywordflow">if</span> (!sigTarget.<a class="code hl_function" href="classripple_1_1STObject.html#aaf5d617701ac3afc4ad6a13862459692">isFieldPresent</a>(sfSigners))</div>
|
||||
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> sigTarget.<a class="code hl_function" href="classripple_1_1STObject.html#a2be037301806856f4b202cabc53d5e0a">setFieldArray</a>(sfSigners, {});</div>
|
||||
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> </div>
|
||||
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> <span class="keyword">auto</span>& signers = sigTarget.peekFieldArray(sfSigners);</div>
|
||||
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> signers.emplace_back(std::move(signer));</div>
|
||||
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> </div>
|
||||
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> <span class="comment">// The array must be sorted and validated.</span></div>
|
||||
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> <span class="keyword">auto</span> err = sortAndValidateSigners(signers, (*sttx)[sfAccount]);</div>
|
||||
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> }</div>
|
||||
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> </div>
|
||||
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> <span class="comment">// Make sure the STTx makes a legitimate Transaction.</span></div>
|
||||
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair<Json::Value, Transaction::pointer></a> txn =</div>
|
||||
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> transactionConstructImpl(sttx, ledger->rules(), app);</div>
|
||||
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordflow">if</span> (err != <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a6f69b339743d28bbc421fa3b31437173">rpcSUCCESS</a>)</div>
|
||||
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a67869382f83fd55cf3096d2591a57b07">rpcError</a>(err);</div>
|
||||
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> }</div>
|
||||
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span> </div>
|
||||
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> <span class="comment">// Inject the newly generated signature into tx_json.Signers.</span></div>
|
||||
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span> <span class="keyword">auto</span>& sttx = preprocResult.second;</div>
|
||||
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> {</div>
|
||||
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span> <span class="comment">// Make the signer object that we'll inject.</span></div>
|
||||
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> <a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> signer = <a class="code hl_function" href="classripple_1_1STObject.html#ab027b1e13d78b76dd6f41f0fb3459792">STObject::makeInnerObject</a>(sfSigner);</div>
|
||||
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> signer[sfAccount] = *signerAccountID;</div>
|
||||
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> signer.<a class="code hl_function" href="classripple_1_1STObject.html#af1235d307d6f464392a583d0dfaa3cc4">setFieldVL</a>(sfTxnSignature, signForParams.getSignature());</div>
|
||||
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> signer.<a class="code hl_function" href="classripple_1_1STObject.html#af1235d307d6f464392a583d0dfaa3cc4">setFieldVL</a>(</div>
|
||||
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> sfSigningPubKey, signForParams.getPublicKey().slice());</div>
|
||||
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> </div>
|
||||
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> <a class="code hl_class" href="classripple_1_1STObject.html">STObject</a>& sigTarget = [&]() -> <a class="code hl_class" href="classripple_1_1STObject.html">STObject</a>& {</div>
|
||||
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> <span class="keyword">auto</span> <span class="keyword">const</span> target = signForParams.getSignatureTarget();</div>
|
||||
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> <span class="keywordflow">if</span> (target)</div>
|
||||
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> <span class="keywordflow">return</span> sttx-><a class="code hl_function" href="classripple_1_1STObject.html#a649f361b3f9994fb28953efb9cf3a6b7">peekFieldObject</a>(*target);</div>
|
||||
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> <span class="keywordflow">return</span> *sttx;</div>
|
||||
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> }();</div>
|
||||
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> <span class="comment">// If there is not yet a Signers array, make one.</span></div>
|
||||
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> <span class="keywordflow">if</span> (!sigTarget.<a class="code hl_function" href="classripple_1_1STObject.html#aaf5d617701ac3afc4ad6a13862459692">isFieldPresent</a>(sfSigners))</div>
|
||||
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> sigTarget.<a class="code hl_function" href="classripple_1_1STObject.html#a2be037301806856f4b202cabc53d5e0a">setFieldArray</a>(sfSigners, {});</div>
|
||||
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> </div>
|
||||
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> <span class="keyword">auto</span>& signers = sigTarget.peekFieldArray(sfSigners);</div>
|
||||
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> signers.emplace_back(std::move(signer));</div>
|
||||
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> </div>
|
||||
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> <span class="comment">// The array must be sorted and validated.</span></div>
|
||||
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> <span class="keyword">auto</span> err = sortAndValidateSigners(signers, (*sttx)[sfAccount]);</div>
|
||||
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> }</div>
|
||||
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> </div>
|
||||
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> <span class="keywordflow">if</span> (!txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>)</div>
|
||||
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> <span class="keywordflow">return</span> txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">first</a>;</div>
|
||||
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> </div>
|
||||
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> <span class="keywordflow">return</span> transactionFormatResultImpl(txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>, <a class="code hl_variable" href="namespaceripple_1_1RPC.html#a47dbdaa21d9c40b369424e671ccd7e20">apiVersion</a>);</div>
|
||||
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span>}</div>
|
||||
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> <span class="comment">// Make sure the STTx makes a legitimate Transaction.</span></div>
|
||||
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair<Json::Value, Transaction::pointer></a> txn =</div>
|
||||
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> transactionConstructImpl(sttx, ledger->rules(), app);</div>
|
||||
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> </div>
|
||||
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> <span class="keywordflow">if</span> (!txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>)</div>
|
||||
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> <span class="keywordflow">return</span> txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">first</a>;</div>
|
||||
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> </div>
|
||||
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> <span class="keywordflow">return</span> transactionFormatResultImpl(txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>, <a class="code hl_variable" href="namespaceripple_1_1RPC.html#a47dbdaa21d9c40b369424e671ccd7e20">apiVersion</a>);</div>
|
||||
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span>}</div>
|
||||
</div>
|
||||
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> </div>
|
||||
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span><a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a></div>
|
||||
<div class="foldopen" id="foldopen01259" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"><a class="line" href="namespaceripple_1_1RPC.html#a1aaebf843616a5dd8eacb3c5e7af9540"> 1259</a></span><a class="code hl_function" href="namespaceripple_1_1RPC.html#a1aaebf843616a5dd8eacb3c5e7af9540">transactionSubmitMultiSigned</a>(</div>
|
||||
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jvRequest,</div>
|
||||
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> <span class="keywordtype">unsigned</span> apiVersion,</div>
|
||||
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> <a class="code hl_enumeration" href="classripple_1_1NetworkOPs.html#ada325f492d3aa1aa62d4b159e106c37a">NetworkOPs::FailHard</a> failType,</div>
|
||||
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> <a class="code hl_enumeration" href="namespaceripple.html#ae08fe18f17b24699ce41d3898fbb8c2c">Role</a> role,</div>
|
||||
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::seconds</a> validatedLedgerAge,</div>
|
||||
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> <a class="code hl_class" href="classripple_1_1Application.html">Application</a>& app,</div>
|
||||
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">ProcessTransactionFn</a> <span class="keyword">const</span>& processTransaction)</div>
|
||||
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span>{</div>
|
||||
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> <span class="keyword">auto</span> <span class="keyword">const</span>& ledger = app.<a class="code hl_function" href="classripple_1_1Application.html#a151d1401a346131fc6fb3efb197133e6">openLedger</a>().<a class="code hl_function" href="classripple_1_1OpenLedger.html#ad34da15d3e40a35a73bbabe104478114">current</a>();</div>
|
||||
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> <span class="keyword">auto</span> j = app.<a class="code hl_function" href="classripple_1_1Application.html#a2897c28a5b5040e80e66f676d201d03f">journal</a>(<span class="stringliteral">"RPCHandler"</span>);</div>
|
||||
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> JLOG(j.debug()) << <span class="stringliteral">"transactionSubmitMultiSigned: "</span> << jvRequest;</div>
|
||||
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> </div>
|
||||
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> <span class="comment">// When multi-signing, the "Sequence" and "SigningPubKey" fields must</span></div>
|
||||
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> <span class="comment">// be passed in by the caller.</span></div>
|
||||
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> <span class="keyword">using namespace </span>detail;</div>
|
||||
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> {</div>
|
||||
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> err = checkMultiSignFields(jvRequest);</div>
|
||||
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> }</div>
|
||||
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> </div>
|
||||
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>& tx_json(jvRequest[<span class="stringliteral">"tx_json"</span>]);</div>
|
||||
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> </div>
|
||||
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> <span class="keyword">auto</span> [txJsonResult, srcAddressID] = checkTxJsonFields(</div>
|
||||
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> tx_json,</div>
|
||||
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> role,</div>
|
||||
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> <span class="keyword">true</span>,</div>
|
||||
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> validatedLedgerAge,</div>
|
||||
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> app.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>(),</div>
|
||||
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> app.<a class="code hl_function" href="classripple_1_1Application.html#a143d2b9c53a24814fc28309244aa3631">getFeeTrack</a>(),</div>
|
||||
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#ad8fbfe3fd4651227fd4df999f60921d6">getAPIVersionNumber</a>(jvRequest, app.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a60e194c37b2e6e2a6cbaab170579fd15">BETA_RPC_API</a>));</div>
|
||||
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> </div>
|
||||
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(txJsonResult))</div>
|
||||
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> <span class="keywordflow">return</span> std::move(txJsonResult);</div>
|
||||
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> </div>
|
||||
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> sle =</div>
|
||||
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> ledger->read(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(srcAddressID));</div>
|
||||
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> </div>
|
||||
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> <span class="keywordflow">if</span> (!sle)</div>
|
||||
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> {</div>
|
||||
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> <span class="comment">// If did not find account, error.</span></div>
|
||||
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> JLOG(j.debug())</div>
|
||||
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> << <span class="stringliteral">"transactionSubmitMultiSigned: Failed to find source account "</span></div>
|
||||
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> << <span class="stringliteral">"in current ledger: "</span> << <a class="code hl_function" href="namespaceripple.html#a08a13b62b18272366f788632359e8793">toBase58</a>(srcAddressID);</div>
|
||||
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> </div>
|
||||
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a67869382f83fd55cf3096d2591a57b07">rpcError</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a45e21d134aa6921065916fcbcb875877">rpcSRC_ACT_NOT_FOUND</a>);</div>
|
||||
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> }</div>
|
||||
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> </div>
|
||||
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> {</div>
|
||||
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> err = <a class="code hl_function" href="namespaceripple_1_1RPC.html#adf952f7ca5d0d26e982a92acce6bf937">checkFee</a>(</div>
|
||||
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> jvRequest,</div>
|
||||
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> role,</div>
|
||||
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> <span class="keyword">false</span>,</div>
|
||||
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> app.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>(),</div>
|
||||
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span> app.<a class="code hl_function" href="classripple_1_1Application.html#a143d2b9c53a24814fc28309244aa3631">getFeeTrack</a>(),</div>
|
||||
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> app.<a class="code hl_function" href="classripple_1_1Application.html#abcadc50f7bafb5f027e40e18191a7de0">getTxQ</a>(),</div>
|
||||
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> app);</div>
|
||||
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> </div>
|
||||
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> </div>
|
||||
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> err = checkPayment(jvRequest, tx_json, srcAddressID, role, app, <span class="keyword">false</span>);</div>
|
||||
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> </div>
|
||||
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> }</div>
|
||||
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> </div>
|
||||
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span><a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a></div>
|
||||
<div class="foldopen" id="foldopen01263" data-start="{" data-end="}">
|
||||
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"><a class="line" href="namespaceripple_1_1RPC.html#a1aaebf843616a5dd8eacb3c5e7af9540"> 1263</a></span><a class="code hl_function" href="namespaceripple_1_1RPC.html#a1aaebf843616a5dd8eacb3c5e7af9540">transactionSubmitMultiSigned</a>(</div>
|
||||
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jvRequest,</div>
|
||||
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> <span class="keywordtype">unsigned</span> apiVersion,</div>
|
||||
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> <a class="code hl_enumeration" href="classripple_1_1NetworkOPs.html#ada325f492d3aa1aa62d4b159e106c37a">NetworkOPs::FailHard</a> failType,</div>
|
||||
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> <a class="code hl_enumeration" href="namespaceripple.html#ae08fe18f17b24699ce41d3898fbb8c2c">Role</a> role,</div>
|
||||
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::seconds</a> validatedLedgerAge,</div>
|
||||
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> <a class="code hl_class" href="classripple_1_1Application.html">Application</a>& app,</div>
|
||||
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">ProcessTransactionFn</a> <span class="keyword">const</span>& processTransaction)</div>
|
||||
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span>{</div>
|
||||
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> <span class="keyword">auto</span> <span class="keyword">const</span>& ledger = app.<a class="code hl_function" href="classripple_1_1Application.html#a151d1401a346131fc6fb3efb197133e6">openLedger</a>().<a class="code hl_function" href="classripple_1_1OpenLedger.html#ad34da15d3e40a35a73bbabe104478114">current</a>();</div>
|
||||
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> <span class="keyword">auto</span> j = app.<a class="code hl_function" href="classripple_1_1Application.html#a2897c28a5b5040e80e66f676d201d03f">journal</a>(<span class="stringliteral">"RPCHandler"</span>);</div>
|
||||
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> JLOG(j.debug()) << <span class="stringliteral">"transactionSubmitMultiSigned: "</span> << jvRequest;</div>
|
||||
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> </div>
|
||||
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> <span class="comment">// When multi-signing, the "Sequence" and "SigningPubKey" fields must</span></div>
|
||||
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> <span class="comment">// be passed in by the caller.</span></div>
|
||||
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> <span class="keyword">using namespace </span>detail;</div>
|
||||
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> {</div>
|
||||
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> err = checkMultiSignFields(jvRequest);</div>
|
||||
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> }</div>
|
||||
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> </div>
|
||||
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>& tx_json(jvRequest[<span class="stringliteral">"tx_json"</span>]);</div>
|
||||
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> </div>
|
||||
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> <span class="keyword">auto</span> [txJsonResult, srcAddressID] = checkTxJsonFields(</div>
|
||||
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> tx_json,</div>
|
||||
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> role,</div>
|
||||
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> <span class="keyword">true</span>,</div>
|
||||
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> validatedLedgerAge,</div>
|
||||
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> app.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>(),</div>
|
||||
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> app.<a class="code hl_function" href="classripple_1_1Application.html#a143d2b9c53a24814fc28309244aa3631">getFeeTrack</a>(),</div>
|
||||
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#ad8fbfe3fd4651227fd4df999f60921d6">getAPIVersionNumber</a>(jvRequest, app.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>().<a class="code hl_variable" href="classripple_1_1Config.html#a60e194c37b2e6e2a6cbaab170579fd15">BETA_RPC_API</a>));</div>
|
||||
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> </div>
|
||||
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(txJsonResult))</div>
|
||||
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> <span class="keywordflow">return</span> std::move(txJsonResult);</div>
|
||||
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> </div>
|
||||
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SLE const></a> sle =</div>
|
||||
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> ledger->read(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(srcAddressID));</div>
|
||||
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> </div>
|
||||
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> <span class="keywordflow">if</span> (!sle)</div>
|
||||
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> {</div>
|
||||
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> <span class="comment">// If did not find account, error.</span></div>
|
||||
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> JLOG(j.debug())</div>
|
||||
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> << <span class="stringliteral">"transactionSubmitMultiSigned: Failed to find source account "</span></div>
|
||||
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> << <span class="stringliteral">"in current ledger: "</span> << <a class="code hl_function" href="namespaceripple.html#a08a13b62b18272366f788632359e8793">toBase58</a>(srcAddressID);</div>
|
||||
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> </div>
|
||||
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a67869382f83fd55cf3096d2591a57b07">rpcError</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a45e21d134aa6921065916fcbcb875877">rpcSRC_ACT_NOT_FOUND</a>);</div>
|
||||
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> }</div>
|
||||
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> </div>
|
||||
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> {</div>
|
||||
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> err = <a class="code hl_function" href="namespaceripple_1_1RPC.html#adf952f7ca5d0d26e982a92acce6bf937">checkFee</a>(</div>
|
||||
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span> jvRequest,</div>
|
||||
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> role,</div>
|
||||
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> <span class="keyword">false</span>,</div>
|
||||
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> app.<a class="code hl_function" href="classripple_1_1Application.html#a0c48dd5bcaef14e30e9ef5b96b0daa39">config</a>(),</div>
|
||||
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> app.<a class="code hl_function" href="classripple_1_1Application.html#a143d2b9c53a24814fc28309244aa3631">getFeeTrack</a>(),</div>
|
||||
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> app.<a class="code hl_function" href="classripple_1_1Application.html#abcadc50f7bafb5f027e40e18191a7de0">getTxQ</a>(),</div>
|
||||
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> app);</div>
|
||||
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> </div>
|
||||
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> </div>
|
||||
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> err = checkPayment(jvRequest, tx_json, srcAddressID, role, app, <span class="keyword">false</span>);</div>
|
||||
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> </div>
|
||||
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> <span class="comment">// Grind through the JSON in tx_json to produce a STTx.</span></div>
|
||||
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<STTx></a> stTx;</div>
|
||||
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> {</div>
|
||||
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> <a class="code hl_class" href="classripple_1_1STParsedJSONObject.html">STParsedJSONObject</a> parsedTx_json(<span class="stringliteral">"tx_json"</span>, tx_json);</div>
|
||||
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> <span class="keywordflow">if</span> (!parsedTx_json.<a class="code hl_variable" href="classripple_1_1STParsedJSONObject.html#a5684522fa6918e6256d910053cd58c47">object</a>)</div>
|
||||
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> {</div>
|
||||
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jvResult;</div>
|
||||
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> jvResult[<span class="stringliteral">"error"</span>] = parsedTx_json.<a class="code hl_variable" href="classripple_1_1STParsedJSONObject.html#a75ae1e4c096f722a17614c58d8b284a4">error</a>[<span class="stringliteral">"error"</span>];</div>
|
||||
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> jvResult[<span class="stringliteral">"error_code"</span>] = parsedTx_json.<a class="code hl_variable" href="classripple_1_1STParsedJSONObject.html#a75ae1e4c096f722a17614c58d8b284a4">error</a>[<span class="stringliteral">"error_code"</span>];</div>
|
||||
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> jvResult[<span class="stringliteral">"error_message"</span>] = parsedTx_json.<a class="code hl_variable" href="classripple_1_1STParsedJSONObject.html#a75ae1e4c096f722a17614c58d8b284a4">error</a>[<span class="stringliteral">"error_message"</span>];</div>
|
||||
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> <span class="keywordflow">return</span> jvResult;</div>
|
||||
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> }</div>
|
||||
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> <span class="keywordflow">try</span></div>
|
||||
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> {</div>
|
||||
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> stTx =</div>
|
||||
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_shared<STTx></a>(std::move(parsedTx_json.<a class="code hl_variable" href="classripple_1_1STParsedJSONObject.html#a5684522fa6918e6256d910053cd58c47">object</a>.value()));</div>
|
||||
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> }</div>
|
||||
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> <span class="keywordflow">catch</span> (<a class="code hl_class" href="classripple_1_1STObject_1_1FieldErr.html">STObject::FieldErr</a>& err)</div>
|
||||
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> {</div>
|
||||
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>());</div>
|
||||
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> }</div>
|
||||
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> </div>
|
||||
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> <span class="comment">// Grind through the JSON in tx_json to produce a STTx.</span></div>
|
||||
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<STTx></a> stTx;</div>
|
||||
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> {</div>
|
||||
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> <a class="code hl_class" href="classripple_1_1STParsedJSONObject.html">STParsedJSONObject</a> parsedTx_json(<span class="stringliteral">"tx_json"</span>, tx_json);</div>
|
||||
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> <span class="keywordflow">if</span> (!parsedTx_json.<a class="code hl_variable" href="classripple_1_1STParsedJSONObject.html#a5684522fa6918e6256d910053cd58c47">object</a>)</div>
|
||||
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> {</div>
|
||||
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jvResult;</div>
|
||||
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> jvResult[<span class="stringliteral">"error"</span>] = parsedTx_json.<a class="code hl_variable" href="classripple_1_1STParsedJSONObject.html#a75ae1e4c096f722a17614c58d8b284a4">error</a>[<span class="stringliteral">"error"</span>];</div>
|
||||
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> jvResult[<span class="stringliteral">"error_code"</span>] = parsedTx_json.<a class="code hl_variable" href="classripple_1_1STParsedJSONObject.html#a75ae1e4c096f722a17614c58d8b284a4">error</a>[<span class="stringliteral">"error_code"</span>];</div>
|
||||
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> jvResult[<span class="stringliteral">"error_message"</span>] = parsedTx_json.<a class="code hl_variable" href="classripple_1_1STParsedJSONObject.html#a75ae1e4c096f722a17614c58d8b284a4">error</a>[<span class="stringliteral">"error_message"</span>];</div>
|
||||
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> <span class="keywordflow">return</span> jvResult;</div>
|
||||
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> }</div>
|
||||
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> <span class="keywordflow">try</span></div>
|
||||
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> {</div>
|
||||
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> stTx =</div>
|
||||
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_shared<STTx></a>(std::move(parsedTx_json.<a class="code hl_variable" href="classripple_1_1STParsedJSONObject.html#a5684522fa6918e6256d910053cd58c47">object</a>.value()));</div>
|
||||
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> }</div>
|
||||
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a>& ex)</div>
|
||||
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> <span class="keywordflow">catch</span> (<a class="code hl_class" href="classripple_1_1STObject_1_1FieldErr.html">STObject::FieldErr</a>& err)</div>
|
||||
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> {</div>
|
||||
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> reason(ex.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>());</div>
|
||||
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(</div>
|
||||
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a839833d48b635d8df6a9176274ae922f">rpcINTERNAL</a>,</div>
|
||||
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> <span class="stringliteral">"Exception while serializing transaction: "</span> + reason);</div>
|
||||
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span> }</div>
|
||||
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> reason;</div>
|
||||
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#abc101b438834a6b2d730bbd63fe03b74">passesLocalChecks</a>(*stTx, reason))</div>
|
||||
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, reason);</div>
|
||||
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span> }</div>
|
||||
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> </div>
|
||||
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> <span class="comment">// Validate the fields in the serialized transaction.</span></div>
|
||||
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> {</div>
|
||||
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> <span class="comment">// We now have the transaction text serialized and in the right format.</span></div>
|
||||
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span> <span class="comment">// Verify the values of select fields.</span></div>
|
||||
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span> <span class="comment">// The SigningPubKey must be present but empty.</span></div>
|
||||
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> <span class="keywordflow">if</span> (!stTx->getFieldVL(sfSigningPubKey).empty())</div>
|
||||
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span> {</div>
|
||||
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a> err;</div>
|
||||
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> err << <span class="stringliteral">"Invalid "</span> << sfSigningPubKey.fieldName</div>
|
||||
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span> << <span class="stringliteral">" field. Field must be empty when multi-signing."</span>;</div>
|
||||
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream/str.html">str</a>());</div>
|
||||
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span> }</div>
|
||||
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span> </div>
|
||||
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> <span class="comment">// There may not be a TxnSignature field.</span></div>
|
||||
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span> <span class="keywordflow">if</span> (stTx->isFieldPresent(sfTxnSignature))</div>
|
||||
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a67869382f83fd55cf3096d2591a57b07">rpcError</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a9e3a3fa2bb1e04da92ea7253db9189d3">rpcSIGNING_MALFORMED</a>);</div>
|
||||
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>());</div>
|
||||
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> }</div>
|
||||
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a>& ex)</div>
|
||||
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> {</div>
|
||||
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> reason(ex.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>());</div>
|
||||
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(</div>
|
||||
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span> <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a839833d48b635d8df6a9176274ae922f">rpcINTERNAL</a>,</div>
|
||||
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> <span class="stringliteral">"Exception while serializing transaction: "</span> + reason);</div>
|
||||
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span> }</div>
|
||||
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> reason;</div>
|
||||
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#abc101b438834a6b2d730bbd63fe03b74">passesLocalChecks</a>(*stTx, reason))</div>
|
||||
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, reason);</div>
|
||||
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> }</div>
|
||||
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span> </div>
|
||||
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span> <span class="comment">// Validate the fields in the serialized transaction.</span></div>
|
||||
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span> {</div>
|
||||
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> <span class="comment">// We now have the transaction text serialized and in the right format.</span></div>
|
||||
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span> <span class="comment">// Verify the values of select fields.</span></div>
|
||||
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> <span class="comment">// The SigningPubKey must be present but empty.</span></div>
|
||||
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span> <span class="keywordflow">if</span> (!stTx->getFieldVL(sfSigningPubKey).empty())</div>
|
||||
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> {</div>
|
||||
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a> err;</div>
|
||||
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span> err << <span class="stringliteral">"Invalid "</span> << sfSigningPubKey.fieldName</div>
|
||||
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> << <span class="stringliteral">" field. Field must be empty when multi-signing."</span>;</div>
|
||||
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream/str.html">str</a>());</div>
|
||||
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> }</div>
|
||||
<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"> 1377</span> </div>
|
||||
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span> <span class="comment">// The Fee field must be in XRP and greater than zero.</span></div>
|
||||
<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"> 1379</span> <span class="keyword">auto</span> <span class="keyword">const</span> fee = stTx->getFieldAmount(sfFee);</div>
|
||||
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span> </div>
|
||||
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a3e312ecdb199409dca142d307a3e0e5b">isLegalNet</a>(fee))</div>
|
||||
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"> 1382</span> {</div>
|
||||
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a> err;</div>
|
||||
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span> err << <span class="stringliteral">"Invalid "</span> << sfFee.fieldName</div>
|
||||
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> << <span class="stringliteral">" field. Fees must be specified in XRP."</span>;</div>
|
||||
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream/str.html">str</a>());</div>
|
||||
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> }</div>
|
||||
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> <span class="keywordflow">if</span> (fee <= <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{0})</div>
|
||||
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> {</div>
|
||||
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a> err;</div>
|
||||
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> err << <span class="stringliteral">"Invalid "</span> << sfFee.fieldName</div>
|
||||
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span> << <span class="stringliteral">" field. Fees must be greater than zero."</span>;</div>
|
||||
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream/str.html">str</a>());</div>
|
||||
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> }</div>
|
||||
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> }</div>
|
||||
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span> </div>
|
||||
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> <span class="comment">// Verify that the Signers field is present.</span></div>
|
||||
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> <span class="keywordflow">if</span> (!stTx->isFieldPresent(sfSigners))</div>
|
||||
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#aec2e1163b39a450d3917af9dd15b0f06">RPC::missing_field_error</a>(<span class="stringliteral">"tx_json.Signers"</span>);</div>
|
||||
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span> <span class="comment">// There may not be a TxnSignature field.</span></div>
|
||||
<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"> 1379</span> <span class="keywordflow">if</span> (stTx->isFieldPresent(sfTxnSignature))</div>
|
||||
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a67869382f83fd55cf3096d2591a57b07">rpcError</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a9e3a3fa2bb1e04da92ea7253db9189d3">rpcSIGNING_MALFORMED</a>);</div>
|
||||
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span> </div>
|
||||
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"> 1382</span> <span class="comment">// The Fee field must be in XRP and greater than zero.</span></div>
|
||||
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span> <span class="keyword">auto</span> <span class="keyword">const</span> fee = stTx->getFieldAmount(sfFee);</div>
|
||||
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span> </div>
|
||||
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a3e312ecdb199409dca142d307a3e0e5b">isLegalNet</a>(fee))</div>
|
||||
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> {</div>
|
||||
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a> err;</div>
|
||||
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> err << <span class="stringliteral">"Invalid "</span> << sfFee.fieldName</div>
|
||||
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> << <span class="stringliteral">" field. Fees must be specified in XRP."</span>;</div>
|
||||
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream/str.html">str</a>());</div>
|
||||
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> }</div>
|
||||
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span> <span class="keywordflow">if</span> (fee <= <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{0})</div>
|
||||
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> {</div>
|
||||
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a> err;</div>
|
||||
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> err << <span class="stringliteral">"Invalid "</span> << sfFee.fieldName</div>
|
||||
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span> << <span class="stringliteral">" field. Fees must be greater than zero."</span>;</div>
|
||||
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a82ddebc5ec7a37ff38892487277bf9c4">rpcINVALID_PARAMS</a>, err.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_ostringstream/str.html">str</a>());</div>
|
||||
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> }</div>
|
||||
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> }</div>
|
||||
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> </div>
|
||||
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> <span class="comment">// If the Signers field is present the SField guarantees it to be an array.</span></div>
|
||||
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> <span class="comment">// Get a reference to the Signers array so we can verify and sort it.</span></div>
|
||||
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> <span class="keyword">auto</span>& signers = stTx->peekFieldArray(sfSigners);</div>
|
||||
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> <span class="comment">// Verify that the Signers field is present.</span></div>
|
||||
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> <span class="keywordflow">if</span> (!stTx->isFieldPresent(sfSigners))</div>
|
||||
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#aec2e1163b39a450d3917af9dd15b0f06">RPC::missing_field_error</a>(<span class="stringliteral">"tx_json.Signers"</span>);</div>
|
||||
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span> </div>
|
||||
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> <span class="keywordflow">if</span> (signers.empty())</div>
|
||||
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a5b6ce0616f6995340f4dd846660c3749">RPC::make_param_error</a>(<span class="stringliteral">"tx_json.Signers array may not be empty."</span>);</div>
|
||||
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> </div>
|
||||
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> <span class="comment">// The Signers array may only contain Signer objects.</span></div>
|
||||
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> <span class="keywordflow">if</span> (<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if_not</a>(</div>
|
||||
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> signers.begin(), signers.end(), [](<a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& obj) {</div>
|
||||
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span> return (</div>
|
||||
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> <span class="comment">// A Signer object always contains these fields and no</span></div>
|
||||
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> <span class="comment">// others.</span></div>
|
||||
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> obj.isFieldPresent(sfAccount) &&</div>
|
||||
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> obj.isFieldPresent(sfSigningPubKey) &&</div>
|
||||
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span> obj.isFieldPresent(sfTxnSignature) && obj.getCount() == 3);</div>
|
||||
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> }) != signers.end())</div>
|
||||
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> {</div>
|
||||
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a5b6ce0616f6995340f4dd846660c3749">RPC::make_param_error</a>(</div>
|
||||
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span> <span class="stringliteral">"Signers array may only contain Signer entries."</span>);</div>
|
||||
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> }</div>
|
||||
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> </div>
|
||||
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span> <span class="comment">// The array must be sorted and validated.</span></div>
|
||||
<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> <span class="keyword">auto</span> err = sortAndValidateSigners(signers, srcAddressID);</div>
|
||||
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span> </div>
|
||||
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span> <span class="comment">// Make sure the SerializedTransaction makes a legitimate Transaction.</span></div>
|
||||
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair<Json::Value, Transaction::pointer></a> txn =</div>
|
||||
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> transactionConstructImpl(stTx, ledger->rules(), app);</div>
|
||||
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> <span class="comment">// If the Signers field is present the SField guarantees it to be an array.</span></div>
|
||||
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span> <span class="comment">// Get a reference to the Signers array so we can verify and sort it.</span></div>
|
||||
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> <span class="keyword">auto</span>& signers = stTx->peekFieldArray(sfSigners);</div>
|
||||
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> </div>
|
||||
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> <span class="keywordflow">if</span> (signers.empty())</div>
|
||||
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a5b6ce0616f6995340f4dd846660c3749">RPC::make_param_error</a>(<span class="stringliteral">"tx_json.Signers array may not be empty."</span>);</div>
|
||||
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span> </div>
|
||||
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> <span class="comment">// The Signers array may only contain Signer objects.</span></div>
|
||||
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> <span class="keywordflow">if</span> (<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if_not</a>(</div>
|
||||
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> signers.begin(), signers.end(), [](<a class="code hl_class" href="classripple_1_1STObject.html">STObject</a> <span class="keyword">const</span>& obj) {</div>
|
||||
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> return (</div>
|
||||
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span> <span class="comment">// A Signer object always contains these fields and no</span></div>
|
||||
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> <span class="comment">// others.</span></div>
|
||||
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> obj.isFieldPresent(sfAccount) &&</div>
|
||||
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span> obj.isFieldPresent(sfSigningPubKey) &&</div>
|
||||
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span> obj.isFieldPresent(sfTxnSignature) && obj.getCount() == 3);</div>
|
||||
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> }) != signers.end())</div>
|
||||
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> {</div>
|
||||
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a5b6ce0616f6995340f4dd846660c3749">RPC::make_param_error</a>(</div>
|
||||
<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> <span class="stringliteral">"Signers array may only contain Signer entries."</span>);</div>
|
||||
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span> }</div>
|
||||
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span> </div>
|
||||
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span> <span class="comment">// The array must be sorted and validated.</span></div>
|
||||
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span> <span class="keyword">auto</span> err = sortAndValidateSigners(signers, srcAddressID);</div>
|
||||
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">RPC::contains_error</a>(err))</div>
|
||||
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> <span class="keywordflow">return</span> err;</div>
|
||||
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> </div>
|
||||
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> <span class="keywordflow">if</span> (!txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>)</div>
|
||||
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> <span class="keywordflow">return</span> txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">first</a>;</div>
|
||||
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> </div>
|
||||
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> <span class="comment">// Finally, submit the transaction.</span></div>
|
||||
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> <span class="keywordflow">try</span></div>
|
||||
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span> {</div>
|
||||
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span> <span class="comment">// FIXME: For performance, should use asynch interface</span></div>
|
||||
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> processTransaction(txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>, <a class="code hl_function" href="namespaceripple.html#a6909f61053b6e084f46665fa9f4ee673">isUnlimited</a>(role), <span class="keyword">true</span>, failType);</div>
|
||||
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span> }</div>
|
||||
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a>&)</div>
|
||||
<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"> 1442</span> {</div>
|
||||
<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"> 1443</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(</div>
|
||||
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span> <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a839833d48b635d8df6a9176274ae922f">rpcINTERNAL</a>, <span class="stringliteral">"Exception occurred during transaction submission."</span>);</div>
|
||||
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> }</div>
|
||||
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span> </div>
|
||||
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> <span class="keywordflow">return</span> transactionFormatResultImpl(txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>, apiVersion);</div>
|
||||
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span>}</div>
|
||||
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> <span class="comment">// Make sure the SerializedTransaction makes a legitimate Transaction.</span></div>
|
||||
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair<Json::Value, Transaction::pointer></a> txn =</div>
|
||||
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> transactionConstructImpl(stTx, ledger->rules(), app);</div>
|
||||
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> </div>
|
||||
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> <span class="keywordflow">if</span> (!txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>)</div>
|
||||
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span> <span class="keywordflow">return</span> txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">first</a>;</div>
|
||||
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span> </div>
|
||||
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> <span class="comment">// Finally, submit the transaction.</span></div>
|
||||
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span> <span class="keywordflow">try</span></div>
|
||||
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span> {</div>
|
||||
<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"> 1442</span> <span class="comment">// FIXME: For performance, should use asynch interface</span></div>
|
||||
<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"> 1443</span> processTransaction(txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>, <a class="code hl_function" href="namespaceripple.html#a6909f61053b6e084f46665fa9f4ee673">isUnlimited</a>(role), <span class="keyword">true</span>, failType);</div>
|
||||
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span> }</div>
|
||||
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a>&)</div>
|
||||
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span> {</div>
|
||||
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">RPC::make_error</a>(</div>
|
||||
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span> <a class="code hl_enumvalue" href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932a839833d48b635d8df6a9176274ae922f">rpcINTERNAL</a>, <span class="stringliteral">"Exception occurred during transaction submission."</span>);</div>
|
||||
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> }</div>
|
||||
<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span> </div>
|
||||
<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span> <span class="keywordflow">return</span> transactionFormatResultImpl(txn.<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>, apiVersion);</div>
|
||||
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span>}</div>
|
||||
</div>
|
||||
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> </div>
|
||||
<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span>} <span class="comment">// namespace RPC</span></div>
|
||||
<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span>} <span class="comment">// namespace ripple</span></div>
|
||||
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span> </div>
|
||||
<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span>} <span class="comment">// namespace RPC</span></div>
|
||||
<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"> 1455</span>} <span class="comment">// namespace ripple</span></div>
|
||||
<div class="ttc" id="aadjacent_find_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/adjacent_find.html">std::adjacent_find</a></div><div class="ttdeci">T adjacent_find(T... args)</div></div>
|
||||
<div class="ttc" id="aalgorithm_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/algorithm.html">algorithm</a></div></div>
|
||||
<div class="ttc" id="abasic_ostringstream_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_ostringstream.html">std::ostringstream</a></div></div>
|
||||
@@ -1599,8 +1603,8 @@ $(document).ready(function() { init_codefold(0); });
|
||||
<div class="ttc" id="abasic_stringstream_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_stringstream.html">std::stringstream</a></div></div>
|
||||
<div class="ttc" id="aclassJson_1_1Value_html"><div class="ttname"><a href="classJson_1_1Value.html">Json::Value</a></div><div class="ttdoc">Represents a JSON value.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8h_source.html#l00130">json_value.h:131</a></div></div>
|
||||
<div class="ttc" id="aclassJson_1_1Value_html_a614d635bc248a592593feb322cd15ab8"><div class="ttname"><a href="classJson_1_1Value.html#a614d635bc248a592593feb322cd15ab8">Json::Value::asInt</a></div><div class="ttdeci">Int asInt() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00507">json_value.cpp:507</a></div></div>
|
||||
<div class="ttc" id="aclassJson_1_1Value_html_a71e1f82cf1c3eaf969d400dcffb163a6"><div class="ttname"><a href="classJson_1_1Value.html#a71e1f82cf1c3eaf969d400dcffb163a6">Json::Value::isString</a></div><div class="ttdeci">bool isString() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01109">json_value.cpp:1109</a></div></div>
|
||||
<div class="ttc" id="aclassJson_1_1Value_html_a8cf96c0f2a552051fcfc78ffee60e037"><div class="ttname"><a href="classJson_1_1Value.html#a8cf96c0f2a552051fcfc78ffee60e037">Json::Value::isObject</a></div><div class="ttdeci">bool isObject() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01127">json_value.cpp:1127</a></div></div>
|
||||
<div class="ttc" id="aclassJson_1_1Value_html_a71e1f82cf1c3eaf969d400dcffb163a6"><div class="ttname"><a href="classJson_1_1Value.html#a71e1f82cf1c3eaf969d400dcffb163a6">Json::Value::isString</a></div><div class="ttdeci">bool isString() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01115">json_value.cpp:1115</a></div></div>
|
||||
<div class="ttc" id="aclassJson_1_1Value_html_a8cf96c0f2a552051fcfc78ffee60e037"><div class="ttname"><a href="classJson_1_1Value.html#a8cf96c0f2a552051fcfc78ffee60e037">Json::Value::isObject</a></div><div class="ttdeci">bool isObject() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01133">json_value.cpp:1133</a></div></div>
|
||||
<div class="ttc" id="aclassJson_1_1Value_html_a9c9ee172f3387d37d5382d991c591219"><div class="ttname"><a href="classJson_1_1Value.html#a9c9ee172f3387d37d5382d991c591219">Json::Value::removeMember</a></div><div class="ttdeci">Value removeMember(char const *key)</div><div class="ttdoc">Remove and return the named member.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01003">json_value.cpp:1003</a></div></div>
|
||||
<div class="ttc" id="aclassJson_1_1Value_html_ab0d86bf425efefd03513e8dbfaca317b"><div class="ttname"><a href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">Json::Value::asString</a></div><div class="ttdeci">std::string asString() const</div><div class="ttdoc">Returns the unquoted string value.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00471">json_value.cpp:471</a></div></div>
|
||||
<div class="ttc" id="aclassJson_1_1Value_html_ab693fb7b9b1595bb0adc49658bbf780d"><div class="ttname"><a href="classJson_1_1Value.html#ab693fb7b9b1595bb0adc49658bbf780d">Json::Value::asBool</a></div><div class="ttdeci">bool asBool() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00692">json_value.cpp:692</a></div></div>
|
||||
@@ -1621,8 +1625,8 @@ $(document).ready(function() { init_codefold(0); });
|
||||
<div class="ttc" id="aclassripple_1_1Config_html_a55cd8ef67ffbf6a137e0dd71bc8151c6"><div class="ttname"><a href="classripple_1_1Config.html#a55cd8ef67ffbf6a137e0dd71bc8151c6">ripple::Config::standalone</a></div><div class="ttdeci">bool standalone() const</div><div class="ttdef"><b>Definition</b> <a href="Config_8h_source.html#l00317">Config.h:317</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1Config_html_a60e194c37b2e6e2a6cbaab170579fd15"><div class="ttname"><a href="classripple_1_1Config.html#a60e194c37b2e6e2a6cbaab170579fd15">ripple::Config::BETA_RPC_API</a></div><div class="ttdeci">bool BETA_RPC_API</div><div class="ttdef"><b>Definition</b> <a href="Config_8h_source.html#l00268">Config.h:268</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1Config_html_ac186cbb607c1417144a54b8bd7280423"><div class="ttname"><a href="classripple_1_1Config.html#ac186cbb607c1417144a54b8bd7280423">ripple::Config::FEES</a></div><div class="ttdeci">FeeSetup FEES</div><div class="ttdef"><b>Definition</b> <a href="Config_8h_source.html#l00185">Config.h:185</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1InnerObjectFormats_html_a5d946acc2637ba9031007888980c3764"><div class="ttname"><a href="classripple_1_1InnerObjectFormats.html#a5d946acc2637ba9031007888980c3764">ripple::InnerObjectFormats::findSOTemplateBySField</a></div><div class="ttdeci">SOTemplate const * findSOTemplateBySField(SField const &sField) const</div><div class="ttdef"><b>Definition</b> <a href="InnerObjectFormats_8cpp_source.html#l00166">InnerObjectFormats.cpp:166</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1InnerObjectFormats_html_ac8a2a46e333d5db2ecaff032e3eacc2f"><div class="ttname"><a href="classripple_1_1InnerObjectFormats.html#ac8a2a46e333d5db2ecaff032e3eacc2f">ripple::InnerObjectFormats::getInstance</a></div><div class="ttdeci">static InnerObjectFormats const & getInstance()</div><div class="ttdef"><b>Definition</b> <a href="InnerObjectFormats_8cpp_source.html#l00159">InnerObjectFormats.cpp:159</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1InnerObjectFormats_html_a5d946acc2637ba9031007888980c3764"><div class="ttname"><a href="classripple_1_1InnerObjectFormats.html#a5d946acc2637ba9031007888980c3764">ripple::InnerObjectFormats::findSOTemplateBySField</a></div><div class="ttdeci">SOTemplate const * findSOTemplateBySField(SField const &sField) const</div><div class="ttdef"><b>Definition</b> <a href="InnerObjectFormats_8cpp_source.html#l00174">InnerObjectFormats.cpp:174</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1InnerObjectFormats_html_ac8a2a46e333d5db2ecaff032e3eacc2f"><div class="ttname"><a href="classripple_1_1InnerObjectFormats.html#ac8a2a46e333d5db2ecaff032e3eacc2f">ripple::InnerObjectFormats::getInstance</a></div><div class="ttdeci">static InnerObjectFormats const & getInstance()</div><div class="ttdef"><b>Definition</b> <a href="InnerObjectFormats_8cpp_source.html#l00167">InnerObjectFormats.cpp:167</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1Issue_html_a46e4805870b1bad6a8691bed0b8acec8"><div class="ttname"><a href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">ripple::Issue::account</a></div><div class="ttdeci">AccountID account</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00017">Issue.h:17</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1Issue_html_a4b723aa4198e4c630e41de06586e2fe7"><div class="ttname"><a href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">ripple::Issue::currency</a></div><div class="ttdeci">Currency currency</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00016">Issue.h:16</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1LoadFeeTrack_html"><div class="ttname"><a href="classripple_1_1LoadFeeTrack.html">ripple::LoadFeeTrack</a></div><div class="ttdoc">Manages the current fee schedule.</div><div class="ttdef"><b>Definition</b> <a href="LoadFeeTrack_8h_source.html#l00025">LoadFeeTrack.h:26</a></div></div>
|
||||
@@ -1660,12 +1664,11 @@ $(document).ready(function() { init_codefold(0); });
|
||||
<div class="ttc" id="aclassripple_1_1Rules_html"><div class="ttname"><a href="classripple_1_1Rules.html">ripple::Rules</a></div><div class="ttdoc">Rules controlling protocol behavior.</div><div class="ttdef"><b>Definition</b> <a href="Rules_8h_source.html#l00018">Rules.h:19</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SField_html_ac50e95825ecf10dfd786cb9b8da4ae39"><div class="ttname"><a href="classripple_1_1SField.html#ac50e95825ecf10dfd786cb9b8da4ae39">ripple::SField::getField</a></div><div class="ttdeci">static SField const & getField(int fieldCode)</div><div class="ttdef"><b>Definition</b> <a href="SField_8cpp_source.html#l00116">SField.cpp:116</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STAmount_html"><div class="ttname"><a href="classripple_1_1STAmount.html">ripple::STAmount</a></div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00030">STAmount.h:31</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STAmount_html_a003e773c6fd61536760b0efc262e9725"><div class="ttname"><a href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">ripple::STAmount::holds</a></div><div class="ttdeci">constexpr bool holds() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00446">STAmount.h:446</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STAmount_html_a532cc28fd8b3d99c5de749e7e78fd08d"><div class="ttname"><a href="classripple_1_1STAmount.html#a532cc28fd8b3d99c5de749e7e78fd08d">ripple::STAmount::setIssuer</a></div><div class="ttdeci">void setIssuer(AccountID const &uIssuer)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00569">STAmount.h:569</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STAmount_html_acab76380a95d902071fd26ab3425bbe5"><div class="ttname"><a href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">ripple::STAmount::issue</a></div><div class="ttdeci">Issue const & issue() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00477">STAmount.h:477</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STAmount_html_af3a02d7e9cd0b11509a90e0e6980bd64"><div class="ttname"><a href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">ripple::STAmount::native</a></div><div class="ttdeci">bool native() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00439">STAmount.h:439</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STAmount_html_a532cc28fd8b3d99c5de749e7e78fd08d"><div class="ttname"><a href="classripple_1_1STAmount.html#a532cc28fd8b3d99c5de749e7e78fd08d">ripple::STAmount::setIssuer</a></div><div class="ttdeci">void setIssuer(AccountID const &uIssuer)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00580">STAmount.h:580</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STAmount_html_acab76380a95d902071fd26ab3425bbe5"><div class="ttname"><a href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">ripple::STAmount::issue</a></div><div class="ttdeci">Issue const & issue() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00488">STAmount.h:488</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STAmount_html_af3a02d7e9cd0b11509a90e0e6980bd64"><div class="ttname"><a href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">ripple::STAmount::native</a></div><div class="ttdeci">bool native() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00450">STAmount.h:450</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STArray_html"><div class="ttname"><a href="classripple_1_1STArray.html">ripple::STArray</a></div><div class="ttdef"><b>Definition</b> <a href="STArray_8h_source.html#l00009">STArray.h:10</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STObject_1_1FieldErr_html"><div class="ttname"><a href="classripple_1_1STObject_1_1FieldErr.html">ripple::STObject::FieldErr</a></div><div class="ttdef"><b>Definition</b> <a href="STObject_8h_source.html#l00673">STObject.h:674</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STObject_1_1FieldErr_html"><div class="ttname"><a href="classripple_1_1STObject_1_1FieldErr.html">ripple::STObject::FieldErr</a></div><div class="ttdef"><b>Definition</b> <a href="STObject_8h_source.html#l00696">STObject.h:697</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STObject_html"><div class="ttname"><a href="classripple_1_1STObject.html">ripple::STObject</a></div><div class="ttdef"><b>Definition</b> <a href="STObject_8h_source.html#l00037">STObject.h:38</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STObject_html_a2be037301806856f4b202cabc53d5e0a"><div class="ttname"><a href="classripple_1_1STObject.html#a2be037301806856f4b202cabc53d5e0a">ripple::STObject::setFieldArray</a></div><div class="ttdeci">void setFieldArray(SField const &field, STArray const &v)</div><div class="ttdef"><b>Definition</b> <a href="STObject_8cpp_source.html#l00822">STObject.cpp:822</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1STObject_html_a649f361b3f9994fb28953efb9cf3a6b7"><div class="ttname"><a href="classripple_1_1STObject.html#a649f361b3f9994fb28953efb9cf3a6b7">ripple::STObject::peekFieldObject</a></div><div class="ttdeci">STObject & peekFieldObject(SField const &field)</div><div class="ttdef"><b>Definition</b> <a href="STObject_8cpp_source.html#l00476">STObject.cpp:476</a></div></div>
|
||||
@@ -1713,11 +1716,11 @@ $(document).ready(function() { init_codefold(0); });
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_1_1detail_html_a5243c8f203b40c3b2cedf27af29f7218"><div class="ttname"><a href="namespaceripple_1_1RPC_1_1detail.html#a5243c8f203b40c3b2cedf27af29f7218">ripple::RPC::detail::transactionPreProcessImpl</a></div><div class="ttdeci">static transactionPreProcessResult transactionPreProcessImpl(Json::Value &params, Role role, SigningForParams &signingArgs, std::chrono::seconds validatedLedgerAge, Application &app)</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l00405">TransactionSign.cpp:405</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_1_1detail_html_a6c387f430610b0d1439dd16f4e5a2da1"><div class="ttname"><a href="namespaceripple_1_1RPC_1_1detail.html#a6c387f430610b0d1439dd16f4e5a2da1">ripple::RPC::detail::transactionConstructImpl</a></div><div class="ttdeci">static std::pair< Json::Value, Transaction::pointer > transactionConstructImpl(std::shared_ptr< STTx const > const &stTx, Rules const &rules, Application &app)</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l00670">TransactionSign.cpp:670</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_1_1detail_html_a9951e7bcb8c906eb76608e94b1f56320"><div class="ttname"><a href="namespaceripple_1_1RPC_1_1detail.html#a9951e7bcb8c906eb76608e94b1f56320">ripple::RPC::detail::checkMultiSignFields</a></div><div class="ttdeci">static Json::Value checkMultiSignFields(Json::Value const &jvRequest)</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l01062">TransactionSign.cpp:1062</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_1_1detail_html_ae55247d02759e159363f3e9e370eee81"><div class="ttname"><a href="namespaceripple_1_1RPC_1_1detail.html#ae55247d02759e159363f3e9e370eee81">ripple::RPC::detail::sortAndValidateSigners</a></div><div class="ttdeci">static Json::Value sortAndValidateSigners(STArray &signers, AccountID const &signingForID)</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l01093">TransactionSign.cpp:1093</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_1_1detail_html_ae55247d02759e159363f3e9e370eee81"><div class="ttname"><a href="namespaceripple_1_1RPC_1_1detail.html#ae55247d02759e159363f3e9e370eee81">ripple::RPC::detail::sortAndValidateSigners</a></div><div class="ttdeci">static Json::Value sortAndValidateSigners(STArray &signers, AccountID const &signingForID)</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l01097">TransactionSign.cpp:1097</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_1_1detail_html_af4dc49eb0a127a2e10548647378fea74"><div class="ttname"><a href="namespaceripple_1_1RPC_1_1detail.html#af4dc49eb0a127a2e10548647378fea74">ripple::RPC::detail::transactionFormatResultImpl</a></div><div class="ttdeci">static Json::Value transactionFormatResultImpl(Transaction::pointer tpTrans, unsigned apiVersion)</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l00748">TransactionSign.cpp:748</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_a0e52076e77d0078231dda289f8048200"><div class="ttname"><a href="namespaceripple_1_1RPC.html#a0e52076e77d0078231dda289f8048200">ripple::RPC::transactionSign</a></div><div class="ttdeci">Json::Value transactionSign(Json::Value jvRequest, unsigned apiVersion, NetworkOPs::FailHard failType, Role role, std::chrono::seconds validatedLedgerAge, Application &app)</div><div class="ttdoc">Returns a Json::objectValue.</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l00979">TransactionSign.cpp:979</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_a1a79f0c33d1405fe85c40d63a49658bd"><div class="ttname"><a href="namespaceripple_1_1RPC.html#a1a79f0c33d1405fe85c40d63a49658bd">ripple::RPC::contains_error</a></div><div class="ttdeci">bool contains_error(Json::Value const &json)</div><div class="ttdoc">Returns true if the json contains an rpc error specification.</div><div class="ttdef"><b>Definition</b> <a href="ErrorCodes_8cpp_source.html#l00188">ErrorCodes.cpp:188</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_a1aaebf843616a5dd8eacb3c5e7af9540"><div class="ttname"><a href="namespaceripple_1_1RPC.html#a1aaebf843616a5dd8eacb3c5e7af9540">ripple::RPC::transactionSubmitMultiSigned</a></div><div class="ttdeci">Json::Value transactionSubmitMultiSigned(Json::Value jvRequest, unsigned apiVersion, NetworkOPs::FailHard failType, Role role, std::chrono::seconds validatedLedgerAge, Application &app, ProcessTransactionFn const &processTransaction)</div><div class="ttdoc">Returns a Json::objectValue.</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l01259">TransactionSign.cpp:1259</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_a1aaebf843616a5dd8eacb3c5e7af9540"><div class="ttname"><a href="namespaceripple_1_1RPC.html#a1aaebf843616a5dd8eacb3c5e7af9540">ripple::RPC::transactionSubmitMultiSigned</a></div><div class="ttdeci">Json::Value transactionSubmitMultiSigned(Json::Value jvRequest, unsigned apiVersion, NetworkOPs::FailHard failType, Role role, std::chrono::seconds validatedLedgerAge, Application &app, ProcessTransactionFn const &processTransaction)</div><div class="ttdoc">Returns a Json::objectValue.</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l01263">TransactionSign.cpp:1263</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_a2cd6200f6709780fcf1dd26ec9cd2866"><div class="ttname"><a href="namespaceripple_1_1RPC.html#a2cd6200f6709780fcf1dd26ec9cd2866">ripple::RPC::make_error</a></div><div class="ttdeci">Json::Value make_error(error_code_i code)</div><div class="ttdoc">Returns a new json object that reflects the error code.</div><div class="ttdef"><b>Definition</b> <a href="ErrorCodes_8cpp_source.html#l00172">ErrorCodes.cpp:172</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_a3f2a31e585bbecb3af3740d34d7df15f"><div class="ttname"><a href="namespaceripple_1_1RPC.html#a3f2a31e585bbecb3af3740d34d7df15f">ripple::RPC::invalid_field_error</a></div><div class="ttdeci">Json::Value invalid_field_error(std::string const &name)</div><div class="ttdef"><b>Definition</b> <a href="ErrorCodes_8h_source.html#l00306">ErrorCodes.h:306</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_a47dbdaa21d9c40b369424e671ccd7e20"><div class="ttname"><a href="namespaceripple_1_1RPC.html#a47dbdaa21d9c40b369424e671ccd7e20">ripple::RPC::apiVersion</a></div><div class="ttdeci">static constexpr std::integral_constant< unsigned, Version > apiVersion</div><div class="ttdef"><b>Definition</b> <a href="ApiVersion_8h_source.html#l00039">ApiVersion.h:39</a></div></div>
|
||||
@@ -1730,12 +1733,12 @@ $(document).ready(function() { init_codefold(0); });
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_a8bcdcd479ba5ba7f8975e344393ec03a"><div class="ttname"><a href="namespaceripple_1_1RPC.html#a8bcdcd479ba5ba7f8975e344393ec03a">ripple::RPC::getTxFee</a></div><div class="ttdeci">static XRPAmount getTxFee(Application const &app, Config const &config, Json::Value tx)</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l00795">TransactionSign.cpp:795</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_a97b09da785b1944b7b1964eeff97a43b"><div class="ttname"><a href="namespaceripple_1_1RPC.html#a97b09da785b1944b7b1964eeff97a43b">ripple::RPC::object_field_error</a></div><div class="ttdeci">Json::Value object_field_error(std::string const &name)</div><div class="ttdef"><b>Definition</b> <a href="ErrorCodes_8h_source.html#l00282">ErrorCodes.h:282</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_abf346555d1927183974ae3feef4a25ec"><div class="ttname"><a href="namespaceripple_1_1RPC.html#abf346555d1927183974ae3feef4a25ec">ripple::RPC::insertDeliverMax</a></div><div class="ttdeci">void insertDeliverMax(Json::Value &tx_json, TxType txnType, unsigned int apiVersion)</div><div class="ttdoc">Copy Amount field to DeliverMax field in transaction output JSON.</div><div class="ttdef"><b>Definition</b> <a href="DeliverMax_8cpp_source.html#l00009">DeliverMax.cpp:9</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_aced54d69612c2b58940e2132e905dfc6"><div class="ttname"><a href="namespaceripple_1_1RPC.html#aced54d69612c2b58940e2132e905dfc6">ripple::RPC::transactionSignFor</a></div><div class="ttdeci">Json::Value transactionSignFor(Json::Value jvRequest, unsigned apiVersion, NetworkOPs::FailHard failType, Role role, std::chrono::seconds validatedLedgerAge, Application &app)</div><div class="ttdoc">Returns a Json::objectValue.</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l01143">TransactionSign.cpp:1143</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_aced54d69612c2b58940e2132e905dfc6"><div class="ttname"><a href="namespaceripple_1_1RPC.html#aced54d69612c2b58940e2132e905dfc6">ripple::RPC::transactionSignFor</a></div><div class="ttdeci">Json::Value transactionSignFor(Json::Value jvRequest, unsigned apiVersion, NetworkOPs::FailHard failType, Role role, std::chrono::seconds validatedLedgerAge, Application &app)</div><div class="ttdoc">Returns a Json::objectValue.</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l01147">TransactionSign.cpp:1147</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_ad8fbfe3fd4651227fd4df999f60921d6"><div class="ttname"><a href="namespaceripple_1_1RPC.html#ad8fbfe3fd4651227fd4df999f60921d6">ripple::RPC::getAPIVersionNumber</a></div><div class="ttdeci">unsigned int getAPIVersionNumber(Json::Value const &jv, bool betaEnabled)</div><div class="ttdoc">Retrieve the api version number from the json value.</div><div class="ttdef"><b>Definition</b> <a href="ApiVersion_8h_source.html#l00104">ApiVersion.h:104</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_adf952f7ca5d0d26e982a92acce6bf937"><div class="ttname"><a href="namespaceripple_1_1RPC.html#adf952f7ca5d0d26e982a92acce6bf937">ripple::RPC::checkFee</a></div><div class="ttdeci">Json::Value checkFee(Json::Value &request, Role const role, bool doAutoFill, Config const &config, LoadFeeTrack const &feeTrack, TxQ const &txQ, Application const &app)</div><div class="ttdoc">Fill in the fee on behalf of the client.</div><div class="ttdef"><b>Definition</b> <a href="TransactionSign_8cpp_source.html#l00910">TransactionSign.cpp:910</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_aec2e1163b39a450d3917af9dd15b0f06"><div class="ttname"><a href="namespaceripple_1_1RPC.html#aec2e1163b39a450d3917af9dd15b0f06">ripple::RPC::missing_field_error</a></div><div class="ttdeci">Json::Value missing_field_error(std::string const &name)</div><div class="ttdef"><b>Definition</b> <a href="ErrorCodes_8h_source.html#l00264">ErrorCodes.h:264</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1RPC_html_af894bdbf60a077993d884fd31cf6e694"><div class="ttname"><a href="namespaceripple_1_1RPC.html#af894bdbf60a077993d884fd31cf6e694">ripple::RPC::keypairForSignature</a></div><div class="ttdeci">std::optional< std::pair< PublicKey, SecretKey > > keypairForSignature(Json::Value const &params, Json::Value &error, unsigned int apiVersion)</div><div class="ttdef"><b>Definition</b> <a href="RPCHelpers_8cpp_source.html#l00278">RPCHelpers.cpp:278</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1keylet_html_aa756e0f59b26042ed00a4d0ba6e96951"><div class="ttname"><a href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">ripple::keylet::account</a></div><div class="ttdeci">Keylet account(AccountID const &id) noexcept</div><div class="ttdoc">AccountID root.</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00165">Indexes.cpp:165</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_1_1keylet_html_aa756e0f59b26042ed00a4d0ba6e96951"><div class="ttname"><a href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">ripple::keylet::account</a></div><div class="ttdeci">Keylet account(AccountID const &id) noexcept</div><div class="ttdoc">AccountID root.</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00167">Indexes.cpp:167</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html"><div class="ttname"><a href="namespaceripple.html">ripple</a></div><div class="ttdoc">Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.</div><div class="ttdef"><b>Definition</b> <a href="algorithm_8h_source.html#l00006">algorithm.h:6</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a08a13b62b18272366f788632359e8793"><div class="ttname"><a href="namespaceripple.html#a08a13b62b18272366f788632359e8793">ripple::toBase58</a></div><div class="ttdeci">std::string toBase58(AccountID const &v)</div><div class="ttdoc">Convert AccountID to base58 checked string.</div><div class="ttdef"><b>Definition</b> <a href="AccountID_8cpp_source.html#l00095">AccountID.cpp:95</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a239d2626985d5fd4c57e22c12e6fb55e"><div class="ttname"><a href="namespaceripple.html#a239d2626985d5fd4c57e22c12e6fb55e">ripple::verify</a></div><div class="ttdeci">bool verify(PublicKey const &publicKey, Slice const &m, Slice const &sig) noexcept</div><div class="ttdoc">Verify a signature on a message.</div><div class="ttdef"><b>Definition</b> <a href="PublicKey_8cpp_source.html#l00270">PublicKey.cpp:270</a></div></div>
|
||||
@@ -1760,7 +1763,7 @@ $(document).ready(function() { init_codefold(0); });
|
||||
<div class="ttc" id="anamespaceripple_html_a32d6d3ce1a48272b677d2c88b1d30932afff1867365ccf8f1661c8d796c93ef4c"><div class="ttname"><a href="namespaceripple.html#a32d6d3ce1a48272b677d2c88b1d30932afff1867365ccf8f1661c8d796c93ef4c">ripple::rpcSRC_ACT_MISSING</a></div><div class="ttdeci">@ rpcSRC_ACT_MISSING</div><div class="ttdef"><b>Definition</b> <a href="ErrorCodes_8h_source.html#l00102">ErrorCodes.h:102</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a3bb99b88cdf3f0a2cc944c5daeaf00b6"><div class="ttname"><a href="namespaceripple.html#a3bb99b88cdf3f0a2cc944c5daeaf00b6">ripple::buildMultiSigningData</a></div><div class="ttdeci">Serializer buildMultiSigningData(STObject const &obj, AccountID const &signingID)</div><div class="ttdoc">Return a Serializer suitable for computing a multisigning TxnSignature.</div><div class="ttdef"><b>Definition</b> <a href="Sign_8cpp_source.html#l00077">Sign.cpp:77</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a3deb4c69ca598c60e6502a3be527835e"><div class="ttname"><a href="namespaceripple.html#a3deb4c69ca598c60e6502a3be527835e">ripple::calculateBaseFee</a></div><div class="ttdeci">XRPAmount calculateBaseFee(ReadView const &view, STTx const &tx)</div><div class="ttdoc">Compute only the expected base fee for a transaction.</div><div class="ttdef"><b>Definition</b> <a href="applySteps_8cpp_source.html#l00387">applySteps.cpp:387</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a3e312ecdb199409dca142d307a3e0e5b"><div class="ttname"><a href="namespaceripple.html#a3e312ecdb199409dca142d307a3e0e5b">ripple::isLegalNet</a></div><div class="ttdeci">bool isLegalNet(STAmount const &value)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00581">STAmount.h:581</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a3e312ecdb199409dca142d307a3e0e5b"><div class="ttname"><a href="namespaceripple.html#a3e312ecdb199409dca142d307a3e0e5b">ripple::isLegalNet</a></div><div class="ttdeci">bool isLegalNet(STAmount const &value)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00592">STAmount.h:592</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a4a9c7b33fef9015d6406302ef80b63c5a74277ce2a45a0b253c18a4aa3c57b7c7"><div class="ttname"><a href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5a74277ce2a45a0b253c18a4aa3c57b7c7">ripple::lsfDisableMaster</a></div><div class="ttdeci">@ lsfDisableMaster</div><div class="ttdef"><b>Definition</b> <a href="LedgerFormats_8h_source.html#l00112">LedgerFormats.h:112</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a614d8681c8dff84ac2257939751987c5"><div class="ttname"><a href="namespaceripple.html#a614d8681c8dff84ac2257939751987c5">ripple::calcAccountID</a></div><div class="ttdeci">AccountID calcAccountID(PublicKey const &pk)</div><div class="ttdef"><b>Definition</b> <a href="AccountID_8cpp_source.html#l00149">AccountID.cpp:149</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a67869382f83fd55cf3096d2591a57b07"><div class="ttname"><a href="namespaceripple.html#a67869382f83fd55cf3096d2591a57b07">ripple::rpcError</a></div><div class="ttdeci">Json::Value rpcError(int iError)</div><div class="ttdef"><b>Definition</b> <a href="RPCErr_8cpp_source.html#l00012">RPCErr.cpp:12</a></div></div>
|
||||
@@ -1768,9 +1771,9 @@ $(document).ready(function() { init_codefold(0); });
|
||||
<div class="ttc" id="anamespaceripple_html_a72ab42f87d2351b89ba8f47f5cfa70ba"><div class="ttname"><a href="namespaceripple.html#a72ab42f87d2351b89ba8f47f5cfa70ba">ripple::sign</a></div><div class="ttdeci">Buffer sign(PublicKey const &pk, SecretKey const &sk, Slice const &message)</div><div class="ttdoc">Generate a signature for a message.</div><div class="ttdef"><b>Definition</b> <a href="SecretKey_8cpp_source.html#l00237">SecretKey.cpp:237</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a86e358ce3f06ff049af13c2342791cf8"><div class="ttname"><a href="namespaceripple.html#a86e358ce3f06ff049af13c2342791cf8">ripple::strHex</a></div><div class="ttdeci">std::string strHex(FwdIt begin, FwdIt end)</div><div class="ttdef"><b>Definition</b> <a href="strHex_8h_source.html#l00011">strHex.h:11</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a93f2333b362ee67694b78f55eadf7805"><div class="ttname"><a href="namespaceripple.html#a93f2333b362ee67694b78f55eadf7805">ripple::makeSlice</a></div><div class="ttdeci">std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)</div><div class="ttdef"><b>Definition</b> <a href="Slice_8h_source.html#l00225">Slice.h:225</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aa9cb2090c47c4d84b469ae634cdfdc59"><div class="ttname"><a href="namespaceripple.html#aa9cb2090c47c4d84b469ae634cdfdc59">ripple::amountFromJsonNoThrow</a></div><div class="ttdeci">bool amountFromJsonNoThrow(STAmount &result, Json::Value const &jvSource)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01115">STAmount.cpp:1115</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aa9cb2090c47c4d84b469ae634cdfdc59"><div class="ttname"><a href="namespaceripple.html#aa9cb2090c47c4d84b469ae634cdfdc59">ripple::amountFromJsonNoThrow</a></div><div class="ttdeci">bool amountFromJsonNoThrow(STAmount &result, Json::Value const &jvSource)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01117">STAmount.cpp:1117</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_ab5fadc2b2814a10d35c00c0a8241fbe7"><div class="ttname"><a href="namespaceripple.html#ab5fadc2b2814a10d35c00c0a8241fbe7">ripple::forceValidity</a></div><div class="ttdeci">void forceValidity(HashRouter &router, uint256 const &txid, Validity validity)</div><div class="ttdoc">Sets the validity of a given transaction in the cache.</div><div class="ttdef"><b>Definition</b> <a href="apply_8cpp_source.html#l00093">apply.cpp:93</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_abc101b438834a6b2d730bbd63fe03b74"><div class="ttname"><a href="namespaceripple.html#abc101b438834a6b2d730bbd63fe03b74">ripple::passesLocalChecks</a></div><div class="ttdeci">bool passesLocalChecks(STObject const &st, std::string &)</div><div class="ttdef"><b>Definition</b> <a href="STTx_8cpp_source.html#l00774">STTx.cpp:774</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_abc101b438834a6b2d730bbd63fe03b74"><div class="ttname"><a href="namespaceripple.html#abc101b438834a6b2d730bbd63fe03b74">ripple::passesLocalChecks</a></div><div class="ttdeci">bool passesLocalChecks(STObject const &st, std::string &)</div><div class="ttdef"><b>Definition</b> <a href="STTx_8cpp_source.html#l00771">STTx.cpp:771</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_abcad59b0151763334cc398263373bcdda3ac705f2acd51a4613f9188c05c91d0d"><div class="ttname"><a href="namespaceripple.html#abcad59b0151763334cc398263373bcdda3ac705f2acd51a4613f9188c05c91d0d">ripple::Validity::Valid</a></div><div class="ttdeci">@ Valid</div><div class="ttdoc">Signature and local checks are good / passed.</div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_abcad59b0151763334cc398263373bcdda5ef9dd0687717427ebe8c5e3bcfb7ec1"><div class="ttname"><a href="namespaceripple.html#abcad59b0151763334cc398263373bcdda5ef9dd0687717427ebe8c5e3bcfb7ec1">ripple::Validity::SigGoodOnly</a></div><div class="ttdeci">@ SigGoodOnly</div><div class="ttdoc">Signature is good, but local checks fail.</div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_ac124fe6744b7fe887dec949b56b16d50"><div class="ttname"><a href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">ripple::to_string</a></div><div class="ttdeci">std::string to_string(base_uint< Bits, Tag > const &a)</div><div class="ttdef"><b>Definition</b> <a href="base__uint_8h_source.html#l00611">base_uint.h:611</a></div></div>
|
||||
|
||||
Reference in New Issue
Block a user