What changed, and why it matters
This commit only updates the text shown by the help command for several RPC (remote procedure call) interfaces. It corrects descriptions, marks some fields as optional, and documents newer parameters such as asset labels, peg-in inputs, and blinded transaction fields. There are no code logic changes that affect how the software processes commands or secures funds.
No security action required; this is a documentation-only change. Routine review/merge is sufficient.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff is entirely within RPCHelpMan/RPCHelpMan-style documentation blocks in src/rpc/mining.cpp, src/rpc/rawtransaction.cpp, and several wallet RPC files. Changes include: correcting getblocktemplate template_request fields; fixing CreateTxDoc vdata type from STR_HEX to ARR of STR_HEX and burn type to AMOUNT; adding optional flags and correcting types in decodepsbt PSET results; updating optional/required flags for importmulti descriptors; marking listunspent commitment fields optional; documenting new send/walletcreatefundedpsbt output types (vdata, burn, fee) and pegin/issuance input options; and adding amountblinder/asset/assetblinder to listtransactions/listsinceblock/gettransaction result docs. No parsing, validation, wallet, or consensus code is modified.
Changed components
RPC help documentationInspect captured patch +132 / −71
diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp
index 8b298a7..53d7554 100644
--- a/src/rpc/mining.cpp
+++ b/src/rpc/mining.cpp
@@ -556,11 +556,10 @@ static RPCHelpMan getblocktemplate()
{"template_request", RPCArg::Type::OBJ, RPCArg::Default{UniValue::VOBJ}, "Format of the template",
{
{"mode", RPCArg::Type::STR, /* treat as named arg */ RPCArg::Optional::OMITTED_NAMED_ARG, "This must be set to \"template\", \"proposal\" (see BIP 23), or omitted"},
- {"capabilities", RPCArg::Type::ARR, /* treat as named arg */ RPCArg::Optional::OMITTED_NAMED_ARG, "A list of strings",
- {
- {"str", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "client side supported feature, 'longpoll', 'coinbasevalue', 'proposal', 'serverlist', 'workid'"},
- }},
- {"rules", RPCArg::Type::ARR, RPCArg::Optional::NO, "A list of strings",
+ {"longpollid", RPCArg::Type::STR, RPCArg::Optional::OMITTED_NAMED_ARG, "The longpollid from a previous template to wait for an update"},
+ {"data", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED_NAMED_ARG, "The hex-encoded block data to validate when mode is \"proposal\" (see BIP 23)"},
+ {"maxversion", RPCArg::Type::NUM, RPCArg::Optional::OMITTED_NAMED_ARG, "Legacy maximum block version. Used only when \"rules\" is not provided"},
+ {"rules", RPCArg::Type::ARR, RPCArg::Optional::OMITTED_NAMED_ARG, "A list of strings",
{
{"segwit", RPCArg::Type::STR, RPCArg::Optional::NO, "(literal) indicates client side segwit support"},
{"str", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "other client side supported softfork deployment"},
diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp
index dc7642b..65e47e2 100644
--- a/src/rpc/rawtransaction.cpp
+++ b/src/rpc/rawtransaction.cpp
@@ -126,12 +126,15 @@ static std::vector<RPCArg> CreateTxDoc()
},
{"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
{
- {"vdata", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The key is \"vdata\", the value is an array of hex encoded data"},
+ {"vdata", RPCArg::Type::ARR, RPCArg::Optional::NO, "The key is \"vdata\", the value is an array of hex encoded data",
+ {
+ {"", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, "Hex-encoded data"},
+ }},
},
},
{"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
{
- {"burn", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "A key-value pair. The key must be \"burn\", the value is the amount that will be burned."},
+ {"burn", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "A key-value pair. The key must be \"burn\", the value is the amount that will be burned."},
},
},
{"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
@@ -1230,21 +1233,21 @@ static RPCHelpMan decodepsbt()
{RPCResult::Type::STR, "path", "The path"},
}},
}},
- {RPCResult::Type::NUM, "tx_version", "The version number of the unsigned transaction. Not to be confused with PSBT version"},
- {RPCResult::Type::NUM, "fallback_locktime", "The locktime to fallback to if no inputs specify a required locktime."},
- {RPCResult::Type::NUM, "input_count", "The number of inputs in this psbt"},
- {RPCResult::Type::NUM, "output_count", "The number of outputs in this psbt."},
- {RPCResult::Type::NUM, "inputs_modifiable", "Whether inputs can be modified"},
- {RPCResult::Type::NUM, "outputs_modifiable", "Whether outputs can be modified"},
- {RPCResult::Type::ARR, "sighash_single_indexes", "The indexes which have SIGHASH_SINGLE signatures",
+ {RPCResult::Type::NUM, "tx_version", /*optional=*/true, "The version number of the unsigned transaction. Not to be confused with PSBT version"},
+ {RPCResult::Type::NUM, "fallback_locktime", /*optional=*/true, "The locktime to fallback to if no inputs specify a required locktime."},
+ {RPCResult::Type::NUM, "input_count", /*optional=*/true, "The number of inputs in this psbt"},
+ {RPCResult::Type::NUM, "output_count", /*optional=*/true, "The number of outputs in this psbt."},
+ {RPCResult::Type::NUM, "inputs_modifiable", /*optional=*/true, "Whether inputs can be modified"},
+ {RPCResult::Type::NUM, "outputs_modifiable", /*optional=*/true, "Whether outputs can be modified"},
+ {RPCResult::Type::ARR, "sighash_single_indexes", /*optional=*/true, "The indexes which have SIGHASH_SINGLE signatures",
{{RPCResult::Type::NUM, "", "Index of an input with a SIGHASH_SINGLE signature"}},
},
{RPCResult::Type::NUM, "psbt_version", "The PSBT version number. Not to be confused with the unsigned transaction version"},
- {RPCResult::Type::OBJ_DYN, "scalar_offsets", "The PSET scalar elements",
+ {RPCResult::Type::OBJ_DYN, "scalar_offsets", /*optional=*/true, "The PSET scalar elements",
{
{RPCResult::Type::STR_HEX, "scalar", "A scalar offset stored in the PSET"},
}},
- {RPCResult::Type::OBJ, "proprietary", "The global proprietary map",
+ {RPCResult::Type::OBJ, "proprietary", /*optional=*/true, "The global proprietary map",
{
{RPCResult::Type::OBJ, "", "",
{
@@ -1254,7 +1257,7 @@ static RPCHelpMan decodepsbt()
{RPCResult::Type::STR_HEX, "value", "The hex for the value"},
}},
}},
- {RPCResult::Type::OBJ_DYN, "unknown", "The unknown global fields",
+ {RPCResult::Type::OBJ_DYN, "unknown", /*optional=*/true, "The unknown global fields",
{
{RPCResult::Type::STR_HEX, "key", "(key-value pair) An unknown key-value pair"},
}},
@@ -1313,31 +1316,31 @@ static RPCHelpMan decodepsbt()
{
{RPCResult::Type::STR_HEX, "", "hex-encoded witness data (if any)"},
}},
- {RPCResult::Type::STR_HEX, "previous_txid", "TXID of the transaction containing the output being spent by this input."},
- {RPCResult::Type::NUM, "previous_vout", "Index of the output being spent"},
- {RPCResult::Type::NUM, "sequence", "Sequence number for this inputs"},
- {RPCResult::Type::NUM, "time_locktime", "Required time-based locktime for this input"},
- {RPCResult::Type::NUM, "height_locktime", "Required height-based locktime for this input"},
- {RPCResult::Type::NUM, "issuance_value", "The explicit value of the issuance in this input in " + CURRENCY_UNIT},
- {RPCResult::Type::STR_HEX, "issuance_value_commitment", "The commitment of the value of the issuance in this input."},
- {RPCResult::Type::STR_HEX, "issuance_value_rangeproof", "The rangeproof for the value commitment of the issuance in this input."},
- {RPCResult::Type::STR_HEX, "blind_issuance_value_proof", "Explicit value rangeproof that proves the issuance value commitment matches the value"},
- {RPCResult::Type::NUM, "issuance_reissuance_amount", "The explicit amount available for the reissuance output."},
- {RPCResult::Type::STR_HEX, "issuance_reissuance_amount_commitment", "The commitment of the reissuance amount."},
- {RPCResult::Type::STR_HEX, "issuance_reissuance_amount_rangeproof", "The rangeproof for the amount commitment of the reissuance amount."},
- {RPCResult::Type::STR_HEX, "blind_reissuance_amount_proof", "Explicit value rangeproof that proves the reissuance value commitment matches the reissuance value"},
- {RPCResult::Type::STR_HEX, "issuance_blinding_nonce", "The blinding nonce for the issuance in this input."},
- {RPCResult::Type::STR_HEX, "issuance_asset_entropy", "The asset entropy for the issuance in this input."},
- {RPCResult::Type::STR_HEX, "pegin_bitcoin_tx", "The tx providing the peg-in in the format of the getrawtransaction RPC"},
- {RPCResult::Type::STR_HEX, "pegin_claim_script", "The claim script for the peg-in input"},
- {RPCResult::Type::STR_HEX, "pegin_txout_proof", "The tx providing the peg-in input"},
- {RPCResult::Type::STR_HEX, "pegin_genesis_hash", "The hash of the genesis block for this peg-in"},
- {RPCResult::Type::NUM, "pegin_value", "The value of this peg-in."},
- {RPCResult::Type::ARR, "pegin_witness", "",
+ {RPCResult::Type::STR_HEX, "previous_txid", /*optional=*/true, "TXID of the transaction containing the output being spent by this input."},
+ {RPCResult::Type::NUM, "previous_vout", /*optional=*/true, "Index of the output being spent"},
+ {RPCResult::Type::NUM, "sequence", /*optional=*/true, "Sequence number for this inputs"},
+ {RPCResult::Type::NUM, "time_locktime", /*optional=*/true, "Required time-based locktime for this input"},
+ {RPCResult::Type::NUM, "height_locktime", /*optional=*/true, "Required height-based locktime for this input"},
+ {RPCResult::Type::STR_AMOUNT, "issuance_value", /*optional=*/true, "The explicit value of the issuance in this input in " + CURRENCY_UNIT},
+ {RPCResult::Type::STR_HEX, "issuance_value_commitment", /*optional=*/true, "The commitment of the value of the issuance in this input."},
+ {RPCResult::Type::STR_HEX, "issuance_value_rangeproof", /*optional=*/true, "The rangeproof for the value commitment of the issuance in this input."},
+ {RPCResult::Type::STR_HEX, "blind_issuance_value_proof", /*optional=*/true, "Explicit value rangeproof that proves the issuance value commitment matches the value"},
+ {RPCResult::Type::STR_AMOUNT, "issuance_reissuance_amount", /*optional=*/true, "The explicit amount available for the reissuance output."},
+ {RPCResult::Type::STR_HEX, "issuance_reissuance_amount_commitment", /*optional=*/true, "The commitment of the reissuance amount."},
+ {RPCResult::Type::STR_HEX, "issuance_reissuance_amount_rangeproof", /*optional=*/true, "The rangeproof for the amount commitment of the reissuance amount."},
+ {RPCResult::Type::STR_HEX, "blind_reissuance_amount_proof", /*optional=*/true, "Explicit value rangeproof that proves the reissuance value commitment matches the reissuance value"},
+ {RPCResult::Type::STR_HEX, "issuance_blinding_nonce", /*optional=*/true, "The blinding nonce for the issuance in this input."},
+ {RPCResult::Type::STR_HEX, "issuance_asset_entropy", /*optional=*/true, "The asset entropy for the issuance in this input."},
+ {RPCResult::Type::STR_HEX, "pegin_bitcoin_tx", /*optional=*/true, "The tx providing the peg-in in the format of the getrawtransaction RPC"},
+ {RPCResult::Type::STR_HEX, "pegin_claim_script", /*optional=*/true, "The claim script for the peg-in input"},
+ {RPCResult::Type::STR_HEX, "pegin_txout_proof", /*optional=*/true, "The tx providing the peg-in input"},
+ {RPCResult::Type::STR_HEX, "pegin_genesis_hash", /*optional=*/true, "The hash of the genesis block for this peg-in"},
+ {RPCResult::Type::STR_AMOUNT, "pegin_value", /*optional=*/true, "The value of this peg-in."},
+ {RPCResult::Type::ARR, "pegin_witness", /*optional=*/true, "",
{
{RPCResult::Type::STR_HEX, "", "hex-encoded witness data (if any)"},
}},
- {RPCResult::Type::STR_HEX, "utxo_rangeproof", "The rangeproof for the UTXO"},
+ {RPCResult::Type::STR_HEX, "utxo_rangeproof", /*optional=*/true, "The rangeproof for the UTXO"},
{RPCResult::Type::NUM, "explicit_value", /*optional=*/true, "The explicit value for this input"},
{RPCResult::Type::STR_HEX, "value_proof", /*optional=*/true, "The explicit value proof for this input"},
{RPCResult::Type::STR_HEX, "explicit_asset", /*optional=*/true, "The explicit asset for this input"},
@@ -1400,20 +1403,20 @@ static RPCHelpMan decodepsbt()
{RPCResult::Type::STR, "path", "The path"},
}},
}},
- {RPCResult::Type::NUM, "amount", "The amount (nValue) for this output"},
- {RPCResult::Type::OBJ, "script", "The output script (scriptPubKey) for this output",
+ {RPCResult::Type::STR_AMOUNT, "amount", /*optional=*/true, "The amount (nValue) for this output"},
+ {RPCResult::Type::OBJ, "script", /*optional=*/true, "The output script (scriptPubKey) for this output",
{{RPCResult::Type::ELISION, "", "The layout is the same as the output of scriptPubKeys in decoderawtransaction."}},
},
- {RPCResult::Type::STR_HEX, "value_commitment", "The blinded value of the output"},
- {RPCResult::Type::STR_HEX, "asset_commitment", "The blinded asset id of the output"},
- {RPCResult::Type::STR_HEX, "asset", "The explicit asset for the output"},
- {RPCResult::Type::STR_HEX, "rangeproof", "The rangeproof for the output"},
- {RPCResult::Type::STR_HEX, "surjection_proof", "The surjection proof for the output"},
- {RPCResult::Type::STR_HEX, "ecdh_pubkey", "The ecdh pubkey for the output"},
- {RPCResult::Type::STR_HEX, "blinding_pubkey", "The blinding pubkey for the output"},
- {RPCResult::Type::STR_HEX, "blind_value_proof", "Explicit value rangeproof that proves the value commitment matches the value"},
- {RPCResult::Type::STR_HEX, "blind_asset_proof", "Assert surjection proof that proves the assert commitment matches the asset"},
- {RPCResult::Type::STR, "status", "information about how the output has been blinded, if available"},
+ {RPCResult::Type::STR_HEX, "value_commitment", /*optional=*/true, "The blinded value of the output"},
+ {RPCResult::Type::STR_HEX, "asset_commitment", /*optional=*/true, "The blinded asset id of the output"},
+ {RPCResult::Type::STR_HEX, "asset", /*optional=*/true, "The explicit asset for the output"},
+ {RPCResult::Type::STR_HEX, "rangeproof", /*optional=*/true, "The rangeproof for the output"},
+ {RPCResult::Type::STR_HEX, "surjection_proof", /*optional=*/true, "The surjection proof for the output"},
+ {RPCResult::Type::STR_HEX, "ecdh_pubkey", /*optional=*/true, "The ecdh pubkey for the output"},
+ {RPCResult::Type::STR_HEX, "blinding_pubkey", /*optional=*/true, "The blinding pubkey for the output"},
+ {RPCResult::Type::STR_HEX, "blind_value_proof", /*optional=*/true, "Explicit value rangeproof that proves the value commitment matches the value"},
+ {RPCResult::Type::STR_HEX, "blind_asset_proof", /*optional=*/true, "Assert surjection proof that proves the assert commitment matches the asset"},
+ {RPCResult::Type::STR, "status", /*optional=*/true, "information about how the output has been blinded, if available"},
{RPCResult::Type::OBJ_DYN, "unknown", /*optional=*/true, "The unknown global fields",
{
{RPCResult::Type::STR_HEX, "key", "(key-value pair) An unknown key-value pair"},
@@ -1430,7 +1433,10 @@ static RPCHelpMan decodepsbt()
}},
}},
}},
- {RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true, "The transaction fee paid if all UTXOs slots in the PSBT have been filled."},
+ {RPCResult::Type::OBJ_DYN, "fees", /*optional=*/true, "Map of asset id (hex) to fee amount paid in that asset",
+ {
+ {RPCResult::Type::STR_AMOUNT, "xxxx", "fee amount for the asset whose id is the object key (hex-encoded asset id)"},
+ }},
}
},
RPCExamples{
@@ -2157,9 +2163,9 @@ static RPCHelpMan createpsbt()
{"txid", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The transaction id"},
{"vout", RPCArg::Type::NUM, RPCArg::Optional::NO, "The output number"},
{"sequence", RPCArg::Type::NUM, RPCArg::DefaultHint{"depends on the value of the 'replaceable' and 'locktime' arguments"}, "The sequence number"},
- {"pegin_bitcoin_tx", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The raw bitcoin transaction (in hex) depositing bitcoin to the mainchain_address generated by getpeginaddress"},
- {"pegin_txout_proof", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "A rawtxoutproof (in hex) generated by the mainchain daemon's `gettxoutproof` containing a proof of only bitcoin_tx"},
- {"pegin_claim_script", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The witness program generated by getpeginaddress."},
+ {"pegin_bitcoin_tx", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED_NAMED_ARG, "(only for pegin inputs) The raw bitcoin transaction (in hex) depositing bitcoin to the mainchain_address generated by getpeginaddress"},
+ {"pegin_txout_proof", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED_NAMED_ARG, "(only for pegin inputs) A rawtxoutproof (in hex) generated by the mainchain daemon's `gettxoutproof` containing a proof of only bitcoin_tx"},
+ {"pegin_claim_script", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED_NAMED_ARG, "(only for pegin inputs) The claim script generated by getpeginaddress."},
{"issuance_amount", RPCArg::Type::NUM, RPCArg::Optional::OMITTED, "The amount to be issued"},
{"issuance_tokens", RPCArg::Type::NUM, RPCArg::Optional::OMITTED, "The number of asset issuance tokens to generate"},
{"asset_entropy", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, "For new asset issuance, this is any additional entropy to be used in the asset tag calculation. For reissuance, this is the original asset entropy"},
diff --git a/src/wallet/rpc/backup.cpp b/src/wallet/rpc/backup.cpp
index ca2215e..e83e338 100644
--- a/src/wallet/rpc/backup.cpp
+++ b/src/wallet/rpc/backup.cpp
@@ -1307,8 +1307,8 @@ RPCHelpMan importmulti()
{
{"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
{
- {"desc", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "Descriptor to import. If using descriptor, do not also provide address/scriptPubKey, scripts, or pubkeys"},
- {"scriptPubKey", RPCArg::Type::STR, RPCArg::Optional::NO, "Type of scriptPubKey (string for script, json for address). Should not be provided if using a descriptor",
+ {"desc", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "Descriptor to import. Either desc or scriptPubKey must be provided, but not both. If using descriptor, do not also provide scripts or pubkeys"},
+ {"scriptPubKey", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "Type of scriptPubKey (string for script, json for address). Either desc or scriptPubKey must be provided, but not both",
/* oneline_description */ "", {"\"<script>\" | { \"address\":\"<address>\" }", "string / json"}
},
{"timestamp", RPCArg::Type::NUM, RPCArg::Optional::NO, "Creation time of the key expressed in " + UNIX_EPOCH_TIME + ",\n"
diff --git a/src/wallet/rpc/coins.cpp b/src/wallet/rpc/coins.cpp
index 6d2b11a..ad1fe5a 100644
--- a/src/wallet/rpc/coins.cpp
+++ b/src/wallet/rpc/coins.cpp
@@ -613,9 +613,9 @@ RPCHelpMan listunspent()
{RPCResult::Type::STR, "label", /*optional=*/true, "The associated label, or \"\" for the default label"},
{RPCResult::Type::STR, "scriptPubKey", "the script key"},
{RPCResult::Type::STR_AMOUNT, "amount", "the transaction output amount in " + CURRENCY_UNIT},
- {RPCResult::Type::STR_HEX, "amountcommitment", "the transaction output commitment in hex"},
+ {RPCResult::Type::STR_HEX, "amountcommitment", /*optional=*/true, "the transaction output commitment in hex"},
{RPCResult::Type::STR_HEX, "asset", "the transaction output asset in hex"},
- {RPCResult::Type::STR_HEX, "assetcommitment", "the transaction output asset commitment in hex"},
+ {RPCResult::Type::STR_HEX, "assetcommitment", /*optional=*/true, "the transaction output asset commitment in hex"},
{RPCResult::Type::STR_HEX, "amountblinder", "the transaction output amount blinding factor in hex"},
{RPCResult::Type::STR_HEX, "assetblinder", "the transaction output asset blinding factor in hex"},
{RPCResult::Type::NUM, "confirmations", "The number of confirmations"},
diff --git a/src/wallet/rpc/spend.cpp b/src/wallet/rpc/spend.cpp
index 37e8352..bc2d16d 100644
--- a/src/wallet/rpc/spend.cpp
+++ b/src/wallet/rpc/spend.cpp
@@ -754,7 +754,7 @@ RPCHelpMan fundrawtransaction()
{"include_unsafe", RPCArg::Type::BOOL, RPCArg::Default{false}, "Include inputs that are not safe to spend (unconfirmed transactions from outside keys and unconfirmed replacement transactions).\n"
"Warning: the resulting transaction may become invalid if one of the unsafe inputs disappears.\n"
"If that happens, you will need to fund the transaction with different inputs and republish it."},
- {"changeAddress", RPCArg::Type::STR, RPCArg::DefaultHint{"pool address"}, "The address to receive the change"},
+ {"changeAddress", RPCArg::Type::STR, RPCArg::DefaultHint{"pool address"}, "The address to receive the change, or a json object mapping asset labels or hex asset IDs to addresses"},
{"changePosition", RPCArg::Type::NUM, RPCArg::DefaultHint{"random"}, "The index of the change output"},
{"change_type", RPCArg::Type::STR, RPCArg::DefaultHint{"set by -changetype"}, "The output type to use. Only valid if changeAddress is not specified. Options are \"legacy\", \"p2sh-segwit\", and \"bech32\"."},
{"includeWatching", RPCArg::Type::BOOL, RPCArg::DefaultHint{"true for watch-only wallets, otherwise false"}, "Also select inputs which are watch only.\n"
@@ -763,7 +763,7 @@ RPCHelpMan fundrawtransaction()
{"lockUnspents", RPCArg::Type::BOOL, RPCArg::Default{false}, "Lock selected unspent outputs"},
{"fee_rate", RPCArg::Type::AMOUNT, RPCArg::DefaultHint{"not set, fall back to wallet fee estimation"}, "Specify a fee rate in " + CURRENCY_ATOM + "/vB."},
{"feeRate", RPCArg::Type::AMOUNT, RPCArg::DefaultHint{"not set, fall back to wallet fee estimation"}, "Specify a fee rate in " + CURRENCY_UNIT + "/kvB."},
- {"subtractFeeFromOutputs", RPCArg::Type::ARR, RPCArg::Default{UniValue::VARR}, "The integers.\n"
+ {"subtractFeeFromOutputs", RPCArg::Type::ARR, RPCArg::Default{UniValue::VARR}, "The zero-based output indices, before a change output is added.\n"
"The fee will be equally deducted from the amount of each specified output.\n"
"Those recipients will receive less coins than you enter in their corresponding amount field.\n"
"If no outputs are specified here, the sender pays the fee.",
@@ -896,7 +896,7 @@ RPCHelpMan signrawtransactionwithwallet()
{RPCResult::Type::STR, "error", "Verification or signing error related to the input"},
}},
}},
- {RPCResult::Type::STR, "warning", "Warning that a peg-in input signed may be immature. This could mean lack of connectivity to or misconfiguration of the daemon."},
+ {RPCResult::Type::STR, "warning", /*optional=*/true, "Warning that a peg-in input signed may be immature. This could mean lack of connectivity to or misconfiguration of the daemon."},
}
},
RPCExamples{
@@ -1133,6 +1133,8 @@ RPCHelpMan send()
{"", RPCArg::Type::OBJ_USER_KEYS, RPCArg::Optional::OMITTED, "",
{
{"address", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "A key-value pair. The key (string) is the address, the value (float or string) is the amount in " + CURRENCY_UNIT + ""},
+ {"blinder_index", RPCArg::Type::NUM, RPCArg::Optional::OMITTED, "The index of the input whose signer will blind this output. Must be provided if this output is to be blinded"},
+ {"asset", RPCArg::Type::STR, RPCArg::Optional::OMITTED, "The asset tag for this output if it is not the main chain asset"},
},
},
{"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
@@ -1140,6 +1142,24 @@ RPCHelpMan send()
{"data", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "A key-value pair. The key must be \"data\", the value is hex-encoded data"},
},
},
+ {"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
+ {
+ {"vdata", RPCArg::Type::ARR, RPCArg::Optional::NO, "The key is \"vdata\", the value is an array of hex encoded data",
+ {
+ {"", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, "Hex-encoded data"},
+ }},
+ },
+ },
+ {"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
+ {
+ {"burn", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "A key-value pair. The key must be \"burn\", the value is the amount that will be burned."},
+ },
+ },
+ {"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
+ {
+ {"fee", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "The key is \"fee\", the value the fee output you want to add."},
+ },
+ },
},
},
{"conf_target", RPCArg::Type::NUM, RPCArg::DefaultHint{"wallet -txconfirmtarget"}, "Confirmation target in blocks"},
@@ -1154,7 +1174,7 @@ RPCHelpMan send()
"Warning: the resulting transaction may become invalid if one of the unsafe inputs disappears.\n"
"If that happens, you will need to fund the transaction with different inputs and republish it."},
{"add_to_wallet", RPCArg::Type::BOOL, RPCArg::Default{true}, "When false, returns a serialized transaction which will not be added to the wallet or broadcast"},
- {"change_address", RPCArg::Type::STR_HEX, RPCArg::DefaultHint{"pool address"}, "The address to receive the change"},
+ {"change_address", RPCArg::Type::STR_HEX, RPCArg::DefaultHint{"pool address"}, "The address to receive the change, or a json object mapping asset labels or hex asset IDs to addresses"},
{"change_position", RPCArg::Type::NUM, RPCArg::DefaultHint{"random"}, "The index of the change output"},
{"change_type", RPCArg::Type::STR, RPCArg::DefaultHint{"set by -changetype"}, "The output type to use. Only valid if change_address is not specified. Options are \"legacy\", \"p2sh-segwit\", and \"bech32\"."},
{"fee_rate", RPCArg::Type::AMOUNT, RPCArg::DefaultHint{"not set, fall back to wallet fee estimation"}, "Specify a fee rate in " + CURRENCY_ATOM + "/vB."},
@@ -1165,7 +1185,15 @@ RPCHelpMan send()
{
{"txid", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The transaction id"},
{"vout", RPCArg::Type::NUM, RPCArg::Optional::NO, "The output number"},
- {"sequence", RPCArg::Type::NUM, RPCArg::Optional::NO, "The sequence number"},
+ {"sequence", RPCArg::Type::NUM, RPCArg::DefaultHint{"depends on the value of the 'replaceable' and 'locktime' arguments"}, "The sequence number"},
+ {"pegin_bitcoin_tx", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED_NAMED_ARG, "(only for pegin inputs) The raw bitcoin transaction (in hex) depositing bitcoin to the mainchain_address generated by getpeginaddress"},
+ {"pegin_txout_proof", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED_NAMED_ARG, "(only for pegin inputs) A rawtxoutproof (in hex) generated by the mainchain daemon's `gettxoutproof` containing a proof of only bitcoin_tx"},
+ {"pegin_claim_script", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED_NAMED_ARG, "(only for pegin inputs) The claim script generated by getpeginaddress."},
+ {"issuance_amount", RPCArg::Type::NUM, RPCArg::Optional::OMITTED, "The amount to be issued"},
+ {"issuance_tokens", RPCArg::Type::NUM, RPCArg::Optional::OMITTED, "The number of asset issuance tokens to generate"},
+ {"asset_entropy", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, "For new asset issuance, this is any additional entropy to be used in the asset tag calculation. For reissuance, this is the original asset entropy"},
+ {"asset_blinding_nonce", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, "Do not set for new asset issuance. For reissuance, this is the blinding factor for reissuance token output for the asset being reissued"},
+ {"blind_reissuance", RPCArg::Type::BOOL, RPCArg::Default{true}, "Whether to mark the issuance input for blinding or not. Only affects issuances with re-issuance tokens."},
{"weight", RPCArg::Type::NUM, RPCArg::DefaultHint{"Calculated from wallet and solving data"}, "The maximum weight for this input, "
"including the weight of the outpoint and sequence number. "
"Note that signature sizes are not guaranteed to be consistent, "
@@ -1444,11 +1472,11 @@ RPCHelpMan walletcreatefundedpsbt()
{"txid", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The transaction id"},
{"vout", RPCArg::Type::NUM, RPCArg::Optional::NO, "The output number"},
{"sequence", RPCArg::Type::NUM, RPCArg::DefaultHint{"depends on the value of the 'locktime' and 'options.replaceable' arguments"}, "The sequence number"},
- {"pegin_bitcoin_tx", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The raw bitcoin transaction (in hex) depositing bitcoin to the mainchain_address generated by getpeginaddress"},
- {"pegin_txout_proof", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "A rawtxoutproof (in hex) generated by the mainchain daemon's `gettxoutproof` containing a proof of only bitcoin_tx"},
- {"pegin_claim_script", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "The witness program generated by getpeginaddress."},
- {"issuance_amount", RPCArg::Type::NUM, RPCArg::Optional::OMITTED, "The amount to be issued"},
- {"issuance_tokens", RPCArg::Type::NUM, RPCArg::Optional::OMITTED, "The number of asset issuance tokens to generate"},
+ {"pegin_bitcoin_tx", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED_NAMED_ARG, "(only for pegin inputs) The raw bitcoin transaction (in hex) depositing bitcoin to the mainchain_address generated by getpeginaddress"},
+ {"pegin_txout_proof", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED_NAMED_ARG, "(only for pegin inputs) A rawtxoutproof (in hex) generated by the mainchain daemon's `gettxoutproof` containing a proof of only bitcoin_tx"},
+ {"pegin_claim_script", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED_NAMED_ARG, "(only for pegin inputs) The claim script generated by getpeginaddress."},
+ {"issuance_amount", RPCArg::Type::NUM, RPCArg::Optional::OMITTED, "The amount to be issued. If set, issuance_tokens and related fields must be provided consistently"},
+ {"issuance_tokens", RPCArg::Type::NUM, RPCArg::Optional::OMITTED, "The number of asset issuance tokens to generate. If set, issuance_amount and related fields must be provided consistently"},
{"asset_entropy", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, "For new asset issuance, this is any additional entropy to be used in the asset tag calculation. For reissuance, this is the original asset entropy"},
{"asset_blinding_nonce", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, "Do not set for new asset issuance. For reissuance, this is the blinding factor for reissuance token output for the asset being reissued"},
{"blind_reissuance", RPCArg::Type::BOOL, RPCArg::Default{true}, "Whether to mark the issuance input for blinding or not. Only affects issuances with re-issuance tokens."},
@@ -1478,6 +1506,24 @@ RPCHelpMan walletcreatefundedpsbt()
{"data", RPCArg::Type::STR_HEX, RPCArg::Optional::NO, "A key-value pair. The key must be \"data\", the value is hex-encoded data"},
},
},
+ {"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
+ {
+ {"vdata", RPCArg::Type::ARR, RPCArg::Optional::NO, "The key is \"vdata\", the value is an array of hex encoded data",
+ {
+ {"", RPCArg::Type::STR_HEX, RPCArg::Optional::OMITTED, "Hex-encoded data"},
+ }},
+ },
+ },
+ {"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
+ {
+ {"burn", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "A key-value pair. The key must be \"burn\", the value is the amount that will be burned."},
+ },
+ },
+ {"", RPCArg::Type::OBJ, RPCArg::Optional::OMITTED, "",
+ {
+ {"fee", RPCArg::Type::AMOUNT, RPCArg::Optional::NO, "The key is \"fee\", the value the fee output you want to add."},
+ },
+ },
},
},
{"locktime", RPCArg::Type::NUM, RPCArg::Default{0}, "Raw locktime. Non-0 value also locktime-activates inputs"},
@@ -1488,14 +1534,15 @@ RPCHelpMan walletcreatefundedpsbt()
{"include_unsafe", RPCArg::Type::BOOL, RPCArg::Default{false}, "Include inputs that are not safe to spend (unconfirmed transactions from outside keys and unconfirmed replacement transactions).\n"
"Warning: the resulting transaction may become invalid if one of the unsafe inputs disappears.\n"
"If that happens, you will need to fund the transaction with different inputs and republish it."},
- {"changeAddress", RPCArg::Type::STR_HEX, RPCArg::DefaultHint{"pool address"}, "The address to receive the change"},
+ {"changeAddress", RPCArg::Type::STR_HEX, RPCArg::DefaultHint{"pool address"}, "The address to receive the change, or a json object mapping asset labels or hex asset IDs to addresses"},
{"changePosition", RPCArg::Type::NUM, RPCArg::DefaultHint{"random"}, "The index of the change output"},
{"change_type", RPCArg::Type::STR, RPCArg::DefaultHint{"set by -changetype"}, "The output type to use. Only valid if changeAddress is not specified. Options are \"legacy\", \"p2sh-segwit\", and \"bech32\"."},
{"includeWatching", RPCArg::Type::BOOL, RPCArg::DefaultHint{"true for watch-only wallets, otherwise false"}, "Also select inputs which are watch only"},
{"lockUnspents", RPCArg::Type::BOOL, RPCArg::Default{false}, "Lock selected unspent outputs"},
+ {"include_explicit", RPCArg::Type::BOOL, RPCArg::Default{false}, "Include explicit (unblinded) outputs in the resulting PSBT"},
{"fee_rate", RPCArg::Type::AMOUNT, RPCArg::DefaultHint{"not set, fall back to wallet fee estimation"}, "Specify a fee rate in " + CURRENCY_ATOM + "/vB."},
{"feeRate", RPCArg::Type::AMOUNT, RPCArg::DefaultHint{"not set, fall back to wallet fee estimation"}, "Specify a fee rate in " + CURRENCY_UNIT + "/kvB."},
- {"subtractFeeFromOutputs", RPCArg::Type::ARR, RPCArg::Default{UniValue::VARR}, "The outputs to subtract the fee from.\n"
+ {"subtractFeeFromOutputs", RPCArg::Type::ARR, RPCArg::Default{UniValue::VARR}, "The zero-based output indices, before a change output is added.\n"
"The fee will be equally deducted from the amount of each specified output.\n"
"Those recipients will receive less coins than you enter in their corresponding amount field.\n"
"If no outputs are specified here, the sender pays the fee.",
diff --git a/src/wallet/rpc/transactions.cpp b/src/wallet/rpc/transactions.cpp
index 7db391e..8ea0366 100644
--- a/src/wallet/rpc/transactions.cpp
+++ b/src/wallet/rpc/transactions.cpp
@@ -510,6 +510,9 @@ RPCHelpMan listtransactions()
"\"orphan\" Orphaned coinbase transactions received."},
{RPCResult::Type::STR_AMOUNT, "amount", "The amount in " + CURRENCY_UNIT + ". This is negative for the 'send' category, and is positive\n"
"for all other categories"},
+ {RPCResult::Type::STR_HEX, "amountblinder", "The amount blinding factor in hex"},
+ {RPCResult::Type::STR_HEX, "asset", "The asset id in hex"},
+ {RPCResult::Type::STR_HEX, "assetblinder", "The asset blinding factor in hex"},
{RPCResult::Type::STR, "label", /*optional=*/true, "A comment for the address/transaction, if any"},
{RPCResult::Type::NUM, "vout", "the vout value"},
{RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true, "The amount of the fee in " + CURRENCY_UNIT + ". This is negative and only available for the\n"
@@ -624,6 +627,9 @@ RPCHelpMan listsinceblock()
"\"orphan\" Orphaned coinbase transactions received."},
{RPCResult::Type::STR_AMOUNT, "amount", "The amount in " + CURRENCY_UNIT + ". This is negative for the 'send' category, and is positive\n"
"for all other categories"},
+ {RPCResult::Type::STR_HEX, "amountblinder", "The amount blinding factor in hex"},
+ {RPCResult::Type::STR_HEX, "asset", "The asset id in hex"},
+ {RPCResult::Type::STR_HEX, "assetblinder", "The asset blinding factor in hex"},
{RPCResult::Type::NUM, "vout", "the vout value"},
{RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true, "The amount of the fee in " + CURRENCY_UNIT + ". This is negative and only available for the\n"
"'send' category of transactions."},
@@ -767,6 +773,9 @@ RPCHelpMan gettransaction()
"\"immature\" Coinbase transactions received with 100 or fewer confirmations.\n"
"\"orphan\" Orphaned coinbase transactions received."},
{RPCResult::Type::STR_AMOUNT, "amount", "The amount in " + CURRENCY_UNIT},
+ {RPCResult::Type::STR_HEX, "amountblinder", "The amount blinding factor in hex"},
+ {RPCResult::Type::STR_HEX, "asset", "The asset id in hex"},
+ {RPCResult::Type::STR_HEX, "assetblinder", "The asset blinding factor in hex"},
{RPCResult::Type::STR, "label", /*optional=*/true, "A comment for the address/transaction, if any"},
{RPCResult::Type::NUM, "vout", "the vout value"},
{RPCResult::Type::STR_AMOUNT, "fee", /*optional=*/true, "The amount of the fee in " + CURRENCY_UNIT + ". This is negative and only available for the \n"
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.