diff --git a/.travis.yml b/.travis.yml index d56d2386..7d8b7cc3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,10 +48,6 @@ deploy: # # DEPLOY_SOURCE_BRANCH: Branch to deploy from - # Temp. fix for DPL 1.9 issue (https://github.com/travis-ci/travis-ci/issues/9312) - edge: - branch: v1.8.47 - provider: pages skip-cleanup: true github-token: $GITHUB_TOKEN # Set in travis-ci.org dashboard, marked secure diff --git a/Gemfile.lock b/Gemfile.lock index 069dbd68..7d613cdd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,7 +9,7 @@ GEM ethon (0.8.0) ffi (>= 1.3.0) execjs (2.6.0) - ffi (1.9.10) + ffi (1.9.24) ffi-icu (0.1.10) ffi (~> 1.0, >= 1.0.9) html-proofer (2.1.0) @@ -49,10 +49,10 @@ GEM rb-fsevent (>= 0.9.3) rb-inotify (>= 0.9) mercenary (0.3.5) - mini_portile2 (2.3.0) + mini_portile2 (2.4.0) multi_json (1.11.2) - nokogiri (1.8.2) - mini_portile2 (~> 2.3.0) + nokogiri (1.10.4) + mini_portile2 (~> 2.4.0) parallel (1.6.1) rake (10.4.2) rb-fsevent (0.9.7) diff --git a/_autocrossref.yaml b/_autocrossref.yaml index ac1ba50c..64dd8e44 100644 --- a/_autocrossref.yaml +++ b/_autocrossref.yaml @@ -22,7 +22,10 @@ bitcoinj: '`block` messages': block message '`blocktxn` message': blocktxn message '`blocktxn` messages': blocktxn message +'CbTx': coinbase special tx certificate chain: +'`clsig` message': clsig message +'`clsig` messages': clsig message '`cmpctblock` message': cmpctblock message '`cmpctblock` messages': cmpctblock message DER: @@ -38,8 +41,6 @@ DER-formatted: der '`dsi` messages': dsi message '`dsq` message': dsq message '`dsq` messages': dsq message -'`dseg` message': dseg message -'`dseg` messages': dseg message '`dss` message': dss message '`dss` messages': dss message '`dssu` message': dssu message @@ -69,6 +70,8 @@ fiat: '`getheaders` messages': getheaders message '`getaddr` message': getaddr message '`getaddr` messages': getaddr message +'`getmnlistd` message': getmnlistd message +'`getmnlistd` messages': getmnlistd message '`getsporks` message': getsporks message '`getsporks` messages': getsporks message '`govobj` message': govobj message @@ -83,6 +86,8 @@ intermediate certificate: intermediate certificates: intermediate certificate '`inv` message': inv message '`inv` messages': inv message +'`islock` message': islock message +'`islock` messages': islock message '`ix` message': ix message '`ix` messages': ix message IP address: DO NOT AUTOCROSSREF @@ -110,16 +115,10 @@ merge: Merge avoidance: DO NOT AUTOCROSSREF micropayment channel: micropayment channels: micropayment channel -'`mnb` message': mnb message -'`mnb` messages': mnb message -'`mnget` message': mnget message -'`mnget` messages': mnget message -'`mnp` message': mnp message -'`mnp` messages': mnp message -'`mnv` message': mnv message -'`mnv` messages': mnv message -'`mnw` message': mnw message -'`mnw` messages': mnw message +'`mnauth` message': mnauth message +'`mnauth` messages': mnauth message +'`mnlistdiff` message': mnlistdiff message +'`mnlistdiff` messages': mnlistdiff message '`MSG_BLOCK`': msg_block '`MSG_FILTERED_BLOCK`': msg_filtered_block '`MSG_TX`': msg_tx @@ -150,6 +149,10 @@ pki: '`pong` message': pong message '`pong` messages': pong message previous block header hash: +'ProRegTx': proregtx special tx +'ProUpRegTx': proupregtx special tx +'ProUpRevTx': prouprevtx special tx +'ProUpServTx': proupservtx special tx protocol buffer: protobuf protocol buffers: protobuf protocol version 106: section protocol versions @@ -166,6 +169,31 @@ protocol version 70012: section protocol versions protocol version 70013: section protocol versions protocol version 70014: section protocol versions public key infrastructure: pki +'QcTx': quorum commitment special tx +'`qbsigs` message': qbsigs message +'`qbsigs` messages': qbsigs message +'`qcomplaint` message': qcomplaint message +'`qcomplaint` messages': qcomplaint message +'`qcontrib` message': qcontrib message +'`qcontrib` messages': qcontrib message +'`qfcommit` message': qfcommit message +'`qfcommit` messages': qfcommit message +'`qgetsigs` message': qgetsigs message +'`qgetsigs` messages': qgetsigs message +'`qjustify` message': qjustify message +'`qjustify` messages': qjustify message +'`qpcommit` message': qpcommit message +'`qpcommit` messages': qpcommit message +'`qsendrecsigs` message': qsendrecsigs message +'`qsendrecsigs` messages': qsendrecsigs message +'`qsigrec` message': qsigrec message +'`qsigrec` messages': qsigrec message +'`qsigsesann` message': qsigsesann message +'`qsigsesann` messages': qsigsesann message +'`qsigsinv` message': qsigsinv message +'`qsigsinv` messages': qsigsinv message +'`qwatch` message': qwatch message +'`qwatch` messages': qwatch message '`r`': r receipt: DO NOT AUTOCROSSREF recurrent rebilling: @@ -180,6 +208,8 @@ RPCs: rpc secp256k1: '`sendcmpct` message': sendcmpct message '`sendcmpct` messages': sendcmpct message +'`senddsq` message': senddsq message +'`senddsq` messages': senddsq message '`spork` message': spork message '`spork` messages': spork message '`ssc` message': ssc message @@ -248,24 +278,33 @@ CVE-2012-2459: ## DIPs in numerical order; don't use padding zeros (e.g. DIP1 not DIP0001) DIP1: +DIP2: +DIP3: +DIP4: +DIP5: +DIP6: +DIP7: +DIP8: ## RPCs '`abandontransaction`': rpc abandontransaction '`abandontransaction` RPC': rpc abandontransaction +'`abortrescan`': rpc abortrescan +'`abortrescan` RPC': rpc abortrescan '`addmultisigaddress`': rpc addmultisigaddress '`addmultisigaddress` RPC': rpc addmultisigaddress '`addnode`': rpc addnode '`addnode` RPC': rpc addnode -'`addwitnessaddress`': rpc addwitnessaddress -'`addwitnessaddress` RPC': rpc addwitnessaddress '`backupwallet`': rpc backupwallet '`backupwallet` RPC': rpc backupwallet -'`bumpfee`': rpc bumpfee -'`bumpfee` RPC': rpc bumpfee +'`bls`': rpc bls +'`bls` RPC': rpc bls '`clearbanned`': rpc clearbanned '`clearbanned` RPC': rpc clearbanned '`createmultisig`': rpc createmultisig '`createmultisig` RPC': rpc createmultisig +'`combinerawtransaction`': rpc combinerawtransaction +'`combinerawtransaction` RPC': rpc combinerawtransaction '`createrawtransaction`': rpc createrawtransaction '`createrawtransaction` RPC': rpc createrawtransaction '`debug`': rpc debug @@ -320,6 +359,8 @@ DIP1: '`getbalance` RPC': rpc getbalance '`getbestblockhash`': rpc getbestblockhash '`getbestblockhash` RPC': rpc getbestblockhash +'`getbestchainlock`': rpc getbestchainlock +'`getbestchainlock` RPC': rpc getbestchainlock '`getblock`': rpc getblock '`getblock` RPC': rpc getblock '`getblockchaininfo`': rpc getblockchaininfo @@ -333,11 +374,15 @@ DIP1: '`getblockheader`': rpc getblockheader '`getblockheader` RPC': rpc getblockheader '`getblockheaders`': rpc getblockheaders +'`getblockstats`': rpc getblockstats +'`getblockstats` RPC': rpc getblockstats '`getblockheaders` RPC': rpc getblockheaders '`getblocktemplate`': rpc getblocktemplate '`getblocktemplate` RPC': rpc getblocktemplate '`getchaintips`': rpc getchaintips '`getchaintips` RPC': rpc getchaintips +'`getchaintxstats`': rpc getchaintxstats +'`getchaintxstats` RPC': rpc getchaintxstats '`getconnectioncount`': rpc getconnectioncount '`getconnectioncount` RPC': rpc getconnectioncount '`getdifficulty`': rpc getdifficulty @@ -360,6 +405,8 @@ DIP1: '`getmempoolentry` RPC': rpc getmempoolentry '`getmempoolinfo`': rpc getmempoolinfo '`getmempoolinfo` RPC': rpc getmempoolinfo +'`getmerkleblocks`': rpc getmerkleblocks +'`getmerkleblocks` RPC': rpc getmerkleblocks '`getmininginfo`': rpc getmininginfo '`getmininginfo` RPC': rpc getmininginfo '`getnettotals`': rpc getnettotals @@ -384,6 +431,8 @@ DIP1: '`getreceivedbyaccount` RPC': rpc getreceivedbyaccount '`getreceivedbyaddress`': rpc getreceivedbyaddress '`getreceivedbyaddress` RPC': rpc getreceivedbyaddress +'`getspecialtxes`': rpc getspecialtxes +'`getspecialtxes` RPC': rpc getspecialtxes '`getspentinfo`': rpc getspentinfo '`getspentinfo` RPC': rpc getspentinfo '`getsuperblockbudget`': rpc getsuperblockbudget @@ -420,8 +469,6 @@ DIP1: '`importpubkey` RPC': rpc importpubkey '`importwallet`': rpc importwallet '`importwallet` RPC': rpc importwallet -'`instantsendtoaddress`': rpc instantsendtoaddress -'`instantsendtoaddress` RPC': rpc instantsendtoaddress '`keepass`': rpc keepass '`keepass` RPC': rpc keepass '`keypoolrefill`': rpc keypoolrefill @@ -446,8 +493,12 @@ DIP1: '`listtransactions` RPC': rpc listtransactions '`listunspent`': rpc listunspent '`listunspent` RPC': rpc listunspent +'`listwallets`': rpc listwallets +'`listwallets` RPC': rpc listwallets '`lockunspent`': rpc lockunspent '`lockunspent` RPC': rpc lockunspent +'`logging`': rpc logging +'`logging` RPC': rpc logging '`masternode`': rpc masternode '`masternode` RPC': rpc masternode '`masternodebroadcast`': rpc masternodebroadcast @@ -460,6 +511,8 @@ DIP1: '`move` RPC': rpc move '`ping`': rpc ping '`ping` RPC': rpc ping +'`protx`': rpc protx +'`protx` RPC': rpc protx '`preciousblock`': rpc preciousblock '`preciousblock` RPC': rpc preciousblock '`prioritisetransaction`': rpc prioritisetransaction @@ -468,6 +521,8 @@ DIP1: '`privatesend` RPC': rpc privatesend '`pruneblockchain`': rpc pruneblockchain '`pruneblockchain` RPC': rpc pruneblockchain +'`quorum`': rpc quorum +'`quorum` RPC': rpc quorum '`removeprunedfunds`': rpc removeprunedfunds '`removeprunedfunds` RPC': rpc removeprunedfunds '`sendfrom`': rpc sendfrom @@ -483,14 +538,16 @@ DIP1: '`sendtoaddress` RPC': rpc sendtoaddress '`setaccount`': rpc setaccount '`setaccount` RPC': rpc setaccount -'`setbip69enabled`': rpc setbip69enabled -'`setbip69enabled` RPC': rpc setbip69enabled '`setban`': rpc setban '`setban` RPC': rpc setban '`setgenerate`': rpc setgenerate '`setgenerate` RPC': rpc setgenerate '`setnetworkactive`': rpc setnetworkactive '`setnetworkactive` RPC': rpc setnetworkactive +'`setprivatesendamount`': rpc setprivatesendamount +'`setprivatesendamount` RPC': rpc setprivatesendamount +'`setprivatesendrounds`': rpc setprivatesendrounds +'`setprivatesendrounds` RPC': rpc setprivatesendrounds '`settxfee`': rpc settxfee '`settxfee` RPC': rpc settxfee '`signmessage`': rpc signmessage @@ -509,6 +566,8 @@ DIP1: '`submitblock` RPC': rpc submitblock '`validateaddress`': rpc validateaddress '`validateaddress` RPC': rpc validateaddress +'`uptime`': rpc uptime +'`uptime` RPC': rpc uptime '`verifychain`': rpc verifychain '`verifychain` RPC': rpc verifychain '`verifymessage`': rpc verifymessage diff --git a/_config.yml b/_config.yml index 3dde5510..d991f44a 100644 --- a/_config.yml +++ b/_config.yml @@ -73,24 +73,7 @@ redirects: aliases: --author=Satoshi Nakamoto: Satoshi Nakamoto - gavinandresen: Gavin Andresen - gmaxwell: Gregory Maxwell - gwb3: Garland William Binns III - harding: David Harding - jgarzik: Jeff Garzik - laanwj: Wladimir J. van der Laan - luke-jr: Luke-Jr - mikehearn: Mike Hearn - petertodd: Peter Todd - s_nakamoto: Satoshi Nakamoto - saivann: Saïvann Carignan - schildbach: Andreas Schildbach - sipa: Pieter Wuille - tcatm: Nils Schneider - whitj00: Whit Jack - CodeShark: Eric Lombrozo - saracen: Satoshi Nakamoto - theuni: Cory Fields + #gavinandresen: Gavin Andresen safe: false port: 4000 @@ -183,13 +166,14 @@ devsearches: ## leading capital) for easier quick scanning "RPCs": - 'AbandonTransaction': "/en/developer-reference#abandontransaction" + - 'AbortRescan': "/en/developer-reference#abortrescan" - 'AddMultiSigAddress': "/en/developer-reference#addmultisigaddress" - 'AddNode': "/en/developer-reference#addnode" - - 'AddWitnessAddress': "/en/developer-reference#addwitnessaddress" - 'BackupWallet': "/en/developer-reference#backupwallet" - - 'BumpFee': "/en/developer-reference#bumpfee" + - 'BLS': "/en/developer-reference#bls" - 'ClearBanned': "/en/developer-reference#clearbanned" - 'CreateMultisig': "/en/developer-reference#createmultisig" + - 'CombineRawTransaction': "/en/developer-reference#combinerawtransaction" - 'CreateRawTransaction': "/en/developer-reference#createrawtransaction" - 'Debug': "/en/developer-reference#debug" - 'DecodeRawTransaction': "/en/developer-reference#decoderawtransaction" @@ -217,6 +201,7 @@ devsearches: - 'GetAddressUtxos': "/en/developer-reference#getaddressutxos" - 'GetBalance': "/en/developer-reference#getbalance" - 'GetBestBlockHash': "/en/developer-reference#getbestblockhash" + - 'GetBestChainLock': "/en/developer-reference#getbestchainlock" - 'GetBlock': "/en/developer-reference#getblock" - 'GetBlockChainInfo': "/en/developer-reference#getblockchaininfo" - 'GetBlockCount': "/en/developer-reference#getblockcount" @@ -224,8 +209,10 @@ devsearches: - 'GetBlockHashes': "/en/developer-reference#getblockhashes" - 'GetBlockHeader': "/en/developer-reference#getblockheader" - 'GetBlockHeaders': "/en/developer-reference#getblockheaders" + - 'GetBlockStats': "/en/developer-reference#getblockstats" - 'GetBlockTemplate': "/en/developer-reference#getblocktemplate" - 'GetChainTips': "/en/developer-reference#getchaintips" + - 'GetChainTxStats': "/en/developer-reference#getchaintxstats" - 'GetConnectionCount': "/en/developer-reference#getconnectioncount" - 'GetDifficulty': "/en/developer-reference#getdifficulty" - 'GetGenerate': "/en/developer-reference#getgenerate" @@ -237,6 +224,7 @@ devsearches: - 'GetMempoolDescendants': "/en/developer-reference#getmempooldescendants" - 'GetMempoolEntry': "/en/developer-reference#getmempoolentry" - 'GetMempoolInfo': "/en/developer-reference#getmempoolinfo" + - 'GetMerkleBlocks': "/en/developer-reference#getmerkleblocks" - 'GetMiningInfo': "/en/developer-reference#getmininginfo" - 'GetNetTotals': "/en/developer-reference#getnettotals" - 'GetNetworkHashPS': "/en/developer-reference#getnetworkhashps" @@ -249,6 +237,7 @@ devsearches: - 'GetRawTransaction': "/en/developer-reference#getrawtransaction" - 'GetReceivedByAccount': "/en/developer-reference#getreceivedbyaccount" - 'GetReceivedByAddress': "/en/developer-reference#getreceivedbyaddress" + - 'GetSpecialTxes': "/en/developer-reference#getspecialtxes" - 'GetSpentInfo': "/en/developer-reference#getspentinfo" - 'GetSuperblockBudget': "/en/developer-reference#getsuperblockbudget" - 'GetTransaction': "/en/developer-reference#gettransaction" @@ -267,7 +256,6 @@ devsearches: - 'ImportPrunedFunds': "/en/developer-reference#importprunedfunds" - 'ImportPubkey': "/en/developer-reference#importpubkey" - 'ImportWallet': "/en/developer-reference#importwallet" - - 'InstantSendToAddress': "/en/developer-reference#instantsendtoaddress" - 'KeePass': "/en/developer-reference#keepass" - 'KeypoolRefill': "/en/developer-reference#keypoolrefill" - 'ListAccounts': "/en/developer-reference#listaccounts" @@ -280,17 +268,21 @@ devsearches: - 'ListSinceBlock': "/en/developer-reference#listsinceblock" - 'ListTransactions': "/en/developer-reference#listtransactions" - 'ListUnspent': "/en/developer-reference#listunspent" + - 'ListWallets': "/en/developer-reference#listwallets" - 'LockUnspent': "/en/developer-reference#lockunspent" + - 'Logging': "/en/developer-reference#logging" - 'Masternode': "/en/developer-reference#masternode" - 'MasternodeBroadcast': "/en/developer-reference#masternodebroadcast" - 'MasternodeList': "/en/developer-reference#masternodelist" - 'MnSync': "/en/developer-reference#mnsync" - 'Move': "/en/developer-reference#move" - 'Ping': "/en/developer-reference#ping-rpc" + - 'ProTx': "/en/developer-reference#protx" - 'PreciousBlock': "/en/developer-reference#preciousblock" - 'PrioritiseTransaction': "/en/developer-reference#prioritisetransaction" - 'PrivateSend': "/en/developer-reference#privatesend" - 'PruneBlockChain': "/en/developer-reference#pruneblockchain" + - 'Quorum': "/en/developer-reference#quorum" - 'RemovePrunedFunds': "/en/developer-reference#removeprunedfunds" - 'SendFrom': "/en/developer-reference#sendfrom" - 'SendMany': "/en/developer-reference#sendmany" @@ -298,9 +290,10 @@ devsearches: - 'SendToAddress': "/en/developer-reference#sendtoaddress" - 'SetAccount': "/en/developer-reference#setaccount" - 'SetBan': "/en/developer-reference#setban" - - 'SetBIP69Enabled': "/en/developer-reference#setbip69enabled" - 'SetGenerate': "/en/developer-reference#setgenerate" - 'SetNetworkActive': "/en/developer-reference#setnetworkactive" + - 'SetPrivateSendAmount': "/en/developer-reference#setprivatesendamount" + - 'SetPrivateSendRounds': "/en/developer-reference#setprivatesendrounds" - 'SetTxFee': "/en/developer-reference#settxfee" - 'SignMessage': "/en/developer-reference#signmessage" - 'SignMessageWithPrivKey': "/en/developer-reference#signmessagewithprivkey" @@ -309,6 +302,7 @@ devsearches: - 'Spork': "/en/developer-reference#spork-rpc" - 'Stop': "/en/developer-reference#stop" - 'SubmitBlock': "/en/developer-reference#submitblock" + - 'Uptime': "/en/developer-reference#uptime" - 'ValidateAddress': "/en/developer-reference#validateaddress" - 'VerifyChain': "/en/developer-reference#verifychain" - 'VerifyMessage': "/en/developer-reference#verifymessage" @@ -508,11 +502,14 @@ devsearches: - "DIP2: Special Transactions": "https://github.com/dashpay/dips/blob/master/dip-0002.md" - "DIP3: Deterministic Masternode Lists": "https://github.com/dashpay/dips/blob/master/dip-0003.md" - "DIP4: Simplified Verification of Deterministic Masternode Lists": "https://github.com/dashpay/dips/blob/master/dip-0004.md" + - "DIP5: Blockchain Users": "https://github.com/dashpay/dips/blob/master/dip-0005.md" + - "DIP6: Long-Living Masternode Quorums": "https://github.com/dashpay/dips/blob/master/dip-0006.md" + - "DIP7: LLMQ Signing Requests / Sessions": "https://github.com/dashpay/dips/blob/master/dip-0007.md" + - "DIP8: ChainLocks": "https://github.com/dashpay/dips/blob/master/dip-0008.md" ## Bitcoin P2P Protocol messages documented on Bitcoin.org "P2P Messages": - "addr": "/en/developer-reference#addr" - - "alert": "/en/developer-reference#alert" - "block": "/en/developer-reference#block" - "blocktxn": "/en/developer-reference#blocktxn" - "cmpctblock": "/en/developer-reference#cmpctblock" @@ -525,15 +522,18 @@ devsearches: - "getblocktxn": "/en/developer-reference#getblocktxn" - "getdata": "/en/developer-reference#getdata" - "getheaders": "/en/developer-reference#getheaders" + - "getmnlistd": "/en/developer-reference#getmnlistd" - "headers": "/en/developer-reference#headers" - "inv": "/en/developer-reference#inv" - "mempool": "/en/developer-reference#mempool" - "merkleblock": "/en/developer-reference#merkleblock" + - "mnlistdiff": "/en/developer-reference#mnlistdiff" - "notfound": "/en/developer-reference#notfound" - "ping": "/en/developer-reference#ping" - "pong": "/en/developer-reference#pong" - "reject": "/en/developer-reference#reject" - "sendcmpct": "/en/developer-reference#sendcmpct" + - "senddsq": "/en/developer-reference#senddsq" - "tx": "/en/developer-reference#tx" - "verack": "/en/developer-reference#verack" - "version": "/en/developer-reference#version" @@ -543,8 +543,8 @@ devsearches: - "spork": "/en/developer-reference#spork" # Dash - instantsend - - "ix": "/en/developer-reference#ix" - - "txlvote": "/en/developer-reference#txlvote" + - "clsig": "/en/developer-reference#clsig" + - "islock": "/en/developer-reference#islock" # Dash - privatesend - "dsa": "/en/developer-reference#dsa" @@ -557,20 +557,33 @@ devsearches: - "dstx": "/en/developer-reference#dstx" # Dash - masternode - - "dseg": "/en/developer-reference#dseg" - - "mnb": "/en/developer-reference#mnb" - - "mnget": "/en/developer-reference#mnget" - - "mnp": "/en/developer-reference#mnp" - - "mnv": "/en/developer-reference#mnv" - - "mnw": "/en/developer-reference#mnw" - - "mnwb": "/en/developer-reference#mnwb" - "ssc": "/en/developer-reference#ssc" + - "mnauth": "/en/developer-reference#mnauth" + + # Dash - quorums + - "qbsigs": "/en/developer-reference#qbsigs" + - "qcomplaint": "/en/developer-reference#qcomplaint" + - "qcontrib": "/en/developer-reference#qcontrib" + - "qfcommit": "/en/developer-reference#qfcommit" + - "qgetsigs": "/en/developer-reference#qgetsigs" + - "qjustify": "/en/developer-reference#qjustify" + - "qpcommit": "/en/developer-reference#qpcommit" + - "qsendrecsigs": "/en/developer-reference#qsendrecsigs" + - "qsigrec": "/en/developer-reference#qsigrec" + - "qsigsesann": "/en/developer-reference#qsigsesann" + - "qsigsinv": "/en/developer-reference#qsigsinv" + - "qwatch": "/en/developer-reference#qwatch" # Dash - governance - "govobj": "/en/developer-reference#govobj" - "govobjvote": "/en/developer-reference#govobjvote" - "govsync": "/en/developer-reference#govsync" + # Dash - deprecated + - "alert": "/en/developer-reference#alert" + - "ix": "/en/developer-reference#ix" + - "txlvote": "/en/developer-reference#txlvote" + donation_banner: address: 1GwV7fPX97hmavc6iNrUZUogmjpLPrPFoE display: true diff --git a/_data/glossary/en/chainlocks.yaml b/_data/glossary/en/chainlocks.yaml new file mode 100644 index 00000000..1dcec57a --- /dev/null +++ b/_data/glossary/en/chainlocks.yaml @@ -0,0 +1,29 @@ +--- +# This file is licensed under the MIT License (MIT) available on +# http://opensource.org/licenses/MIT. + +required: + #-------------40 characters-------------# + title_max_40_characters_no_formatting: ChainLocks + + summary_max_255_characters_no_formatting: > + ChainLocks are a feature enabling near instant consensus + on the valid chain. ChainLocks use Long-Living Masternode + Quroums to mitigate 51 percent attacks and reduce + uncertainty when receiving funds. + + synonyms_shown_in_glossary_capitalize_first_letter: + - ChainLocks + +optional: + synonyms_and_pluralizations_not_shown_in_glossary: + - ChainLock + + not_to_be_confused_with_capitalize_first_letter: + + links_html_or_markdown_style_capitalize_first_letter: + - "[ChainLocks](/en/developer-guide#chainlocks) --- Developer Guide" + - "[ChainLock message](/en/developer-reference#clsig) --- Developer Reference" + - "[ChainLocks](https://docs.dash.org/en/stable/introduction/features.html#chainlocks) --- Dash Documentation" + +--- diff --git a/_data/glossary/en/darkgravitywave.yaml b/_data/glossary/en/darkgravitywave.yaml index 3da7df6a..d5c19840 100644 --- a/_data/glossary/en/darkgravitywave.yaml +++ b/_data/glossary/en/darkgravitywave.yaml @@ -22,7 +22,7 @@ optional: not_to_be_confused_with_capitalize_first_letter: links_html_or_markdown_style_capitalize_first_letter: - - "[Dark Gravity Wave](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/1146926/Dark+Gravity+Wave) --- Dash Wiki" + - "[Dark Gravity Wave](https://docs.dash.org/en/stable/introduction/features.html#dark-gravity-wave) --- Dash Documentation" --- diff --git a/_data/glossary/en/dgbb.yaml b/_data/glossary/en/dgbb.yaml index 1e479874..4dbcd17a 100644 --- a/_data/glossary/en/dgbb.yaml +++ b/_data/glossary/en/dgbb.yaml @@ -20,6 +20,6 @@ optional: not_to_be_confused_with_capitalize_first_letter: links_html_or_markdown_style_capitalize_first_letter: - - "[Governance and Budget System](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/8585246/Governance+and+Budget+System) --- Dash Wiki" + - "[Governance and Budget System](https://docs.dash.org/en/stable/introduction/features.html#decentralized-governance) --- Dash Documentation" --- diff --git a/_data/glossary/en/evolution.yaml b/_data/glossary/en/evolution.yaml index f1d0833a..efbc7301 100644 --- a/_data/glossary/en/evolution.yaml +++ b/_data/glossary/en/evolution.yaml @@ -21,7 +21,7 @@ optional: not_to_be_confused_with_capitalize_first_letter: links_html_or_markdown_style_capitalize_first_letter: - - "[Evolution](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/39583757/Evolution) --- Dash Wiki" + - "[Evolution](https://docs.dash.org/en/stable/introduction/features.html#evolution) --- Dash Documentation" --- diff --git a/_data/glossary/en/high-priority-transaction.yaml b/_data/glossary/en/high-priority-transaction.yaml index 3077a887..02162843 100644 --- a/_data/glossary/en/high-priority-transaction.yaml +++ b/_data/glossary/en/high-priority-transaction.yaml @@ -9,8 +9,10 @@ required: summary_max_255_characters_no_formatting: > Transactions that don't have to pay a transaction fee because their inputs have been idle long enough to accumulated large - amounts of priority. Note: miners choose whether to accept free - transactions. + amounts of priority. + Note: As of Dash Core 0.12.3, all + transactions require a fee. Also, coin age priority logic was + removed in Dash Core 0.14.0. synonyms_shown_in_glossary_capitalize_first_letter: - High-priority transaction @@ -24,7 +26,6 @@ optional: not_to_be_confused_with_capitalize_first_letter: links_html_or_markdown_style_capitalize_first_letter: - - "[High-priority transactions](/en/developer-guide#term-high-priority-transactions) --- Developer Guide" - - "[Free transaction relay policy](https://en.bitcoin.it/wiki/Free_transaction_relay_policy) --- Bitcoin Wiki" + #- "[High-priority transactions](/en/developer-guide#term-high-priority-transactions) --- Developer Guide" --- diff --git a/_data/glossary/en/instantsend.yaml b/_data/glossary/en/instantsend.yaml index e300f246..ec2744c4 100644 --- a/_data/glossary/en/instantsend.yaml +++ b/_data/glossary/en/instantsend.yaml @@ -24,6 +24,6 @@ optional: links_html_or_markdown_style_capitalize_first_letter: - "[InstantSend](/en/developer-guide#instantsend) --- Developer Guide" - "[InstantSend messages](/en/developer-reference#instantsend-messages) --- Developer Reference" - - "[InstantSend](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/1146928/InstantSend) --- Dash Wiki" + - "[InstantSend](https://docs.dash.org/en/stable/introduction/features.html#instantsend) --- Dash Documentation" --- diff --git a/_data/glossary/en/long-living-masternode-quorum.yaml b/_data/glossary/en/long-living-masternode-quorum.yaml new file mode 100644 index 00000000..d9e27536 --- /dev/null +++ b/_data/glossary/en/long-living-masternode-quorum.yaml @@ -0,0 +1,33 @@ +--- +# This file is licensed under the MIT License (MIT) available on +# http://opensource.org/licenses/MIT. + +required: + #-------------40 characters-------------# + title_max_40_characters_no_formatting: Long-Living Masternode Quorum + + summary_max_255_characters_no_formatting: > + Long-Living Masternode Quorums (LLMQs) are a Dash innovation + that enable masternodes to perform threshold signing of + consensus-related messages (e.g. InstantSend transactions). + LLMQs provide a more scalable, general use quorum system + than the ephemeral ones used prior to Dash Core version 0.14. + + synonyms_shown_in_glossary_capitalize_first_letter: + - Long-Living Masternode Quorum + - LLMQ + +optional: + synonyms_and_pluralizations_not_shown_in_glossary: + - Long-Living Masternode Quorums + - Long Living Masternode Quorum + - Long Living Masternode Quorums + - LLMQs + + not_to_be_confused_with_capitalize_first_letter: + + links_html_or_markdown_style_capitalize_first_letter: + - "[Masternode Quorums](/en/developer-guide#masternode-quorums) --- Developer Guide" + - "[Long-Living Masternode Quorums](https://github.com/dashpay/dips/blob/master/dip-0006.md) --- Dash DIP" + +--- diff --git a/_data/glossary/en/masternode.yaml b/_data/glossary/en/masternode.yaml index 4d8fd327..607eb0f7 100644 --- a/_data/glossary/en/masternode.yaml +++ b/_data/glossary/en/masternode.yaml @@ -27,6 +27,6 @@ optional: - "[Masternode Sync](/en/developer-guide#masternode-sync) --- Developer Guide" - "[Governance](/en/developer-guide#governance) --- Developer Guide" - "[Masternode messages](/en/developer-reference#masternode-messages) --- Developer Reference" - - "[Masternode](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/1146920/Masternode+Network) --- Dash Wiki" + - "[Masternode](https://docs.dash.org/en/stable/introduction/features.html#masternodes) --- Dash Documentation" --- diff --git a/_data/glossary/en/minimum-relay-fee.yaml b/_data/glossary/en/minimum-relay-fee.yaml index eb43a912..40557b1c 100644 --- a/_data/glossary/en/minimum-relay-fee.yaml +++ b/_data/glossary/en/minimum-relay-fee.yaml @@ -7,10 +7,9 @@ required: title_max_40_characters_no_formatting: Minimum Relay Fee summary_max_255_characters_no_formatting: > - The minimum transaction fee a transaction must pay (if it isn't - a high-priority transaction) for a full node to relay that - transaction to other nodes. There is no one minimum relay - fee---each node chooses its own policy. + The minimum transaction fee a transaction must pay for a full + node to relay that transaction to other nodes. There is no + one minimum relay fee---each node chooses its own policy. synonyms_shown_in_glossary_capitalize_first_letter: - Minimum relay fee @@ -27,6 +26,6 @@ optional: links_html_or_markdown_style_capitalize_first_letter: - "[Minimum relay fee](/en/developer-guide#term-minimum-fee) --- Developer Guide" - - "[Transaction fees](https://en.bitcoin.it/wiki/Transaction_fees) --- Bitcoin Wiki" + #- "[Transaction fees](https://en.bitcoin.it/wiki/Transaction_fees) --- Bitcoin Wiki" --- diff --git a/_data/glossary/en/privatesend.yaml b/_data/glossary/en/privatesend.yaml index e91eb4e5..4e1b724d 100644 --- a/_data/glossary/en/privatesend.yaml +++ b/_data/glossary/en/privatesend.yaml @@ -24,6 +24,6 @@ optional: links_html_or_markdown_style_capitalize_first_letter: - "[PrivateSend](/en/developer-guide#privatesend) --- Developer Guide" - "[PrivateSend messages](/en/developer-reference#privatesend-messages) --- Developer Reference" - - "[PrivateSend](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/1146924/PrivateSend) --- Official Wiki" + - "[PrivateSend](https://docs.dash.org/en/stable/introduction/features.html#privatesend) --- Dash Documentation" --- diff --git a/_data/glossary/en/sentinel.yaml b/_data/glossary/en/sentinel.yaml index cd5e48d8..5716da05 100644 --- a/_data/glossary/en/sentinel.yaml +++ b/_data/glossary/en/sentinel.yaml @@ -21,7 +21,7 @@ optional: links_html_or_markdown_style_capitalize_first_letter: - "[Sentinel](/en/developer-guide#sentinel) --- Developer Guide" - - "[Sentinel](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/103922706/Sentinel) --- Dash Wiki" + - "[Sentinel](https://docs.dash.org/en/stable/introduction/features.html#sentinel) --- Dash Documentation" --- diff --git a/_data/glossary/en/special-transactions.yaml b/_data/glossary/en/special-transactions.yaml new file mode 100644 index 00000000..ff3c46d0 --- /dev/null +++ b/_data/glossary/en/special-transactions.yaml @@ -0,0 +1,28 @@ +--- +# This file is licensed under the MIT License (MIT) available on +# http://opensource.org/licenses/MIT. + +required: + #-------------40 characters-------------# + title_max_40_characters_no_formatting: Special Transactions + + summary_max_255_characters_no_formatting: > + Special Transactions provide a way to include non-financial, + consensus-assisting metadata (e.g. masternode lists) on-chain. + + synonyms_shown_in_glossary_capitalize_first_letter: + - Special Transactions + +optional: + synonyms_and_pluralizations_not_shown_in_glossary: + - Special Transaction + - special transaction + - special transactions + + not_to_be_confused_with_capitalize_first_letter: + + links_html_or_markdown_style_capitalize_first_letter: + - "[Special Transactions](/en/developer-reference#special-transactions) --- Developer Reference" + - "[Special Transactions](https://github.com/dashpay/dips/blob/master/dip-0002.md) --- Dash DIP" + +--- diff --git a/_data/glossary/en/spork.yaml b/_data/glossary/en/spork.yaml index 7803381b..9fabc3bc 100644 --- a/_data/glossary/en/spork.yaml +++ b/_data/glossary/en/spork.yaml @@ -28,7 +28,7 @@ optional: links_html_or_markdown_style_capitalize_first_letter: - "[Spork message](/en/developer-reference#spork) --- Developer Reference" - - "[Multi-Phased Fork (Spork)](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/19169298/Multi-Phased+Fork+Spork) --- Dash Wiki" - - "[Understanding Sporks](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/128319489/Understanding+Sporks) --- Dash Wiki" + - "[Multi-Phased Fork (Spork)](https://docs.dash.org/en/stable/introduction/features.html#sporks) --- Dash Documentation" + - "[Understanding Sporks](https://docs.dash.org/en/latest/developers/index.html#sporks) --- Dash Documentation" --- diff --git a/_data/glossary/en/x11.yaml b/_data/glossary/en/x11.yaml index 1d17b87b..0b281cdd 100644 --- a/_data/glossary/en/x11.yaml +++ b/_data/glossary/en/x11.yaml @@ -21,6 +21,6 @@ optional: - The open source GUI server that provides a graphical interface to Unix/Linux users. links_html_or_markdown_style_capitalize_first_letter: - - "[X11 Hash](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/1146918/X11) --- Dash Wiki" + - "[X11 Hash](https://docs.dash.org/en/latest/introduction/features.html#x11-hash-algorithm) --- Dash Documentation" --- diff --git a/_events.yml b/_events.yml index 148d27f4..4c1ace21 100644 --- a/_events.yml +++ b/_events.yml @@ -1,459 +1,3 @@ -- date: 2017-01-05 - title: "CES Digital Money Forum" - venue: "Las Vegas Convention Center" - address: "3150 Paradise Road" - city: "Las Vegas" - country: "United States" - link: "http://thedigitalmoneyforum.com/" - -- date: 2017-01-07 - title: "2017 Blockchain Fintech Summit of Silicon Valley" - venue: "Santa Clara Conventional Center, Great America Ballroom" - address: "5001 Great America Pkwy" - city: "Santa Clara" - country: "United States" - link: "https://www.eventbrite.com/e/the-blockchain-fintech-summit-of-silicon-valley-tickets-29506617086" - -- date: 2017-01-12 - title: "Blockchain Incredible Party" - venue: "Business Center Gulliver" - address: "Sportyvna Square, 1A, Tower A, 24th floor" - city: "Kiev" - country: "Ukraine" - link: "http://bip001.com/" - -- date: 2017-01-17 - title: "The North American Bitcoin Conference" - venue: "Knight Center Complex" - address: "400 SE 2nd Ave" - city: "Miami" - country: "United States" - link: "http://btcmiami.com/" - -- date: 2017-01-20 - title: "London Blockchain Week" - venue: "Grange Tower Bridge Hotel" - address: "45 Prescot Street" - city: "London" - country: "United Kingdom" - link: "https://www.blockchainweek.com/" - -- date: 2017-01-23 - title: "Blockchain Expo" - venue: "Olympia" - address: "Hammersmith Rd" - city: "London" - country: "United Kingdom" - link: "http://blockchain-expo.com/" - -- date: 2017-01-25 - title: "Finance Disrupted" - venue: "St. Pancras Renaissance Hotel" - address: "Euston Road" - city: "London" - country: "United Kingdom" - link: "http://www.economist.com/events-conferences/emea/finance-disrupted" - -- date: 2017-01-28 - title: "Bitcoin Brunch @ International Day of Privacy" - venue: "Urban Chef" - address: "Koningstraat 50/51" - city: "Arnhem Bitcoincity" - country: "The Netherlands" - link: "https://www.ArnhemBitcoinstad.nl" - -- date: 2017-02-14 - title: "Event Horizon" - venue: "Hofburg Palace" - address: "Michaelerkuppel, 1010" - city: "Vienna" - country: "Austria" - link: "http://eventhorizon2017.com/" - -- date: 2017-02-21 - title: "d10e" - venue: "Sheraton Hotel" - address: "Calea Dorobantilor 5-7" - city: "Bucharest" - country: "Romania" - link: "http://d10e.biz/" - -- date: 2017-02-27 - title: "Distributed: Markets" - venue: "Ritz Carlton" - address: "181 Peachtree St NE" - city: "Atlanta" - country: "United States" - link: "https://godistributed.com/events/markets/" - -- date: 2017-03-01 - title: "Blockchain Africa Conference 2017" - venue: "The Focus Rooms" - address: "The Core, The Core Shopping Centre, Leeuwkop Rd and Kikuyu Rd" - city: "Johannesburg" - country: "South Africa" - link: "http://blockchainafrica.co" - -- date: 2017-03-07 - title: "APAC Blockchain Conference" - venue: "Aerial UTS Function Centre" - address: "235 Jones Street, Level 7, Building 10" - city: "Sydney" - country: "Australia" - link: "http://www.questevents.com.au/apac-blockchain-conference-2017" - -- date: 2017-03-16 - title: "An Introduction to Cryptocurrencies, Bitcoin & Blockchain" - venue: "Holiday Inn Express" - address: "Birmingham Rd, WS14 0QP" - city: "Lichfield" - country: "United Kingdom" - link: "https://www.eventbrite.co.uk/e/an-introduction-to-crypto-currencies-bitcoin-the-blockchain-tickets-32417523686" - -- date: 2017-03-16 - title: "Oral Arguments on the Status of the BitLicense" - venue: "New York State Supreme Court" - address: "71 Thomas Street, Room 204, Part 46" - city: "New York" - country: "United States" - link: "https://www.meetup.com/Article-78-Against-NYDFS/events/238080585" - -- date: 2017-03-17 - title: "BlockchainUA Conference Kyiv" - venue: "Conference Hall, Oasis, Ultramarine, 3rd floor" - address: "Vasylia Lypkivskoho St, 1А, 02000" - city: "Kiev" - country: "Ukraine" - link: "http://blockchainua.com/" - -- date: 2017-03-18 - title: "The 2nd All-Ukrainian Blockchain Hackathon" - venue: "2nd floor" - address: "Verkhnii Val st, 10" - city: "Kiev" - country: "Ukraine" - link: "http://blockchainua-hackathon.com/en" - -- date: 2017-04-07 - title: "CoinFestUK" - venue: "Manchester Conference Centre" - address: "Sackville Street, M1 3BB" - city: "Manchester" - country: "United Kingdom" - link: "https://www.coinfestuk.org" - -- date: 2017-04-08 - title: "Coinfest" - venue: "Barley's Biergarten" - address: "Pauwstraat 4" - city: "Arnhem" - country: "The Netherlands" - link: "https://www.meetup.com/Arnhem-Bitcoin-Users/events/237435368/" - -- date: 2017-05-08 - title: "The Blockchain NZ 2017" - venue: "Viaduct Event Centre" - address: "161 Halsey St" - city: "Auckland" - country: "New Zealand" - link: "http://www.theblockchain.nz/" - -- date: 2017-05-19 - title: "Bitcoin Conference Prague" - venue: "Angelo Hotel Prague" - address: "Radlicka 1g, 150 00" - city: "Prague" - country: "Czech Republic" - link: "https://bitcoinconf.eu/en" - -- date: 2017-05-22 - title: "Consensus 2017" - venue: "New York Marriott Marquis" - address: "1535 Broadway" - city: "New York" - country: "United States" - link: "http://www.coindesk.com/events/consensus-2017/" - -- date: 2017-05-24 - title: "Blockchain Cruise 2017" - venue: "Anthem of the Seas" - address: "4 Port Terminal Blvd" - city: "Bayonne" - country: "United States" - link: "https://coinsbank.com/cruise" - -- date: 2017-06-01 - title: "Blockchain Expo Europe" - venue: "Estrel" - address: "Sonnenallee 225, 12057" - city: "Berlin" - country: "Germany" - link: "http://www.blockchain-expo.com/europe" - -- date: 2017-06-12 - title: "Blockchain Government Forum" - venue: "Innovation Centre" - address: "9 Bayview Avenue" - city: "Ottawa" - country: "Canada" - link: "https://blockchainforum.ca/" - -- date: 2017-06-25 - title: "An Introduction to Cryptocurrencies & the Blockchain" - venue: "Holiday Inn Express" - address: "Birmingham Road, Wall Island, WS14 0QP" - city: "Lichfield" - country: "United Kingdom" - link: "https://www.eventbrite.co.uk/e/an-introduction-to-cryptocurrencies-bitcoin-ethereum-the-blockchain-tickets-35404136726" - -- date: 2017-06-26 - title: "Money 2020 Europe" - venue: "Bella Center" - address: "Center Blvd. 5, 2300" - city: "Copenhagen" - country: "Denmark" - link: "https://www.money2020europe.com/" - -- date: 2017-06-27 - title: "Future of Fintech" - venue: "Jazz at Lincoln Center" - address: "10 Columbus Circle" - city: "New York" - country: "United States" - link: "http://events.cbinsights.com/future-of-fintech" - -- date: 2017-07-07 - title: "London Fintech Week" - venue: "Grange Tower Bridge Hotel" - address: "45 Prescot St." - city: "London" - country: "United Kingdom" - link: "https://fintechweek.com/" - -- date: 2017-07-10 - title: "How To Disrupt Everything - A Blockchain Event" - venue: "Kromhouthal" - address: "Gedempt Hamerkanaal 231, 1021 KP" - city: "Amsterdam" - country: "The Netherlands" - link: "http://amsterdam.keynote.ae/" - -- date: 2017-07-20 - title: "P2PFISY2017" - venue: "University College London" - address: "Gower Street" - city: "London" - country: "United Kingdom" - link: "http://www.p2pfisy.com" - -- date: 2017-07-22 - title: "State of Digital Money 2017" - venue: "Cross Campus Downtown Los Angeles" - address: "800 Wilshire Blvd, 90017" - city: "Los Angeles" - country: "United States" - link: "http://stateofdigitalmoney.com/" - -- date: 2017-09-12 - title: "The Advanced Digital Innovation Summit" - venue: "McCarthy Tetrault" - address: "745 Thurlow Street" - city: "Toronto" - country: "Canada" - link: "http://www.adisummit.com/" - -- date: 2017-07-16 - title: "CoinAgenda Europe" - venue: "World Trade Center Barcelona" - address: "Edif. Este, Moll de Barcelona, s/n 08039" - city: "Barcelona" - country: "Spain" - link: "http://coinagenda.com/#about" - -- date: 2017-08-14 - title: "Bitcoin & Ethereum Summit" - venue: "Mars Auditorium" - address: "101 College Street, M5G 1L7" - city: "Toronto" - country: "Canada" - link: "https://www.eventbrite.ca/e/bitcoin-ethereum-summit-tickets-34898442180" - -- date: 2017-08-14 - title: "Blockchain and Cryptocurrency Conference Nigeria 2017" - venue: "Radisson Blu Anchorage Hotel" - address: "Ozumba Mbadiwe Street" - city: "Lagos" - country: "Nigeria" - link: "http://blockchainnigeria.group/" - -- date: 2017-08-23 - title: "SegWit Activation Party Germany" - venue: "Room 77" - address: "Graefestr. 77, 10967" - city: "Berlin" - country: "Germany" - link: "http://segwit.party/" - -- date: 2017-08-23 - title: "SegWit Activation Party United States" - venue: "Bay Harbor Hotel" - address: "7700 West Courtney Campbell Causeway" - city: "Tampa" - country: "United States" - link: "http://segwit.party/" - -- date: 2017-08-23 - title: "SegWit Activation Party Poland" - venue: "Bez Slowa" - address: "Fosa 3, 02768" - city: "Warsaw" - country: "Poland" - link: "http://segwit.party/" - -- date: 2017-08-24 - title: "SegWit Activation Party Slovakia" - venue: "Progressbar Hackerspace" - address: "Michalska 3, 811 03" - city: "Bratislava" - country: "Slovakia" - link: "http://segwit.party/" - -- date: 2017-08-24 - title: "SegWit Activation Party Switzerland" - venue: "James Joyce Pub" - address: "8 Pelikanstrasse" - city: "Zurich" - country: "Switzerland" - link: "http://segwit.party/" - -- date: 2017-08-24 - title: "SegWit Activation Party France" - venue: "Sof's Bar" - address: "43 rue Saint Sauveur 75002" - city: "Paris" - country: "France" - link: "http://segwit.party/" - -- date: 2017-08-25 - title: "SegWit Activation Party Czech" - venue: "Utopia Cajovna" - address: "Divadelni 3, 60200" - city: "Brno" - country: "Czech" - link: "http://segwit.party/" - -- date: 2017-09-07 - title: "Blockchain & Bitcoin Conference Stockholm" - venue: "Elite Hotel Marina Tower" - address: "Saltsjoqvarns kaj 25, 131 71 Nacka" - city: "Stockholm" - country: "Sweden" - link: "https://stockholm.blockchainconf.world/en" - -- date: 2017-09-09 - title: "Breaking Bitcoin Conference" - venue: "16 Rue Jean Rey, 75015" - address: "16 Rue Jean Rey" - city: "Paris" - country: "France" - link: "https://breaking-bitcoin.com/" - -- date: 2017-09-14 - title: "CoinAlts Fund Symposium" - venue: "The St. Regis San Francisco" - address: "125 3rd Street" - city: "San Francisco" - country: "United States" - link: "https://www.coinaltsfundsymposium.com/" - -- date: 2017-09-20 - title: "ICO Event Moscow" - venue: "Technopolis Moscow" - address: "Volgogradskiy dist. 42" - city: "Moscow" - country: "Russia" - link: "https://icoevent.ru/en" - -- date: 2017-09-22 - title: "BlockchainUA Conference Kyiv" - venue: "Conference Hall Oasis" - address: "Vasylia Lypkivskoho St, 1А" - city: "Kiev" - country: "Ukraine" - link: "https://blockchainua.com/en" - -- date: 2017-09-25 - title: "World Blockchain Forum: Investments & ICOs" - venue: "St Paul's - 200 Aldersgate Conference Centre" - address: "St. Pauls 200 Aldersgate" - city: "London" - country: "United Kingdom" - link: "http://london.keynote.ae/" - -- date: 2017-09-26 - title: "Blockchain Life 2017" - venue: "Petrocongress" - address: "Lodeynopolskaya st. 5/2" - city: "Saint-Petersburg" - country: "Russia" - link: "https://blockchain-life.com" - -- date: 2017-10-12 - title: "Blockchain & Bitcoin Conference Kiev" - venue: "Vsi. Svoi | Lokatsia" - address: "Desytinnaya St. 12" - city: "Kiev" - country: "Ukraine" - link: "https://kiev.blockchainconf.world/en" - -- date: 2017-10-26 - title: "Global Fintech & Blockchain China Summit 2017" - venue: "Shanghai Marriott Hotel Riverside" - address: "No. 99 Jiangbin Road,Huangpu District" - city: "Shanghai" - country: "China" - link: "http://www.gfbccs.com" - -- date: 2017-10-28 - title: "BitBrighton - Crypto/Bitcoin Event" - venue: "Latest Music Bar" - address: "14 - 17 Manchester Street Brighton BN2 1TF" - city: "Brighton" - country: "United Kingdom" - link: "http://bitbrighton.org/" - -- date: 2017-10-28 - title: "Texas Bitcoin Conference III" - venue: "Canyon View Event Center" - address: "4800 Spicewood Springs Rd" - city: "Austin" - country: "United States" - link: "http://texasbitcoinconference.com/conferences" - -- date: 2017-11-15 - title: "Blockchain WithTheBest" - venue: "Online Conference" - address: "950 Battery Street, 94111" - city: "San Francisco" - country: "United States" - link: "http://blockchain.withthebest.com" - -- date: 2017-11-19 - title: "BitBrum" - venue: "The Studio." - address: "7 Cannon St. Birmingham. B2 5EP" - city: "Birmingham" - country: "United Kingdom" - link: "http://bitbrum.org" - -- date: 2017-11-29 - title: "Blockchain Expo" - venue: "Santa Clara Convention Center" - address: "5001 Great America Pkwy, Santa Clara, 95054" - city: "Santa Clara" - country: "United States" - link: "http://blockchain-expo.com/northamerica/" - - date: 2018-01-15 title: "Blockchain Cruise Asia 2018" venue: "Mariner of The Seas" diff --git a/_includes/devdoc/dash-core/rest/requests/get_block-notxdetails.md b/_includes/devdoc/dash-core/rest/requests/get_block-notxdetails.md index 064208ca..294d4c8e 100644 --- a/_includes/devdoc/dash-core/rest/requests/get_block-notxdetails.md +++ b/_includes/devdoc/dash-core/rest/requests/get_block-notxdetails.md @@ -72,6 +72,11 @@ GET /block/notxdetails/. p: "Required
(exactly 1)" d: "This block's version number. See [block version numbers][section block versions]" +- n: "→
`versionHex`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "*Added in Bitcoin Core 0.13.0*

This block's version number formatted in hexadecimal. See [BIP9 assignments]" + - n: "→
`merkleroot`" t: "string (hex)" p: "Required
(exactly 1)" @@ -129,25 +134,6 @@ GET /block/notxdetails/. {% enditemplate %} - - *Examples from Dash Core 0.12.2* Request a block in hex-encoded serialized block format: diff --git a/_includes/devdoc/dash-core/rest/requests/get_block.md b/_includes/devdoc/dash-core/rest/requests/get_block.md index 6abffeb3..360b3834 100644 --- a/_includes/devdoc/dash-core/rest/requests/get_block.md +++ b/_includes/devdoc/dash-core/rest/requests/get_block.md @@ -75,6 +75,11 @@ GET /block/. p: "Required
(exactly 1)" d: "This block's version number. See [block version numbers][section block versions]" +- n: "→
`versionHex`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "This block's version number formatted in hexadecimal." + - n: "→
`merkleroot`" t: "string (hex)" p: "Required
(exactly 1)" @@ -133,25 +138,6 @@ GET /block/. {% enditemplate %} - - *Examples from Dash Core 0.12.2* Request a block in hex-encoded serialized block format: diff --git a/_includes/devdoc/dash-core/rpcs/intro.md b/_includes/devdoc/dash-core/rpcs/intro.md index 9f900633..ccc5fe1d 100644 --- a/_includes/devdoc/dash-core/rpcs/intro.md +++ b/_includes/devdoc/dash-core/rpcs/intro.md @@ -37,7 +37,7 @@ languages lacking a suitable native client. The remainder of this section describes the Dash Core RPC protocol in detail. The Dash Core RPC service listens for HTTP `POST` requests on port 9998 in -mainnet mode, 19998 in testnet, or 18332 in regtest mode. The port number can be changed +mainnet mode, 19998 in testnet, or 19898 in regtest mode. The port number can be changed by setting `rpcport` in `dash.conf`. By default the RPC service binds to your server's [localhost][Localhost] loopback network interface so it's not accessible from other servers. diff --git a/_includes/devdoc/dash-core/rpcs/quick-reference.md b/_includes/devdoc/dash-core/rpcs/quick-reference.md index 8275d351..73040edd 100644 --- a/_includes/devdoc/dash-core/rpcs/quick-reference.md +++ b/_includes/devdoc/dash-core/rpcs/quick-reference.md @@ -19,13 +19,33 @@ Use v0.n.n in abbreviation title to prevent autocrossrefing. {% assign DASH_NOT_IMPLEMENTED='**Not Implemented**' %} + +{% assign DASH_NEW0_14_1='**New in Dash Core 0.14.1**' %} +{% assign DASH_UPDATED0_14_1='**Updated in Dash Core 0.14.1**' %} + + +{% assign DASH_NEW0_14_0='**New in Dash Core 0.14.0**' %} +{% assign DASH_UPDATED0_14_0='**Updated in Dash Core 0.14.0**' %} + + +{% assign DASH_NEW0_13_2='**New in Dash Core 0.13.2**' %} +{% assign DASH_UPDATED0_13_2='**Updated in Dash Core 0.13.2**' %} + + +{% assign DASH_NEW0_13_1='**New in Dash Core 0.13.1**' %} +{% assign DASH_UPDATED0_13_1='**Updated in Dash Core 0.13.1**' %} + + +{% assign DASH_NEW0_13_0='**New in Dash Core 0.13.0**' %} +{% assign DASH_UPDATED0_13_0='**Updated in Dash Core 0.13.0**' %} + -{% assign DASH_NEW0_12_3='**New in Dash Core 0.12.3**' %} -{% assign DASH_UPDATED0_12_3='**Updated in Dash Core 0.12.3**' %} +{% assign DASH_NEW0_12_3='*New in Dash Core 0.12.3*' %} +{% assign DASH_UPDATED0_12_3='*Updated in Dash Core 0.12.3*' %} -{% assign DASH_NEW0_12_2='**New in Dash Core 0.12.2**' %} -{% assign DASH_UPDATED0_12_2='**Updated in Dash Core 0.12.2**' %} +{% assign DASH_NEW0_12_2='*New in Dash Core 0.12.2*' %} +{% assign DASH_UPDATED0_12_2='*Updated in Dash Core 0.12.2*' %} {% assign DASH_NEW0_12_1='*New in Dash Core 0.12.1*' %} @@ -39,11 +59,11 @@ Use v0.n.n in abbreviation title to prevent autocrossrefing. {% assign DEPRECATED='**Deprecated**' %} -{% assign UPDATED0_14_0='**Updated in Bitcoin Core 0.14.1**' %} +{% assign UPDATED0_14_0='*Updated in Bitcoin Core 0.14.1*' %} -{% assign NEW0_14_0='**New in Bitcoin Core 0.14.0**' %} -{% assign UPDATED0_14_0='**Updated in Bitcoin Core 0.14.0**' %} +{% assign NEW0_14_0='*New in Bitcoin Core 0.14.0*' %} +{% assign UPDATED0_14_0='*Updated in Bitcoin Core 0.14.0*' %} {% assign UPDATED0_13_1='*Updated in Bitcoin Core 0.13.1*' %} @@ -97,24 +117,29 @@ These RPCs are all Dash-specific and not found in Bitcoin Core {% autocrossref %} * [GetBestBlockHash][rpc getbestblockhash]: {{summary_getBestBlockHash}} -* [GetBlock][rpc getblock]: {{summary_getBlock}} {{UPDATED0_13_0}} -* [GetBlockChainInfo][rpc getblockchaininfo]: {{summary_getBlockChainInfo}} {{DASH_UPDATED0_12_3}} {{UPDATED0_12_1}} +* [GetBestChainLock][rpc getbestchainlock]: {{summary_getBestChainLock}} {{DASH_NEW0_14_1}} +* [GetBlock][rpc getblock]: {{summary_getBlock}} {{DASH_UPDATED0_14_1}} +* [GetBlockChainInfo][rpc getblockchaininfo]: {{summary_getBlockChainInfo}} {{DASH_UPDATED0_14_1}} * [GetBlockCount][rpc getblockcount]: {{summary_getBlockCount}} * [GetBlockHash][rpc getblockhash]: {{summary_getBlockHash}} * [GetBlockHashes][rpc getblockhashes]: {{summary_getBlockHashes}} {{DASH_NEW0_12_1}} * [GetBlockHeader][rpc getblockheader]: {{summary_getBlockHeader}} {{NEW0_12_0}} * [GetBlockHeaders][rpc getblockheaders]: {{summary_getBlockHeaders}} {{DASH_NEW0_12_1}} +* [GetBlockStats][rpc getblockstats]: {{summary_getBlockStats}} {{DASH_NEW0_14_1}} * [GetChainTips][rpc getchaintips]: {{summary_getChainTips}} {{DASH_UPDATED0_12_3}} +* [GetChainTxStats][rpc getchaintxstats]: {{summary_getChainTxStats}} {{DASH_NEW0_14_1}} * [GetDifficulty][rpc getdifficulty]: {{summary_getDifficulty}} -* [GetMemPoolAncestors][rpc getmempoolancestors]: {{summary_getMemPoolAncestors}} {{DASH_NEW0_12_3}} {{NEW0_13_0}} -* [GetMemPoolDescendants][rpc getmempooldescendants]: {{summary_getMemPoolDescendants}} {{DASH_NEW0_12_3}} {{NEW0_13_0}} -* [GetMemPoolEntry][rpc getmempoolentry]: {{summary_getMemPoolEntry}} {{DASH_NEW0_12_3}} {{NEW0_13_0}} -* [GetMemPoolInfo][rpc getmempoolinfo]: {{summary_getMemPoolInfo}} {{UPDATED0_12_0}} -* [GetRawMemPool][rpc getrawmempool]: {{summary_getRawMemPool}} {{DASH_UPDATED0_12_3}} {{UPDATED0_13_0}} +* [GetMemPoolAncestors][rpc getmempoolancestors]: {{summary_getMemPoolAncestors}} {{DASH_UPDATED0_14_0}} {{NEW0_13_0}} +* [GetMemPoolDescendants][rpc getmempooldescendants]: {{summary_getMemPoolDescendants}} {{DASH_UPDATED0_14_0}} {{NEW0_13_0}} +* [GetMemPoolEntry][rpc getmempoolentry]: {{summary_getMemPoolEntry}} {{DASH_UPDATED0_14_0}} {{NEW0_13_0}} +* [GetMemPoolInfo][rpc getmempoolinfo]: {{summary_getMemPoolInfo}} {{DASH_UPDATED0_14_1}} +* [GetRawMemPool][rpc getrawmempool]: {{summary_getRawMemPool}} {{DASH_UPDATED0_14_1}} +* [GetMerkleBlocks][rpc getmerkleblocks]: {{summary_getMerkleBlocks}} {{DASH_NEW0_14_1}} +* [GetSpecialTxes][rpc getspecialtxes]: {{summary_getSpecialTxes}} {{DASH_NEW0_13_1}} * [GetSpentInfo][rpc getspentinfo]: {{summary_getSpentInfo}} {{DASH_NEW0_12_1}} -* [GetTxOut][rpc gettxout]: {{summary_getTxOut}} +* [GetTxOut][rpc gettxout]: {{summary_getTxOut}} {{DASH_UPDATED0_14_1}} * [GetTxOutProof][rpc gettxoutproof]: {{summary_getTxOutProof}} {{NEW0_11_0}} -* [GetTxOutSetInfo][rpc gettxoutsetinfo]: {{summary_getTxOutSetInfo}} +* [GetTxOutSetInfo][rpc gettxoutsetinfo]: {{summary_getTxOutSetInfo}} {{DASH_UPDATED0_14_1}} * [PreciousBlock][rpc preciousblock]: {{summary_preciousBlock}} {{DASH_NEW0_12_3}} {{NEW0_14_0}} * [PruneBlockChain][rpc pruneblockchain]: {{summary_pruneBlockChain}} {{DASH_NEW0_12_3}} {{NEW0_14_0}} * [VerifyChain][rpc verifychain]: {{summary_verifyChain}} @@ -128,11 +153,13 @@ These RPCs are all Dash-specific and not found in Bitcoin Core {% autocrossref %} -* [Debug][rpc debug]: {{summary_debug}} {{DASH_UPDATED0_12_3}} -* [GetInfo][rpc getinfo]: {{summary_getInfo}} {{DEPRECATED}} -* [GetMemoryInfo][rpc getmemoryinfo]: {{summary_getMemoryInfo}} {{DASH_NEW0_12_3}} {{NEW_14_0}} +* [Debug][rpc debug]: {{summary_debug}} {{DASH_UPDATED0_14_0}} +* [GetInfo][rpc getinfo]: {{summary_getInfo}} {{DASH_UPDATED0_14_1}} {{DEPRECATED}} +* [GetMemoryInfo][rpc getmemoryinfo]: {{summary_getMemoryInfo}} {{DASH_UPDATED0_14_1}} {{NEW_14_0}} * [Help][rpc help]: {{summary_help}} +* [Logging][rpc logging]: {{summary_logging}} {{DASH_NEW0_14_1}} * [Stop][rpc stop]: {{summary_stop}} +* [Uptime][rpc uptime]: {{summary_uptime}} {{DASH_NEW0_14_1}} {% endautocrossref %} @@ -142,21 +169,31 @@ These RPCs are all Dash-specific and not found in Bitcoin Core {% autocrossref %} -* [GetGovernanceInfo][rpc getgovernanceinfo]: {{summary_getGovernanceInfo}} {{DASH_UPDATED0_12_3}} +* [GetGovernanceInfo][rpc getgovernanceinfo]: {{summary_getGovernanceInfo}} {{DASH_UPDATED0_14_0}} * [GetPoolInfo][rpc getpoolinfo]: {{summary_getPoolInfo}} * [GetSuperblockBudget][rpc getsuperblockbudget]: {{summary_getSuperblockBudget}} -* [GObject][rpc gobject]: {{summary_gObject}} {{DASH_UPDATED0_12_3}} -* [Masternode][rpc masternode]: {{summary_masternode}} {{DASH_UPDATED0_12_3}} -* [MasternodeBroadcast][rpc masternodebroadcast]: {{summary_masternodeBroadcast}} -* [MasternodeList][rpc masternodelist]: {{summary_masternodeList}} {{DASH_UPDATED0_12_3}} -* [MnSync][rpc mnsync]: {{summary_mnSync}} +* [GObject][rpc gobject]: {{summary_gObject}} {{DASH_UPDATED0_14_1}} +* [Masternode][rpc masternode]: {{summary_masternode}} {{DASH_UPDATED0_14_0}} +* [MasternodeList][rpc masternodelist]: {{summary_masternodeList}} {{DASH_UPDATED0_14_0}} +* [MnSync][rpc mnsync]: {{summary_mnSync}} {{DASH_UPDATED0_14_0}} * [PrivateSend][rpc privatesend]: {{summary_privateSend}} {{DASH_UPDATED0_12_3}} -* [SentinelPing][rpc sentinelping]: {{summary_sentinelPing}} * [Spork][rpc spork]: {{summary_spork-rpc}} * [VoteRaw][rpc voteraw]: {{summary_voteRaw}} {% endautocrossref %} +#### Evolution RPCs +{:.no_toc} + + +{% autocrossref %} + +* [BLS][rpc bls]: {{summary_bls}} {{DASH_UPDATED0_14_0}} +* [ProTx][rpc protx]: {{summary_proTx}} {{DASH_UPDATED0_14_0}} +* [Quorum][rpc quorum]: {{summary_quorum}} {{DASH_NEW0_14_0}} + +{% endautocrossref %} + #### Generating RPCs {:.no_toc} @@ -174,10 +211,10 @@ These RPCs are all Dash-specific and not found in Bitcoin Core {% autocrossref %} -* [GetBlockTemplate][rpc getblocktemplate]: {{summary_getBlockTemplate}} {{DASH_UPDATED0_12_3}} +* [GetBlockTemplate][rpc getblocktemplate]: {{summary_getBlockTemplate}} {{DASH_UPDATED0_13_0}} * [GetMiningInfo][rpc getmininginfo]: {{summary_getMiningInfo}} {{UPDATED0_14_0}} * [GetNetworkHashPS][rpc getnetworkhashps]: {{summary_getNetworkHashPS}} -* [PrioritiseTransaction][rpc prioritisetransaction]: {{summary_prioritiseTransaction}} +* [PrioritiseTransaction][rpc prioritisetransaction]: {{summary_prioritiseTransaction}} {{UPDATED0_14_0}} * [SubmitBlock][rpc submitblock]: {{summary_submitBlock}} {% endautocrossref %} @@ -190,12 +227,12 @@ These RPCs are all Dash-specific and not found in Bitcoin Core * [AddNode][rpc addnode]: {{summary_addNode}} {{UPDATED0_14_0}} * [ClearBanned][rpc clearbanned]: {{summary_clearBanned}} {{NEW0_12_0}} -* [DisconnectNode][rpc disconnectnode]: {{summary_disconnectNode}} {{NEW0_12_0}} {{UPDATED0_14_1}} +* [DisconnectNode][rpc disconnectnode]: {{summary_disconnectNode}} {{DASH_UPDATED0_14_1}} {{UPDATED0_14_1}} * [GetAddedNodeInfo][rpc getaddednodeinfo]: {{summary_getAddedNodeInfo}} {{DASH_UPDATED0_12_3}} {{UPDATED0_14_0}} * [GetConnectionCount][rpc getconnectioncount]: {{summary_getConnectionCount}} * [GetNetTotals][rpc getnettotals]: {{summary_getNetTotals}} {{UPDATED0_12_0}} -* [GetNetworkInfo][rpc getnetworkinfo]: {{summary_getNetworkInfo}} {{DASH_UPDATED0_12_3}} {{UPDATED0_13_0}} -* [GetPeerInfo][rpc getpeerinfo]: {{summary_getPeerInfo}} {{UPDATED0_13_0}} +* [GetNetworkInfo][rpc getnetworkinfo]: {{summary_getNetworkInfo}} {{DASH_UPDATED0_14_0}} +* [GetPeerInfo][rpc getpeerinfo]: {{summary_getPeerInfo}} {{DASH_UPDATED0_14_1}} * [ListBanned][rpc listbanned]: {{summary_listBanned}} {{NEW0_12_0}} * [Ping][rpc ping]: {{summary_ping-rpc}} * [SetBan][rpc setban]: {{summary_setBan}} {{NEW0_12_0}} @@ -209,12 +246,13 @@ These RPCs are all Dash-specific and not found in Bitcoin Core {% autocrossref %} +* [CombineRawTransaction][rpc combinerawtransaction]: {{summary_combineRawTransaction}} {{DASH_NEW0_14_1}} * [CreateRawTransaction][rpc createrawtransaction]: {{summary_createRawTransaction}} {{DASH_UPDATED0_12_3}} {{UPDATED0_14_1}} * [DecodeRawTransaction][rpc decoderawtransaction]: {{summary_decodeRawTransaction}} {{UPDATED0_13_0}} * [DecodeScript][rpc decodescript]: {{summary_decodeScript}} -* [FundRawTransaction][rpc fundrawtransaction]: {{summary_fundRawTransaction}} {{DASH_UPDATED0_12_3}} {{UPDATED0_14_0}} -* [GetRawTransaction][rpc getrawtransaction]: {{summary_getRawTransaction}} {{DASH_UPDATED0_12_3}} {{UPDATED0_14_0}} -* [SendRawTransaction][rpc sendrawtransaction]: {{summary_sendRawTransaction}} +* [FundRawTransaction][rpc fundrawtransaction]: {{summary_fundRawTransaction}} {{DASH_UPDATED0_14_1}} +* [GetRawTransaction][rpc getrawtransaction]: {{summary_getRawTransaction}} {{DASH_UPDATED0_14_1}} +* [SendRawTransaction][rpc sendrawtransaction]: {{summary_sendRawTransaction}} {{DASH_UPDATED0_14_1}} * [SignRawTransaction][rpc signrawtransaction]: {{summary_signRawTransaction}} {% endautocrossref %} @@ -227,10 +265,7 @@ These RPCs are all Dash-specific and not found in Bitcoin Core * [CreateMultiSig][rpc createmultisig]: {{summary_createMultiSig}} * [EstimateFee][rpc estimatefee]: {{summary_estimateFee}} -* [EstimatePriority][rpc estimatepriority]: {{summary_estimatePriority}} {{DEPRECATED}} -* [EstimateSmartFee][rpc estimatesmartfee]: {{summary_estimateSmartFee}} {{DEPRECATED}} -* [EstimateSmartPriority][rpc estimatesmartpriority]: {{summary_estimateSmartPriority}} {{DEPRECATED}} -* [SetBIP69Enabled][rpc setbip69enabled]: {{summary_setBIP69Enabled}} {{DASH_NEW0_12_3}} +* [EstimateSmartFee][rpc estimatesmartfee]: {{summary_estimateSmartFee}} {{DASH_UPDATED0_14_1}} * [SignMessageWithPrivKey][rpc signmessagewithprivkey]: {{summary_signMessageWithPrivKey}} {{DASH_NEW0_12_3}} {{NEW0_13_0}} * [ValidateAddress][rpc validateaddress]: {{summary_validateAddress}} {{DASH_UPDATED0_12_3}} {{UPDATED0_13_0}} * [VerifyMessage][rpc verifymessage]: {{summary_verifyMessage}} @@ -248,21 +283,22 @@ with [wallet support][]{:#term-wallet-support}{:.term}, which is the default. * [AbandonTransaction][rpc abandontransaction]: {{summary_abandonTransaction}} {{NEW0_12_0}} +* [AbortRescan][rpc abortrescan]: {{summary_abortrescan}} {{DASH_NEW0_14_1}} * [AddMultiSigAddress][rpc addmultisigaddress]: {{summary_addMultiSigAddress}} * [BackupWallet][rpc backupwallet]: {{summary_backupWallet}} * [DumpHDInfo][rpc dumphdinfo]: {{summary_dumpHDInfo}} {{DASH_NEW0_12_2}} * [DumpPrivKey][rpc dumpprivkey]: {{summary_dumpPrivKey}} -* [DumpWallet][rpc dumpwallet]: {{summary_dumpWallet}} +* [DumpWallet][rpc dumpwallet]: {{summary_dumpWallet}} {{DASH_UPDATED0_13_0}} * [EncryptWallet][rpc encryptwallet]: {{summary_encryptWallet}} * [GetAccount][rpc getaccount]: {{summary_getAccount}} {{DEPRECATED}} * [GetAccountAddress][rpc getaccountaddress]: {{summary_getAccountAddress}} {{DEPRECATED}} * [GetAddressesByAccount][rpc getaddressesbyaccount]: {{summary_getAddressesByAccount}} {{DEPRECATED}} -* [GetBalance][rpc getbalance]: {{summary_getBalance}} +* [GetBalance][rpc getbalance]: {{summary_getBalance}} {{DASH_UPDATED0_13_0}} * [GetNewAddress][rpc getnewaddress]: {{summary_getNewAddress}} * [GetRawChangeAddress][rpc getrawchangeaddress]: {{summary_getRawChangeAddress}} -* [GetReceivedByAccount][rpc getreceivedbyaccount]: {{summary_getReceivedByAccount}} {{DEPRECATED}} -* [GetReceivedByAddress][rpc getreceivedbyaddress]: {{summary_getReceivedByAddress}} -* [GetTransaction][rpc gettransaction]: {{summary_getTransaction}} {{UPDATED0_12_0}} +* [GetReceivedByAccount][rpc getreceivedbyaccount]: {{summary_getReceivedByAccount}} {{DASH_UPDATED0_13_0}} {{DEPRECATED}} +* [GetReceivedByAddress][rpc getreceivedbyaddress]: {{summary_getReceivedByAddress}} {{DASH_UPDATED0_13_0}} +* [GetTransaction][rpc gettransaction]: {{summary_getTransaction}} {{DASH_UPDATED0_14_0}} * [GetUnconfirmedBalance][rpc getunconfirmedbalance]: {{summary_getUnconfirmedBalance}} * [GetWalletInfo][rpc getwalletinfo]: {{summary_getWalletInfo}} {{DASH_UPDATED0_12_3}} * [ImportAddress][rpc importaddress]: {{summary_importAddress}} @@ -272,34 +308,33 @@ default. * [ImportPrunedFunds][rpc importprunedfunds]: {{summary_importPrunedFunds}} {{DASH_NEW0_12_3}} {{NEW0_13_0}} * [ImportPubKey][rpc importpubkey]: {{summary_importPubKey}} * [ImportWallet][rpc importwallet]: {{summary_importWallet}} -* [InstantSendToAddress][rpc instantsendtoaddress]: {{summary_instantSendToAddress}} * [KeePass][rpc keepass]: {{summary_keepass}} {{DARKCOIN_NEW0_11_0}} * [KeyPoolRefill][rpc keypoolrefill]: {{summary_keyPoolRefill}} -* [ListAccounts][rpc listaccounts]: {{summary_listAccounts}} {{DEPRECATED}} +* [ListAccounts][rpc listaccounts]: {{summary_listAccounts}} {{DASH_UPDATED0_13_0}} {{DEPRECATED}} * [ListAddressBalances][rpc listaddressbalances]: {{summary_listAddressBalances}} {{DASH_NEW0_12_3}} * [ListAddressGroupings][rpc listaddressgroupings]: {{summary_listAddressGroupings}} * [ListLockUnspent][rpc listlockunspent]: {{summary_listLockUnspent}} -* [ListReceivedByAccount][rpc listreceivedbyaccount]: {{summary_listReceivedByAccount}} {{DEPRECATED}} -* [ListReceivedByAddress][rpc listreceivedbyaddress]: {{summary_listReceivedByAddress}} -* [ListSinceBlock][rpc listsinceblock]: {{summary_listSinceBlock}} -* [ListTransactions][rpc listtransactions]: {{summary_listTransactions}} {{UPDATED0_12_1}} -* [ListUnspent][rpc listunspent]: {{summary_listUnspent}} {{DASH_UPDATED0_12_3}} {{UPDATED0_13_0}} +* [ListReceivedByAccount][rpc listreceivedbyaccount]: {{summary_listReceivedByAccount}} {{DASH_UPDATED0_13_0}} {{DEPRECATED}} +* [ListReceivedByAddress][rpc listreceivedbyaddress]: {{summary_listReceivedByAddress}} {{DASH_UPDATED0_13_0}} +* [ListSinceBlock][rpc listsinceblock]: {{summary_listSinceBlock}} {{DASH_UPDATED0_14_1}} +* [ListTransactions][rpc listtransactions]: {{summary_listTransactions}} {{DASH_UPDATED0_14_0}} +* [ListUnspent][rpc listunspent]: {{summary_listUnspent}} {{DASH_UPDATED0_14_1}} +* [ListWallets][rpc listwallets]: {{summary_listWallets}} {{DASH_NEW0_14_1}} * [LockUnspent][rpc lockunspent]: {{summary_lockUnspent}} * [Move][rpc move]: {{summary_move}} {{DEPRECATED}} * [RemovePrunedFunds][rpc removeprunedfunds]: {{summary_removePrunedFunds}} {{DASH_NEW0_12_3}} {{NEW0_13_0}} -* [SendFrom][rpc sendfrom]: {{summary_sendFrom}} {{DEPRECATED}} -* [SendMany][rpc sendmany]: {{summary_sendMany}} -* [SendToAddress][rpc sendtoaddress]: {{summary_sendToAddress}} +* [SendFrom][rpc sendfrom]: {{summary_sendFrom}} {{DASH_UPDATED0_13_0}} {{DEPRECATED}} +* [SendMany][rpc sendmany]: {{summary_sendMany}} {{DASH_UPDATED0_14_1}} +* [SendToAddress][rpc sendtoaddress]: {{summary_sendToAddress}} {{DASH_UPDATED0_14_1}} * [SetAccount][rpc setaccount]: {{summary_setAccount}} {{DEPRECATED}} +* [SetPrivateSendAmount][rpc setprivatesendamount]: {{summary_setPrivateSendAmount}} +* [SetPrivateSendRounds][rpc setprivatesendrounds]: {{summary_setPrivateSendRounds}} * [SetTxFee][rpc settxfee]: {{summary_setTxFee}} * [SignMessage][rpc signmessage]: {{summary_signMessage}} * [WalletLock][rpc walletlock]: {{summary_walletLock}} * [WalletPassphrase][rpc walletpassphrase]: {{summary_walletPassphrase}} * [WalletPassphraseChange][rpc walletpassphrasechange]: {{summary_walletPassphraseChange}} -* {{DASH_NOT_IMPLEMENTED}} [AddWitnessAddress][rpc addwitnessaddress]: {{summary_addWitnessAddress}} {{NEW0_13_0}} -* {{DASH_NOT_IMPLEMENTED}} [BumpFee][rpc bumpfee]: {{summary_bumpFee}} {{NEW0_14_0}} - {% endautocrossref %} #### Removed RPCs @@ -308,8 +343,12 @@ default. {% autocrossref %} +* [EstimatePriority][rpc estimatepriority]: {{summary_estimatePriority}} +* [EstimateSmartPriority][rpc estimatesmartpriority]: {{summary_estimateSmartPriority}} * [GetHashesPerSec][rpc gethashespersec]: {{summary_getHashesPerSec}} * [GetWork][rpc getwork]: {{summary_getWork}} * [GetGenerate][rpc getgenerate]: {{summary_getGenerate}} +* [MasternodeBroadcast][rpc masternodebroadcast]: {{summary_masternodeBroadcast}} +* [SentinelPing][rpc sentinelping]: {{summary_sentinelPing}} * [SetGenerate][rpc setgenerate]: {{summary_setGenerate}} {% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/abortrescan.md b/_includes/devdoc/dash-core/rpcs/rpcs/abortrescan.md new file mode 100644 index 00000000..409798ca --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/abortrescan.md @@ -0,0 +1,45 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/abortrescan.md" %} + + +##### AbortRescan +{% include helpers/subhead-links.md %} + +{% assign summary_abortRescan="Stops current wallet rescan" %} + +{% autocrossref %} + +The `abortrescan` RPC {{summary_abortRescan}} + +Stops current wallet rescan triggered e.g. by an `importprivkey` RPC call. + +*Parameters: none* + +*Result---`true` on success* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "null" + p: "Required
(exactly 1)" + d: "`true` when the command was successful or `false` if not successful." +{% enditemplate %} + +*Example from Dash Core 0.14.1* + +Abort the running wallet rescan + +{% highlight bash %} +dash-cli -testnet abortrescan +{% endhighlight %} + +Result: +{% highlight text %} +true +{% endhighlight %} + +*See also: none* + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/addwitnessaddress.md b/_includes/devdoc/dash-core/rpcs/rpcs/addwitnessaddress.md deleted file mode 100644 index 1838291c..00000000 --- a/_includes/devdoc/dash-core/rpcs/rpcs/addwitnessaddress.md +++ /dev/null @@ -1,67 +0,0 @@ -{% comment %} -This file is licensed under the MIT License (MIT) available on -http://opensource.org/licenses/MIT. -{% endcomment %} -{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/addwitnessaddress.md" %} - -##### AddWitnessAddress -{% include helpers/subhead-links.md %} - -{% assign summary_addWitnessAddress="adds a witness address for a script (with pubkey or redeem script known)." %} - - - -{% autocrossref %} - -*Added in Bitcoin Core 0.13.0* - -{{WARNING_ICON}} **_Not implemented in Dash Core (as of 0.12.2)_** - -{% comment %} -*Requires wallet support. Requires an unlocked wallet or an unencrypted wallet.* - -The `addwitnessaddress` RPC {{summary_addWitnessAddress}} - -*Parameter #1---the witness address* - -{% itemplate ntpd1 %} -- n: "Address" - t: "string (base58)" - p: "Required
(exactly 1)" - d: "A witness address that gets added to a script. Needs to be in the wallet and uncompressed" - -{% enditemplate %} - -*Result---the witness script* - -{% itemplate ntpd1 %} -- n: "`result`" - t: "string (base58)" - p: "Required
(exactly 1)" - d: "The value of the new address (P2SH of witness script)" - -{% enditemplate %} - -*Example from Bitcoin Core 0.13.1* - -{% highlight bash %} -bitcoin-cli addwitnessaddress 1BRo7qrYHMPrzdBDzfjmzteBdYAyTMXW75 -{% endhighlight %} - -Result: - -The RPC is disabled by default on mainnet as long as Segregated Witness has not been activated. -`-walletprematurewitness` enables the RPC. - -{% highlight text %} -3LfAujMsBHgQKoxLn59dVbeYPmfUrHSAQb -{% endhighlight %} - -*See also* - -* [BIP-141 - Segregated Witness](https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki) -* [BIP-142 - Address Format for Segregated Witness](https://github.com/bitcoin/bips/blob/master/bip-0142.mediawiki) - -{% endcomment %} - -{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/bls.md b/_includes/devdoc/dash-core/rpcs/rpcs/bls.md new file mode 100644 index 00000000..09294ff4 --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/bls.md @@ -0,0 +1,117 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/bls.md" %} + + + +##### BLS +{% include helpers/subhead-links.md %} + +{% assign summary_bls="provides a set of commands to execute BLS-related actions." %} + +{% autocrossref %} + +*Added in Dash Core 0.13.0* + +The `bls` RPC {{summary_bls}} + +{% endautocrossref %} + +###### BLS Generate + + +{% autocrossref %} + +The `bls generate` RPC creates a new BLS secret/public key pair. + +*Parameters: none* + +*Result---a secret/public key pair* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object" + p: "Required
(exactly 1)" + d: "BLS key pair" + +- n: "→
`secret`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "A BLS secret key" + +- n: "→
`public`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "A BLS public key" +{% enditemplate %} + +*Example from Dash Core 0.13.0* + +{% highlight bash %} +dash-cli -testnet bls generate +{% endhighlight %} + +Result: +{% highlight json %} +{ + "secret": "52f35cd3d977a505485f2474e7e71ef3f60f859603d72ad6b0fa7f7bd163e144", + "public": "885d01d746c3e4d2093b0975de2d8c1f3e5a2c3e8fdaaed929f86fc9fbb278a095248163c101a2456650b415776b7990" +} +{% endhighlight %} + +{% endautocrossref %} + +###### BLS FromSecret + + +{% autocrossref %} + +The `bls fromsecret` RPC parses a BLS secret key and returns the secret/public key pair. + +*Parameter #1---secret key* + +{% itemplate ntpd1 %} +- n: "`secret`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The BLS secret key" +{% enditemplate %} + +*Result---the secret/public key pair* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object" + p: "Required
(exactly 1)" + d: "BLS key pair" + +- n: "→
`secret`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "A BLS secret key" + +- n: "→
`public`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "A BLS public key" +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet bls fromsecret 52f35cd3d977a505485f2474e7e71ef3f60f859603d72ad6b0fa7f7bd163e144 +{% endhighlight %} + +Result: +{% highlight json %} +{ + "secret": "52f35cd3d977a505485f2474e7e71ef3f60f859603d72ad6b0fa7f7bd163e144", + "public": "885d01d746c3e4d2093b0975de2d8c1f3e5a2c3e8fdaaed929f86fc9fbb278a095248163c101a2456650b415776b7990" +} +{% endhighlight %} + +*See also: none* + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/bumpfee.md b/_includes/devdoc/dash-core/rpcs/rpcs/bumpfee.md deleted file mode 100644 index e91c992b..00000000 --- a/_includes/devdoc/dash-core/rpcs/rpcs/bumpfee.md +++ /dev/null @@ -1,123 +0,0 @@ -{% comment %} -This file is licensed under the MIT License (MIT) available on -http://opensource.org/licenses/MIT. -{% endcomment %} -{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/bumpfee.md" %} - -##### BumpFee -{% include helpers/subhead-links.md %} - -{% assign summary_bumpFee="replaces an unconfirmed wallet transaction that signaled RBF with a new transaction that pays a higher fee." %} - - - -{% autocrossref %} - -*Added in Bitcoin Core 0.14.0* - -{{WARNING_ICON}} **_Not implemented in Dash Core (as of 0.12.2)_** - -{% comment %} -*Requires wallet support. Wallet must be unlocked.* - -The `bumpfee` RPC {{summary_bumpFee}} The increased fee is deducted from the change output. The command fails if the change output is too small to increase the fee or -if the wallet or mempool contains a transaction that spends one of the transaction's outputs. The `-walletrbf` option needs to be enabled (default is `false`). - -*Parameter #1---The TXID of the transaction* - -{% itemplate ntpd1 %} -- n: "TXID" - t: "string (hex)" - p: "Required
(exactly 1)" - d: "The id of the transaction" - -{% enditemplate %} - -*Parameter #2---Additional options* - -{% itemplate ntpd1 %} -- n: "Options" - t: "Object" - p: "Optional
(0 or 1)" - d: "Additional options" - -- n: "→
`confTarget`" - t: "numeric (int)" - p: "Optional
(0 or 1)" - d: "The confirmation target in blocks. Based on this value the new fee will be calculated using the same code as the `estimatefee` RPC. If not set, the default target of ´6´ blocks will be used" - -- n: "→
`totalFee`" - t: "numeric (satoshis)" - p: "Optional
(0 or 1)" - d: "The total fee to pay in satoshis (not the feerate). The actual fee can be higher in rare cases if the change output is close to the dust limit" - -- n: "→
`replaceable`" - t: "bool" - p: "Optional
(0 or 1)" - d: "Whether the new transaction should still be BIP 125 replaceable. Even if set to `false` the transaction may still be replacable, for example if it has unconfirmed ancestors which are replaceable. The default is `true`" - -{% enditemplate %} - -*Result---information about the new transaction* - -{% itemplate ntpd1 %} -- n: "`result`" - t: "object" - p: "Required
(exactly 1)" - d: "An object including information about the new transaction" - -- n: "→
`txid`" - t: "string (hex)" - p: "Required
(exactly 1)" - d: "The id of the new transaction" - -- n: "→
`origfee`" - t: "numeric (bitcoins)" - p: "Required
(exactly 1)" - d: "The fee of the replaced transaction" - -- n: "→
`fee`" - t: "numeric (bitcoins)" - p: "Required
(exactly 1)" - d: "The fee of the new transaction" - -- n: "→
`errors`" - t: "array" - p: "Required
(exactly 1)" - d: "Errors encountered during processing (may be empty)" - -{% enditemplate %} - -*Example from Bitcoin Core 0.14.1* - -{% highlight bash %} -bitcoin-cli -testnet bumpfee d4a33e0cabaz723149e1fcab4e033a40173\ -88a644c65370e3cb06ba2f0e13975\ -'{ - "totalFee": 4000, - "replaceable": false -}' -{% endhighlight %} - -Result: - -{% highlight json %} -{ - "txid": "37a55ce49636977k79bcb04ee1143573b570b1743e09660e79e7ec3320968ca54", - "origfee": 0.00002450, - "fee": 0.00004000, - "errors": "" -} -{% endhighlight %} - -*See also* - -* [CreateRawTransaction][rpc createrawtransaction]: {{summary_createRawTransaction}} -* [FundRawTransaction][rpc fundrawtransaction]: {{summary_fundRawTransaction}} -* [SignRawTransaction][rpc signrawtransaction]: {{summary_signRawTransaction}} -* [SendRawTransaction][rpc sendrawtransaction]: {{summary_sendRawTransaction}} -* [Serialized Transaction Format][raw transaction format] - -{% endcomment %} - -{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/combinerawtransaction.md b/_includes/devdoc/dash-core/rpcs/rpcs/combinerawtransaction.md new file mode 100644 index 00000000..21d3c3e6 --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/combinerawtransaction.md @@ -0,0 +1,78 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/combinerawtransaction.md" %} + + + +##### CombineRawTransaction +{% include helpers/subhead-links.md %} + +{% assign summary_combineRawTransaction="combine multiple partially signed transactions into one transaction." %} + +{% autocrossref %} + +The `combinerawtransaction` RPC {{summary_combineRawTransaction}} + +The combined transaction may be another partially signed transaction or a +fully signed transaction. + +*Parameter #1---txs* + +{% itemplate ntpd1 %} +- n: "txs" + t: "string" + p: "Required" + d: "A json array of hex strings of partially signed transactions" + +{% enditemplate %} + +*Result---hex-encoded raw transaction with signature(s)* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string" + p: "Required
(Exactly 1)" + d: "The resulting raw transaction in serialized transaction format encoded as hex." + +{% enditemplate %} + +*Example from Dash Core 0.14.1* + +The following example shows a fully signed two input transaction being assembled +by combining two partially signed transactions. The first hex-encoded string is +the transaction with only the first input signed. The second hex-encoded string is +the transaction with only the second input signed. + +{% highlight bash %} +dash-cli combinerawtransaction '[ + "0200000002fdb27b4f2b80a5fd3b96602618a6ccf7bdde504bf90989610b19ed6ecd769520010000006b483045022100f8770316327966fb1972338d14db8d38048455da8b62f6350b117c797cea459e02206c63c103cf53ce1d24a313b3e6853913fa14febafd733e683b6eb46a7beec0fa012103c67d86944315838aea7ec80d390b5d09b91b62483370d4979da5ccf7a7df77a9ffffffff0d052e9b13c53bb342d772767732ffe4fa9f1c150629d3fa79655267baa7c86a0100000000ffffffff0200ca9a3b000000001976a9144139b147b5cef5fef5bcdb02fcdf55e426f74dbb88ac00daf89a000000001976a91465f53f2095c99ce152ff3bc8a8f027d8a77cbdcb88ac00000000", + "0200000002fdb27b4f2b80a5fd3b96602618a6ccf7bdde504bf90989610b19ed6ecd7695200100000000ffffffff0d052e9b13c53bb342d772767732ffe4fa9f1c150629d3fa79655267baa7c86a010000006b4830450221008c3abc11ea84cc98cf674afc5b6d3d078d672768d289f2ab976ea4b2a49129fc022008470458b1b179800e7f5348196d510d2f147e69fe836c94135fc5c620312acd012102912ba98d6641f79864d04d41523167f5db267e45d1633e9243a0be7efb675719ffffffff0200ca9a3b000000001976a9144139b147b5cef5fef5bcdb02fcdf55e426f74dbb88ac00daf89a000000001976a91465f53f2095c99ce152ff3bc8a8f027d8a77cbdcb88ac00000000" +]' +{% endhighlight %} + +Result: +{% highlight bash %} +0200000002fdb27b4f2b80a5fd3b96602618a6ccf7bdde504bf90989610b19ed6ecd7695\ +20010000006b483045022100f8770316327966fb1972338d14db8d38048455da8b62f635\ +0b117c797cea459e02206c63c103cf53ce1d24a313b3e6853913fa14febafd733e683b6e\ +b46a7beec0fa012103c67d86944315838aea7ec80d390b5d09b91b62483370d4979da5cc\ +f7a7df77a9ffffffff0d052e9b13c53bb342d772767732ffe4fa9f1c150629d3fa796552\ +67baa7c86a010000006b4830450221008c3abc11ea84cc98cf674afc5b6d3d078d672768\ +d289f2ab976ea4b2a49129fc022008470458b1b179800e7f5348196d510d2f147e69fe83\ +6c94135fc5c620312acd012102912ba98d6641f79864d04d41523167f5db267e45d1633e\ +9243a0be7efb675719ffffffff0200ca9a3b000000001976a9144139b147b5cef5fef5bc\ +db02fcdf55e426f74dbb88ac00daf89a000000001976a91465f53f2095c99ce152ff3bc8\ +a8f027d8a77cbdcb88ac00000000 +{% endhighlight %} + +*See also:* + +* [CreateRawTransaction][rpc createrawtransaction]: {{summary_createRawTransaction}} +* [DecodeRawTransaction][rpc decoderawtransaction]: {{summary_decodeRawTransaction}} +* [SignRawTransaction][rpc signrawtransaction]: {{summary_signRawTransaction}} +* [SendRawTransaction][rpc sendrawtransaction]: {{summary_sendRawTransaction}} +* [Serialized Transaction Format][raw transaction format] + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/createrawtransaction.md b/_includes/devdoc/dash-core/rpcs/rpcs/createrawtransaction.md index 72a3940f..f768d588 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/createrawtransaction.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/createrawtransaction.md @@ -110,6 +110,7 @@ cfc9f32ef388acc0a8f9be010000001976a914811eacc14db8ebb5b64486dc43400c0226b4\ *See also* +* [CombineRawTransaction][rpc combinerawtransaction]: {{summary_combineRawTransaction}} * [DecodeRawTransaction][rpc decoderawtransaction]: {{summary_decodeRawTransaction}} * [SignRawTransaction][rpc signrawtransaction]: {{summary_signRawTransaction}} * [SendRawTransaction][rpc sendrawtransaction]: {{summary_sendRawTransaction}} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/debug.md b/_includes/devdoc/dash-core/rpcs/rpcs/debug.md index 28725336..a8424105 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/debug.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/debug.md @@ -3,6 +3,7 @@ This file is licensed under the MIT License (MIT) available on http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/debug.md" %} + ##### Debug {% include helpers/subhead-links.md %} @@ -19,11 +20,10 @@ The `debug` RPC {{summary_debug}} - n: "Debug category" t: "string" p: "Required
(1 or more)" - d: "The debug category to activate. Use a `+` to specify multiple categories. Categories will be one of the following:
• `0` - Disables all categories
• `1` - Enables all categories
• `addrman`
• `alert`
• `bench`
• `coindb`
• `db`
• `lock`
• `rand`
• `rpc`
• `selectcoins`
• `mempool`
• `mempoolrej`
• `net`
• `proxy`
• `prune`
• `http`
• `libevent`
• `tor`
• `zmq`
• `dash`
• `privatesend`
• `instantsend`
• `masternode`
• `spork`
• `keepass`
• `mnpayments`
• `gobject`
" - + d: "The debug category to activate. Use a `+` to specify multiple categories. Categories will be one of the following:
• `0` - Disables all categories
• `1` or `all` - Enables all categories
• `addrman`
• `bench`
• `cmpctblock`
• `coindb`
• `db`
• `estimatefee`
• `http`
• `leveldb`
• `libevent`
• `mempool`
• `mempoolrej`
• `net`
• `proxy`
• `prune`
• `qt`
• `rand`
• `reindex`
• `rpc`
• `selectcoins`
• `tor`
• `zmq`
• `dash` (all subcategories)

The `dash` sub-categories can be enabled individually:
• `chainlocks`
• `gobject`
• `instantsend`
• `keepass`
• `llmq`
• `llmq-dkg`
• `llmq-sigs`
• `mnpayments`
• `mnsync`
• `privatesend`
• `spork`


Note: No error will be thrown even if the specified category doesn't match any of the above" {% enditemplate %} -*Example from Dash Core 0.12.3* +*Example from Dash Core 0.14.1* {% highlight bash %} dash-cli -testnet debug "net+mempool" @@ -35,6 +35,8 @@ Result: Debug mode: net+mempool {% endhighlight %} -*See also: none* +*See also* + +* [Logging][rpc logging]: {{summary_logging}} {% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/decoderawtransaction.md b/_includes/devdoc/dash-core/rpcs/rpcs/decoderawtransaction.md index 7b772442..a584f4db 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/decoderawtransaction.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/decoderawtransaction.md @@ -3,6 +3,7 @@ This file is licensed under the MIT License (MIT) available on http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/decoderawtransaction.md" %} + ##### DecodeRawTransaction {% include helpers/subhead-links.md %} @@ -34,74 +35,148 @@ The `decoderawtransaction` RPC {{summary_decodeRawTransaction}} {{INCLUDE_DECODE_RAW_TRANSACTION}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.13.0* Decode a signed one-input, two-output transaction: {% highlight bash %} -dash-cli decoderawtransaction 01000000016b490886c0198b028c6c5cb145c4eb3b10\ -55a224a7a105aadeff41b69ec91e060100000069463043022033a61c56fa0867ed67b76b02\ -3204a9dc0ee6b0d63305dc5f65fe94335445ff2f021f712f55399d5238fc7146497c431fc4\ -182a1de0b96fc22716e0845f561d542e012102eacba539d92eb88d4e73bb32749d79f53f6e\ -8d7947ac40a71bd4b26c13b6ec29ffffffff0200205fa0120000001976a914485485425fa9\ -9504ec1638ac4213f3cfc9f32ef388acc0a8f9be010000001976a914811eacc14db8ebb5b6\ -4486dc43400c0226b428a488ac00000000 +dash-cli decoderawtransaction 02000000015d0b26079696875e9fc3cb480420aae3c8\ +b1da628fbb14cc718066df7fe7c5fd010000006a47304402202cfa683981898ad9adb89534\ +23a38f7185ed41e163aa195d608fbe5bc3034910022034e2376aaed1c6576c0dad79d626ee\ +27f706baaed86dabb105979c3e6f6e1cb9012103d14eb001cf0908f3a2333d171f6236497a\ +82318a6a6f649b4d7fd8e5c8922e08feffffff021e3f4b4c000000001976a914b02ae52066\ +542b4aec5cf45c7cae3183d7bd322788ac00f90295000000001976a914252c9de3a0ebd5c9\ +5886187b24969d4ccdb5576e88ac943d0000 {% endhighlight %} Result: {% highlight json %} { - "txid": "2f124cb550d9967b81914b544dea3783de23e85d67a9816f9bada665ecfe1cd5", - "size": 224, - "version": 1, + "txid": "f4de3be04efa18e203c9d0b7ad11bb2517f5889338918ed300a374f5bd736ed7", + "size": 225, + "version": 2, + "type": 0, + "locktime": 15764, + "vin": [ + { + "txid": "fdc5e77fdf668071cc14bb8f62dab1c8e3aa200448cbc39f5e87969607260b5d", + "vout": 1, + "scriptSig": { + "asm": "304402202cfa683981898ad9adb8953423a38f7185ed41e163aa195d608fbe5bc3034910022034e2376aaed1c6576c0dad79d626ee27f706baaed86dabb105979c3e6f6e1cb9[ALL] 03d14eb001cf0908f3a2333d171f6236497a82318a6a6f649b4d7fd8e5c8922e08", + "hex": "47304402202cfa683981898ad9adb8953423a38f7185ed41e163aa195d608fbe5bc3034910022034e2376aaed1c6576c0dad79d626ee27f706baaed86dabb105979c3e6f6e1cb9012103d14eb001cf0908f3a2333d171f6236497a82318a6a6f649b4d7fd8e5c8922e08" + }, + "sequence": 4294967294 + } + ], + "vout": [ + { + "value": 12.79999774, + "valueSat": 1279999774, + "n": 0, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 b02ae52066542b4aec5cf45c7cae3183d7bd3227 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a914b02ae52066542b4aec5cf45c7cae3183d7bd322788ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "ycNwAN4DQ7Xnw5XLKg84SR4U1GE22FfLNQ" + ] + } + }, + { + "value": 25.00000000, + "valueSat": 2500000000, + "n": 1, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 252c9de3a0ebd5c95886187b24969d4ccdb5576e OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a914252c9de3a0ebd5c95886187b24969d4ccdb5576e88ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "yPi1JKw5fn8bMFsCCtnkGagogW6GXwGktZ" + ] + } + } + ], + "instantlock": true +} +{% endhighlight %} + +Decode a coinbase special transaction (CbTx): + +{% highlight bash %} +dash-cli decoderawtransaction 03000500010000000000000000000000000000000000\ +000000000000000000000000000000ffffffff2703ae50011a4d696e656420627920416e74\ +506f6f6c2021000b01201da9196f0000000007000000ffffffff02809e4730000000001976\ +a914cbd7bfcc50351180132b2c0698cb90ad74c473c788ac809e4730000000001976a91488\ +a060bc2dfe05780ae4dcb6c98b12436c35a93988ac00000000460200ae50010078e5c08b39\ +960887bf95185c381bdb719e60b6925fa12af78a8824fade927387c757acb6bac63da84f92\ +45e20cfd5d830382ac634d434725ca6349ab5db920a3 +{% endhighlight %} + +Result: + +{% highlight json %} +{ + "txid": "25632685ed0d7286901a80961c924c1ddd952e764754dbd8b40d0956413c8b56", + "size": 229, + "version": 3, + "type": 5, "locktime": 0, "vin": [ { - "txid": "061ec99eb641ffdeaa05a1a724a255103bebc445b15c6c8c028b19c08608496b", - "vout": 1, - "scriptSig": { - "asm": "3043022033a61c56fa0867ed67b76b023204a9dc0ee6b0d63305dc5f65fe94335445ff2f021f712f55399d5238fc7146497c431fc4182a1de0b96fc22716e0845f561d542e[ALL] 02eacba539d92eb88d4e73bb32749d79f53f6e8d7947ac40a71bd4b26c13b6ec29", - "hex": "463043022033a61c56fa0867ed67b76b023204a9dc0ee6b0d63305dc5f65fe94335445ff2f021f712f55399d5238fc7146497c431fc4182a1de0b96fc22716e0845f561d542e012102eacba539d92eb88d4e73bb32749d79f53f6e8d7947ac40a71bd4b26c13b6ec29" - }, + "coinbase": "03ae50011a4d696e656420627920416e74506f6f6c2021000b01201da9196f0000000007000000", "sequence": 4294967295 } ], "vout": [ { - "value": 800.00000000, - "valueSat": 80000000000, + "value": 8.10000000, + "valueSat": 810000000, "n": 0, "scriptPubKey": { - "asm": "OP_DUP OP_HASH160 485485425fa99504ec1638ac4213f3cfc9f32ef3 OP_EQUALVERIFY OP_CHECKSIG", - "hex": "76a914485485425fa99504ec1638ac4213f3cfc9f32ef388ac", + "asm": "OP_DUP OP_HASH160 cbd7bfcc50351180132b2c0698cb90ad74c473c7 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a914cbd7bfcc50351180132b2c0698cb90ad74c473c788ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ - "ySutkc49Khpz1HQN8AfWNitVBLwqtyaxvv" + "yeuGUfPMrbEqAS2Pw1wonYgEPbM4LAA9LK" ] } }, { - "value": 74.99000000, - "valueSat": 7499000000, + "value": 8.10000000, + "valueSat": 810000000, "n": 1, "scriptPubKey": { - "asm": "OP_DUP OP_HASH160 811eacc14db8ebb5b64486dc43400c0226b428a4 OP_EQUALVERIFY OP_CHECKSIG", - "hex": "76a914811eacc14db8ebb5b64486dc43400c0226b428a488ac", + "asm": "OP_DUP OP_HASH160 88a060bc2dfe05780ae4dcb6c98b12436c35a939 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a91488a060bc2dfe05780ae4dcb6c98b12436c35a93988ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ - "yY6AmGopsZS31wy1JLHR9P6AC6owFaXwuh" + "yYmrsYP3XYMZr1cGtha3QzmuNB1C7CfyhV" ] } } - ] + ], + "extraPayloadSize": 70, + "extraPayload": "0200ae50010078e5c08b39960887bf95185c381bdb719e60b6925fa12af78a8824fade927387c757acb6bac63da84f9245e20cfd5d830382ac634d434725ca6349ab5db920a3", + "cbTx": { + "version": 2, + "height": 86190, + "merkleRootMNList": "877392defa24888af72aa15f92b6609e71db1b385c1895bf870896398bc0e578", + "merkleRootQuorums": "a320b95dab4963ca2547434d63ac8203835dfd0ce245924fa83dc6bab6ac57c7" + }, + "instantlock": false, + "instantlock_internal": false, + "chainlock": false } {% endhighlight %} *See also* +* [CombineRawTransaction][rpc combinerawtransaction]: {{summary_combineRawTransaction}} * [CreateRawTransaction][rpc createrawtransaction]: {{summary_createRawTransaction}} * [SignRawTransaction][rpc signrawtransaction]: {{summary_signRawTransaction}} * [SendRawTransaction][rpc sendrawtransaction]: {{summary_sendRawTransaction}} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/disconnectnode.md b/_includes/devdoc/dash-core/rpcs/rpcs/disconnectnode.md index 175e32f7..cdf818f5 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/disconnectnode.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/disconnectnode.md @@ -22,7 +22,15 @@ The `disconnectnode` RPC {{summary_disconnectNode}} t: "string" p: "Required
(exactly 1)" d: "The node you want to disconnect from as a string in the form of `:`.

*Updated in Bitcoin Core 0.14.1*" +{% enditemplate %} +*Parameter #2---nodeid* + +{% itemplate ntpd1 %} +- n: "nodeid" + t: "number" + p: "Optional" + d: "The node ID (see `getpeerinfo` for node IDs)" {% enditemplate %} *Result---`null` on success or error on failed disconnect* @@ -35,9 +43,9 @@ The `disconnectnode` RPC {{summary_disconnectNode}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.1* -Disconnects following node from your node. +Disconnects following node by address. {% highlight bash %} dash-cli -testnet disconnectnode 192.0.2.113:19999 @@ -45,6 +53,14 @@ dash-cli -testnet disconnectnode 192.0.2.113:19999 Result (no output from `dash-cli` because result is set to `null`). +Disconnects following node by id. + +{% highlight bash %} +dash-cli -testnet disconnectnode "" 3 +{% endhighlight %} + +Result (no output from `dash-cli` because result is set to `null`). + *See also* * [AddNode][rpc addnode]: {{summary_addNode}} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/dumpwallet.md b/_includes/devdoc/dash-core/rpcs/rpcs/dumpwallet.md index d50408b1..a0ac537b 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/dumpwallet.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/dumpwallet.md @@ -28,17 +28,51 @@ The `dumpwallet` RPC {{summary_dumpWallet}} {% enditemplate %} -*Result---`null` or error* +*Result---information about exported wallet* {% itemplate ntpd1 %} - n: "`result`" - t: "null" + t: "object" p: "Required
(exactly 1)" - d: "Always `null` whether success or failure. The JSON-RPC error and message fields will be set if a failure occurred" + d: "An object describing dumped wallet file" +- n: "→
`dashcoreversion`" + t: "string" + p: "Required
(exactly 1)" + d: "Dash Core build details" + +- n: "→
`lastblockheight`" + t: "int" + p: "Required
(exactly 1)" + d: "Height of the most recent block received" + +- n: "→
`lastblockhash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Hash of the most recent block received" + +- n: "→
`lastblocktime`" + t: "string" + p: "Required
(exactly 1)" + d: "Timestamp of the most recent block received" + +- n: "→
`keys`" + t: "int" + p: "Required
(exactly 1)" + d: "Number of keys dumped" + +- n: "→
`file`" + t: "string" + p: "Required
(exactly 1)" + d: "Name of the file the wallet was dumped to" + +- n: "→
`warning`" + t: "string" + p: "Required
(exactly 1)" + d: "Warning to not share the file due to it containing the private keys" {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.13.0* Create a wallet dump and then print its first 10 lines. @@ -47,13 +81,27 @@ dash-cli -testnet dumpwallet /tmp/dump.txt head /tmp/dump.txt {% endhighlight %} -Results (only showing the first 10 lines): +Results: + +{% highlight json %} +{ + "dashcoreversion": "v0.13.0.0", + "lastblockheight": 250186, + "lastblockhash": "0000000000a82fb1890de5da4740d0671910a436fe6fc4503a3e553adef073b4", + "lastblocktime": "2018-10-23T12:50:44Z", + "keys": 8135, + "file": "/tmp/dump.txt", + "warning": "/tmp/dump.txt file contains all private keys from this wallet. Do not share it with anyone!" +} +{% endhighlight %} + +Results (the first 10 lines of the file): {% highlight bash %} -# Wallet dump created by Dash Core v0.12.2.1 (2017-11-11 10:02:45 +0300) -# * Created on 2017-11-28T19:52:46Z -# * Best block at time of backup was 33750 (0000000005d5d1651f3b52d7a7158e350261519c52a28527c6053a8f5989a5a4), -# mined on 2017-11-28T19:48:05Z +# Wallet dump created by Dash Core v0.13.0.0 +# * Created on 2018-10-23T12:55:38Z +# * Best block at time of backup was 250186 (0000000000a82fb1890de5da4740d0671910a436fe6fc4503a3e553adef073b4), +# mined on 2018-10-23T12:50:44Z cQZZ4awQvcXXyES3CmUJqSgeTobQm9t9nyUr337kvUtsWsnvvMyw 2017-11-28T18:21:36Z label=test%20label # addr=ycBuREgSskHHkWLxDa9A5WppCki6PfFycL cTBRPnJoPjEMh67v1zes437v8Po5bFLDWKgEudTJMhVaLs1ZVGJe 2017-11-28T18:21:37Z reserve=1 # addr=yNsWkgPLN1u7p5dfWYnasYdgirU2J3tjUj diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/estimatepriority.md b/_includes/devdoc/dash-core/rpcs/rpcs/estimatepriority.md index 9f5522d8..d8042985 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/estimatepriority.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/estimatepriority.md @@ -11,16 +11,12 @@ http://opensource.org/licenses/MIT. {% autocrossref %} -{% assign summary_estimatePriority="estimates the priority that a transaction needs in order to be included within a certain number of blocks as a free high-priority transaction." %} +{% assign summary_estimatePriority="was removed in Dash Core 0.14.0." %} -*Added in Bitcoin Core 0.10.0.* +{{WARNING}} **_Removed in Dash Core 0.14.0._** The `estimatepriority` RPC {{summary_estimatePriority}} This should not to be confused with the `prioritisetransaction` RPC which will remain supported for adding fee deltas to transactions. -{{WARNING}} `estimatepriority` has been [removed from Bitcoin](https://github.com/bitcoin/bitcoin/commit/fe282acd7604b5265762b24e531bdf1ebb1f009b). While still present in Dash Core, it is deprecated as of 0.12.3 (should be considered unstable and will disappear in the future). Use the RPC listed in the "See Also" subsection below instead. - -Transaction priority is relative to a transaction's byte size. - *Parameter #1---how many blocks the transaction may wait before being included as a free high-priority transaction* {% itemplate ntpd1 %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartfee.md b/_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartfee.md index bf4baafd..d92d7fec 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartfee.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartfee.md @@ -4,6 +4,8 @@ http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartfee.md" %} + + ##### EstimateSmartFee {% include helpers/subhead-links.md %} @@ -13,13 +15,23 @@ http://opensource.org/licenses/MIT. The `estimatesmartfee` RPC {{summary_estimateSmartFee}} -*Parameter #1---how many blocks the transaction may wait before being included* +*Parameter #1---how many confirmations the transaction may wait before being included* {% itemplate ntpd1 %} -- n: "Blocks" +- n: "conf_target" t: "number (int)" p: "Required
(exactly 1)" - d: "The maximum number of blocks a transaction should have to wait before it is predicted to be included in a block. Has to be between 1 and 25 blocks" + d: "Confirmation target in blocks (1 - 1008)" + +{% enditemplate %} + +*Parameter #2---estimate mode* + +{% itemplate ntpd1 %} +- n: "estimate_mode" + t: "string" + p: "Optional
Default=
`CONSERVATIVE`" + d: "The fee estimate mode. Whether to return a more conservative estimate which also satisfies a longer history. A conservative estimate potentially returns a higher feerate and is more likely to be sufficient for the desired target, but is not as responsive to short term drops in the prevailing fee market. Must be one of:
`UNSET` (defaults to `CONSERVATIVE`)
`ECONOMICAL`
`CONSERVATIVE`" {% enditemplate %} @@ -33,8 +45,13 @@ The `estimatesmartfee` RPC {{summary_estimateSmartFee}} - n: "→
`feerate`" t: "number (Dash)" - p: "Required
(exactly 1)" - d: "The estimated fee the transaction should pay in order to be included within the specified number of blocks. If the node doesn't have enough information to make an estimate, the value `-1` will be returned" + p: "Optional
(0 or 1)" + d: "The estimated fee the transaction should pay in order to be included within the specified number of blocks. If the node doesn't have enough information to make an estimate, this field will not be returned" + +- n: "→
`error`" + t: "JSON array (strings)" + p: "Optional
(0 or 1)" + d: "Errors encountered during processing" - n: "→
`blocks`" t: "number" @@ -42,7 +59,7 @@ The `estimatesmartfee` RPC {{summary_estimateSmartFee}} d: "Block number where the estimate was found" {% enditemplate %} -*Examples from Dash Core 0.12.2* +*Examples from Dash Core 0.14.1* {% highlight bash %} dash-cli estimatesmartfee 6 @@ -60,15 +77,17 @@ Result: Requesting data the node can't calculate (out of range): {% highlight bash %} -dash-cli estimatesmartfee 100 +dash-cli estimatesmartfee 2 {% endhighlight %} Result: {% highlight json %} { - "feerate": -1, - "blocks": 100 + "errors": [ + "Insufficient data or no feerate found" + ], + "blocks": 2 } {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartpriority.md b/_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartpriority.md index 8ac27612..dc5516b5 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartpriority.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartpriority.md @@ -11,14 +11,12 @@ http://opensource.org/licenses/MIT. {% autocrossref %} -{% assign summary_estimateSmartPriority="estimates the priority that a transaction needs in order to be included within a certain number of blocks as a free high-priority transaction and returns the number of blocks for which the estimate is valid." %} +{% assign summary_estimateSmartPriority="was removed in Dash Core 0.14.0." %} + +{{WARNING}} **_Removed in Dash Core 0.14.0._** The `estimatesmartpriority` RPC {{summary_estimateSmartPriority}} This should not to be confused with the `prioritisetransaction` RPC which will remain supported for adding fee deltas to transactions. -{{WARNING}} `estimatesmartpriority` has been [removed from Bitcoin](https://github.com/bitcoin/bitcoin/commit/fe282acd7604b5265762b24e531bdf1ebb1f009b). While still present in Dash Core, it is deprecated as of 0.12.3 (should be considered unstable and will disappear in the future). Use the RPC listed in the "See Also" subsection below instead. - -Transaction priority is relative to a transaction's byte size. - *Parameter #1---how many blocks the transaction may wait before being included as a free high-priority transaction* {% itemplate ntpd1 %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/fundrawtransaction.md b/_includes/devdoc/dash-core/rpcs/rpcs/fundrawtransaction.md index e233500c..0575c9dc 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/fundrawtransaction.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/fundrawtransaction.md @@ -62,7 +62,7 @@ Note: For backwards compatibility, passing in a `true` instead of an object will - n: "→
`reserveChangeKey`" t: "bool" p: "Optional
(0 or 1)" - d: "*Added in Bitcoin Core 0.14.0*

Reserves the change output key from the keypool. The default is `true`. Before 0.14.0, the used keypool key was never marked as change-address key and directly returned to the keypool (leading to address reuse)." + d: "*Deprecated and ignored in Dash Core 0.14.1*

Reserves the change output key from the keypool. The default is `true`. Before Bitcoin Core 0.14.0, the used keypool key was never marked as change-address key and directly returned to the keypool (leading to address reuse)." - n: "→
`feeRate`" t: "numeric (bitcoins)" diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/generate.md b/_includes/devdoc/dash-core/rpcs/rpcs/generate.md index 165de423..a263e256 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/generate.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/generate.md @@ -13,7 +13,7 @@ http://opensource.org/licenses/MIT. {% autocrossref %} -*Requires wallet support. Can only be used on the regtest network.* +*Requires wallet support.* The `generate` RPC {{summary_generate}} @@ -30,7 +30,7 @@ The `generate` RPC {{summary_generate}} *Parameter #2---the number of iterations* {% itemplate ntpd1 %} -- n: "`numblocks`" +- n: "`maxtries`" t: "number (int)" p: "Required
(exactly 1)" d: "The number of iterations to try (default = 1000000)." diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getbalance.md b/_includes/devdoc/dash-core/rpcs/rpcs/getbalance.md index efc86e5e..501ae130 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getbalance.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getbalance.md @@ -31,13 +31,13 @@ The `getbalance` RPC {{summary_getBalance}} {{INCLUDE_CONFIRMATIONS_PARAMETER}} -*Parameter #3---whether to add 5 confirmations to transactions locked via InstantSend* +*Parameter #3---whether to add the balance from transactions locked via InstantSend* {% itemplate ntpd1 %} -- n: "addlockconf" +- n: "addlocked" t: "bool" p: "Optional
(exactly 1)" - d: "Add the number of InstantSend confirmations to InstantSend locked transactions" + d: "Add the balance from InstantSend locked transactions" {% enditemplate %} @@ -55,11 +55,11 @@ The `getbalance` RPC {{summary_getBalance}} {% enditemplate %} -*Examples from Dash Core 0.12.2* +*Examples from Dash Core 0.13.0* Get the balance for the main ("") account, including transactions with at least five confirmations and those spent to watch-only addresses in -that account. Do not add the InstantSend confirmations (5) for locked transactions. +that account. Do not include InstantSend locked transactions. {% highlight bash %} dash-cli -testnet getbalance "" 3 false true @@ -73,7 +73,7 @@ Result: Get the balance for the main ("") account, including transactions with at least one confirmation and those spent to watch-only addresses in -that account. Add the InstantSend confirmations (5) for locked transactions. +that account. Include the balance from InstantSend locked transactions. {% highlight bash %} dash-cli -testnet getbalance "" 3 true true diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getbestchainlock.md b/_includes/devdoc/dash-core/rpcs/rpcs/getbestchainlock.md new file mode 100644 index 00000000..7065cf86 --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getbestchainlock.md @@ -0,0 +1,64 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/getbestchainlock.md" %} + + + +##### GetBestChainLock +{% include helpers/subhead-links.md %} + +{% assign summary_getBestChainLock="returns the block hash of the best chainlock." %} + +{% autocrossref %} + +The `getbestchainlock` RPC {{summary_getBestChainLock}} + +Throws an error if there is no known chainlock yet. + +*Parameters: none* + +*Result* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object/null" + p: "Required
(exactly 1)" + d: "An object containing the requested block, or JSON `null` if an error occurred" + +- n: "→
`blockhash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the block encoded as hex in RPC byte order." + +- n: "→
`height`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The height of this block on its block chain" + +- n: "→
`known_block`" + t: "boolean" + p: "Required
(exactly 1)" + d: "True if the block is known by this node" + +{% enditemplate %} + +*Example from Dash Core 0.14.1* + +{% highlight bash %} +dash-cli -testnet getbestchainlock +{% endhighlight %} + +Result: +{% highlight json %} +{ + "blockhash": "000000000036ab34d3005941d4224fc5887526355c98b769e27e5ece05f48860", + "height": 182106, + "known_block": true +} +{% endhighlight %} + +*See also: none* + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getblock.md b/_includes/devdoc/dash-core/rpcs/rpcs/getblock.md index 2b11232a..69445d2e 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getblock.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getblock.md @@ -3,6 +3,7 @@ This file is licensed under the MIT License (MIT) available on http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/getblock.md" %} + ##### GetBlock {% include helpers/subhead-links.md %} @@ -13,10 +14,10 @@ http://opensource.org/licenses/MIT. The `getblock` RPC {{summary_getBlock}} -*Parameter #1---header hash* +*Parameter #1---block hash* {% itemplate ntpd1 %} -- n: "Header Hash" +- n: "Block Hash" t: "string (hex)" p: "Required
(exactly 1)" d: "The hash of the header of the block to get, encoded as hex in RPC byte order" @@ -26,14 +27,14 @@ The `getblock` RPC {{summary_getBlock}} *Parameter #2---whether to get JSON or hex output* {% itemplate ntpd1 %} -- n: "Format" - t: "boolean" - p: "Optional
(true or false)" - d: "Set to `false` to get the block in serialized block format; set to `true` (the default) to get the decoded block as a JSON object" +- n: "Verbosity" + t: "number (int)" + p: "Optional
(0 or 1)" + d: "Set to one of the following verbosity levels:
• `0` - Get the block in serialized block format;
• `1` - Get the decoded block as a JSON object (default)
• `2` - Get the decoded block as a JSON object with transaction details" {% enditemplate %} -*Result (if format was `false`)---a serialized block* +*Result (if verbosity was `0`)---a serialized block* {% itemplate ntpd1 %} - n: "`result`" @@ -43,7 +44,7 @@ The `getblock` RPC {{summary_getBlock}} {% enditemplate %} -*Result (if format was `true` or omitted)---a JSON block* +*Result (if verbosity was `1` or omitted)---a JSON block with transaction hashes* {% itemplate ntpd1 %} - n: "`result`" @@ -76,6 +77,11 @@ The `getblock` RPC {{summary_getBlock}} p: "Required
(exactly 1)" d: "This block's version number. See [block version numbers][section block versions]" +- n: "→
`versionHex`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "_Added in Bitcoin Core 0.13.0_

The block version formatted in hexadecimal" + - n: "→
`merkleroot`" t: "string (hex)" p: "Required
(exactly 1)" @@ -91,6 +97,31 @@ The `getblock` RPC {{summary_getBlock}} p: "Required
(1 or more)" d: "The TXID of a transaction in this block, encoded as hex in RPC byte order" +- n: "→
`cbTx`" + t: "object" + p: "Required
(exactly 1)" + d: "Coinbase special transaction details" + +- n: "→ →
`version`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The version of the Coinbase special transaction (CbTx)" + +- n: "→ →
`height`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The height of this block on its block chain" + +- n: "→ →
`merkleRootMNList`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The merkle root for the masternode list" + +- n: "→ →
`merkleRootQuorums`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The merkle root for the quorum list" + - n: "→
`time`" t: "number (int)" p: "Required
(exactly 1)" @@ -133,63 +164,295 @@ The `getblock` RPC {{summary_getBlock}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Result (if verbosity was `2`---a JSON block with full transaction details* + +{% assign DEPTH="→" %} +{% include helpers/vars.md %} + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object/null" + p: "Required
(exactly 1)" + d: "An object containing the requested block, or JSON `null` if an error occurred" + +- n: "→
`hash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of this block's block header encoded as hex in RPC byte order. This is the same as the hash provided in parameter #1" + +- n: "→
`confirmations`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The number of confirmations the transactions in this block have, starting at 1 when this block is at the tip of the best block chain. This score will be -1 if the the block is not part of the best block chain" + +- n: "→
`size`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The size of this block in serialized block format, counted in bytes" + +- n: "→
`height`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The height of this block on its block chain" + +- n: "→
`version`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "This block's version number. See [block version numbers][section block versions]" + +- n: "→
`versionHex`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "_Added in Bitcoin Core 0.13.0_

The block version formatted in hexadecimal" + +- n: "→
`merkleroot`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The merkle root for this block, encoded as hex in RPC byte order" + +- n: "→
`tx`" + t: "array" + p: "Required
(exactly 1)" + d: "An array containing the TXIDs of all transactions in this block. The transactions appear in the array in the same order they appear in the serialized block" + +{{INCLUDE_DECODE_RAW_TRANSACTION}} + +- n: "→ →
`instantlock`" + t: "bool" + p: "Required
(exactly 1)" + d: "If set to `true`, this transaction is locked (by InstantSend or a ChainLock)" + +- n: "→ →
`instantlock_internal`" + t: "bool" + p: "Required
(exactly 1)" + d: "If set to `true`, this transaction has an InstantSend lock" + +- n: "→
`cbTx`" + t: "object" + p: "Required
(exactly 1)" + d: "Coinbase special transaction details" + +- n: "→ →
`version`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The version of the Coinbase special transaction (CbTx)" + +- n: "→ →
`height`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The height of this block on its block chain" + +- n: "→ →
`merkleRootMNList`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The merkle root for the masternode list" + +- n: "→ →
`merkleRootQuorums`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The merkle root for the quorum list" + +- n: "→
`time`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The value of the *time* field in the block header, indicating approximately when the block was created" + +- n: "→
`mediantime`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "*Added in Bitcoin Core 0.12.0*

The median block time in Unix epoch time" + +- n: "→
`nonce`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The nonce which was successful at turning this particular block into one that could be added to the best block chain" + +- n: "→
`bits`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The value of the *nBits* field in the block header, indicating the target threshold this block's header had to pass" + +- n: "→
`difficulty`" + t: "number (real)" + p: "Required
(exactly 1)" + d: "The estimated amount of work done to find this block relative to the estimated amount of work done to find block 0" + +- n: "→
`chainwork`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The estimated number of block header hashes miners had to check from the genesis block to this block, encoded as big-endian hex" + +- n: "→
`previousblockhash`" + t: "string (hex)" + p: "Optional
(0 or 1)" + d: "The hash of the header of the previous block, encoded as hex in RPC byte order. Not returned for genesis block" + +- n: "→
`nextblockhash`" + t: "string (hex)" + p: "Optional
(0 or 1)" + d: "The hash of the next block on the best block chain, if known, encoded as hex in RPC byte order" + +- n: "
`chainlock`" + t: "bool" + p: "Required
(exactly 1)" + d: "*Added in Dash Core 0.14.0*

If set to `true`, this transaction is in a block that is locked (not susceptible to a chain re-org)" + +{% enditemplate %} + +*Example from Dash Core 0.14.1* Get a block in raw hex: {% highlight bash %} dash-cli -testnet getblock \ - 0000000037955fcc39af8b1ae75914ffb422313c0fca7eba96a1ac99c2e57f84 \ - false + 00000000007b0fb99e36713cf08012482478ee496e6dcb4007ad2e806306e62b \ + 0 {% endhighlight %} Result (wrapped): {% highlight text %} -0100002011f5719a0a0c4881ff98b4a68c1c828dc3b10f5b51033f5f93d48dbf\ -000000004b8e38f197d6ee878e160d2bae3ce05ab898a6252458ec67ce770140\ -260397c4dd2ed659a1dd001d00636b5601010000000100000000000000000000\ -00000000000000000000000000000000000000000000ffffffff4b02041204dd\ -2ed65908fabe6d6d7445746d63506b62572d2d35584853467a765a6748696972\ -30657a3a6f6d656e010000000000000017fffff9020000000d2f6e6f64655374\ -726174756d2f00000000058028bb13010000001976a914bad55652dffb1af943\ -41015c94feea79793442fd88ac40e553b1020000001976a9142b7856de53d4c1\ -823090c98f8ad79862842c09b588ac4094dd89000000001976a914c2c29ebc78\ -7954ef99d01c5f79115abf7012fb8e88ac4094dd89000000001976a914d7b47d\ -4b40a23c389f5a17754d7f60f511c7d0ec88ac4094dd89000000001976a914dc\ -3e0793134b081145ec0c67a9c72a7b297df27c88ac00000000 +00000020272e374a06c87a0ce0e6ee1a0754c98b9ec2493e7c0ac7ba41a07300\ +00000000568b3c4156090db4d8db5447762e95dd1d4c921c96801a9086720ded\ +85266325916cc05caa94001c5caf359501030005000100000000000000000000\ +00000000000000000000000000000000000000000000ffffffff2703ae50011a\ +4d696e656420627920416e74506f6f6c2021000b01201da9196f000000000700\ +0000ffffffff02809e4730000000001976a914cbd7bfcc50351180132b2c0698\ +cb90ad74c473c788ac809e4730000000001976a91488a060bc2dfe05780ae4dc\ +b6c98b12436c35a93988ac00000000460200ae50010078e5c08b39960887bf95\ +185c381bdb719e60b6925fa12af78a8824fade927387c757acb6bac63da84f92\ +45e20cfd5d830382ac634d434725ca6349ab5db920a3 {% endhighlight %} Get the same block in JSON: {% highlight bash %} dash-cli -testnet getblock \ - 0000000037955fcc39af8b1ae75914ffb422313c0fca7eba96a1ac99c2e57f84 + 00000000007b0fb99e36713cf08012482478ee496e6dcb4007ad2e806306e62b {% endhighlight %} Result: {% highlight json %} { - "hash": "0000000037955fcc39af8b1ae75914ffb422313c0fca7eba96a1ac99c2e57f84", - "confirmations": 3, - "size": 377, - "height": 4612, - "version": 536870913, - "merkleroot": "c4970326400177ce67ec582425a698b85ae03cae2b0d168e87eed697f1388e4b", + "hash": "00000000007b0fb99e36713cf08012482478ee496e6dcb4007ad2e806306e62b", + "confirmations": 73083, + "size": 310, + "height": 86190, + "version": 536870912, + "versionHex": "20000000", + "merkleroot": "25632685ed0d7286901a80961c924c1ddd952e764754dbd8b40d0956413c8b56", "tx": [ - "c4970326400177ce67ec582425a698b85ae03cae2b0d168e87eed697f1388e4b" + "25632685ed0d7286901a80961c924c1ddd952e764754dbd8b40d0956413c8b56" ], - "time": 1507208925, - "mediantime": 1507208645, - "nonce": 1449878272, - "bits": "1d00dda1", - "difficulty": 1.155066358813473, - "chainwork": "000000000000000000000000000000000000000000000000000001c3e86f0f04", - "previousblockhash": "00000000bf8dd4935f3f03515b0fb1c38d821c8ca6b498ff81480c0a9a71f511", - "nextblockhash": "0000000028817c7fce55d802f3647640600535a983d00e16076f284ec6cb001b" + "cbTx": { + "version": 2, + "height": 86190, + "merkleRootMNList": "877392defa24888af72aa15f92b6609e71db1b385c1895bf870896398bc0e578", + "merkleRootQuorums": "a320b95dab4963ca2547434d63ac8203835dfd0ce245924fa83dc6bab6ac57c7" + }, + "time": 1556114577, + "mediantime": 1556113720, + "nonce": 2503323484, + "bits": "1c0094aa", + "difficulty": 440.8261075201009, + "chainwork": "0000000000000000000000000000000000000000000000000045ab6f9403a8e7", + "previousblockhash": "000000000073a041bac70a7c3e49c29e8bc954071aeee6e00c7ac8064a372e27", + "nextblockhash": "00000000001c6c962639a1aad4cd069f315560a824d489418dc1f26b50a58aed", + "chainlock": true } +{% endhighlight %} +Get the same block in JSON with transaction details: + +{% highlight bash %} +dash-cli -testnet getblock \ + 00000000007b0fb99e36713cf08012482478ee496e6dcb4007ad2e806306e62b 2 +{% endhighlight %} + +Result: + +{% highlight json %} +{ + "hash": "00000000007b0fb99e36713cf08012482478ee496e6dcb4007ad2e806306e62b", + "confirmations": 73084, + "size": 310, + "height": 86190, + "version": 536870912, + "versionHex": "20000000", + "merkleroot": "25632685ed0d7286901a80961c924c1ddd952e764754dbd8b40d0956413c8b56", + "tx": [ + { + "txid": "25632685ed0d7286901a80961c924c1ddd952e764754dbd8b40d0956413c8b56", + "version": 3, + "type": 5, + "size": 229, + "locktime": 0, + "vin": [ + { + "coinbase": "03ae50011a4d696e656420627920416e74506f6f6c2021000b01201da9196f0000000007000000", + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 8.10000000, + "valueSat": 810000000, + "n": 0, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 cbd7bfcc50351180132b2c0698cb90ad74c473c7 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a914cbd7bfcc50351180132b2c0698cb90ad74c473c788ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "yeuGUfPMrbEqAS2Pw1wonYgEPbM4LAA9LK" + ] + } + }, + { + "value": 8.10000000, + "valueSat": 810000000, + "n": 1, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 88a060bc2dfe05780ae4dcb6c98b12436c35a939 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a91488a060bc2dfe05780ae4dcb6c98b12436c35a93988ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "yYmrsYP3XYMZr1cGtha3QzmuNB1C7CfyhV" + ] + } + } + ], + "extraPayloadSize": 70, + "extraPayload": "0200ae50010078e5c08b39960887bf95185c381bdb719e60b6925fa12af78a8824fade927387c757acb6bac63da84f9245e20cfd5d830382ac634d434725ca6349ab5db920a3", + "cbTx": { + "version": 2, + "height": 86190, + "merkleRootMNList": "877392defa24888af72aa15f92b6609e71db1b385c1895bf870896398bc0e578", + "merkleRootQuorums": "a320b95dab4963ca2547434d63ac8203835dfd0ce245924fa83dc6bab6ac57c7" + }, + "instantlock": false, + "chainlock": false + "hex": "03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff2703ae50011a4d696e656420627920416e74506f6f6c2021000b01201da9196f0000000007000000ffffffff02809e4730000000001976a914cbd7bfcc50351180132b2c0698cb90ad74c473c788ac809e4730000000001976a91488a060bc2dfe05780ae4dcb6c98b12436c35a93988ac00000000460200ae50010078e5c08b39960887bf95185c381bdb719e60b6925fa12af78a8824fade927387c757acb6bac63da84f9245e20cfd5d830382ac634d434725ca6349ab5db920a3" + } + ], + "cbTx": { + "version": 2, + "height": 86190, + "merkleRootMNList": "877392defa24888af72aa15f92b6609e71db1b385c1895bf870896398bc0e578", + "merkleRootQuorums": "a320b95dab4963ca2547434d63ac8203835dfd0ce245924fa83dc6bab6ac57c7" + }, + "time": 1556114577, + "mediantime": 1556113720, + "nonce": 2503323484, + "bits": "1c0094aa", + "difficulty": 440.8261075201009, + "chainwork": "0000000000000000000000000000000000000000000000000045ab6f9403a8e7", + "previousblockhash": "000000000073a041bac70a7c3e49c29e8bc954071aeee6e00c7ac8064a372e27", + "nextblockhash": "00000000001c6c962639a1aad4cd069f315560a824d489418dc1f26b50a58aed", + "chainlock": true +} {% endhighlight %} *See also* diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getblockchaininfo.md b/_includes/devdoc/dash-core/rpcs/rpcs/getblockchaininfo.md index 4e90fc8b..78d2622f 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getblockchaininfo.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getblockchaininfo.md @@ -82,7 +82,7 @@ The `getblockchaininfo` RPC {{summary_getBlockChainInfo}} - n: "→ →
Softfork" t: "object" - p: "Required
(3 or more)" + p: "Required
(0 or more)" d: "A specific softfork" - n: "→ → →
`id`" @@ -152,7 +152,7 @@ The `getblockchaininfo` RPC {{summary_getBlockChainInfo}} - n: "→ →
Name" t: "string : object" - p: "Required
(2 or more)" + p: "Required
(0 or more)" d: "A specific BIP9 softfork" - n: "→ → →
`status`" @@ -179,9 +179,40 @@ The `getblockchaininfo` RPC {{summary_getBlockChainInfo}} t: "numeric
(int)" p: "Required
(exactly 1)" d: "*Added in Bitcoin Core 0.14.0*

The height of the first block to which the status applies" + +- n: "→ → →
`statistics`" + t: "string : object" + p: "Required
(exactly 1)" + d: "*Added in Dash Core 0.14.1*

Numeric statistics about BIP9 signaling for a softfork (only for \"started\" status)" + +- n: "→ → → →
`period`" + t: "numeric
(int)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.14.1*

The length in blocks of the BIP9 signaling period. Field is only shown when status is `started`" + +- n: "→ → → →
`threshold`" + t: "numeric
(int)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.14.1*

The number of blocks with the version bit set required to activate the feature. Field is only shown when status is `started`" + +- n: "→ → → →
`elapsed`" + t: "numeric
(int)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.14.1*

The number of blocks elapsed since the beginning of the current period. Field is only shown when status is `started`" + +- n: "→ → → →
`count`" + t: "numeric
(int)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.14.1*

The number of blocks with the version bit set in the current period. Field is only shown when status is `started`" + +- n: "→
`possible`" + t: "bool" + p: "Optional
(0 or 1)" + d: "*Added in Bitcoin Core 0.11.0*

Returns false if there are not enough blocks left in this period to pass activation threshold. Field is only shown when status is `started`" + {% enditemplate %} -*Example from Dash Core 0.12.3* +*Example from Dash Core 0.14.1* {% highlight bash %} dash-cli -testnet getblockchaininfo @@ -192,13 +223,13 @@ Result: {% highlight json %} { "chain": "test", - "blocks": 82244, - "headers": 82244, - "bestblockhash": "0000000004efcadbdb9d8b524e5ab982af3db039fdb585c2f1c1df56d42d4492", - "difficulty": 47.4955836390814, - "mediantime": 1519662782, - "verificationprogress": 0.9999999483744162, - "chainwork": "0000000000000000000000000000000000000000000000000021adf3af961831", + "blocks": 160508, + "headers": 160508, + "bestblockhash": "0000000008ae87c2999faa79c74727ab2a15783fcab515cc940a6c14dfa921a8", + "difficulty": 24.71182965485547, + "mediantime": 1566479773, + "verificationprogress": 0.9999986039171913, + "chainwork": "0000000000000000000000000000000000000000000000000077db2024e1810b", "pruned": false, "softforks": [ { @@ -226,25 +257,36 @@ Result: "bip9_softforks": { "csv": { "status": "active", - "startTime": 1506556800, - "timeout": 1538092800, + "startTime": 1544655600, + "timeout": 1576191600, "since": 8064 }, "dip0001": { "status": "active", - "startTime": 1505692800, - "timeout": 1537228800, - "since": 5600 + "startTime": 1544655600, + "timeout": 1576191600, + "since": 4400 + }, + "dip0003": { + "status": "active", + "startTime": 1544655600, + "timeout": 1576191600, + "since": 7000 + }, + "dip0008": { + "status": "active", + "startTime": 1553126400, + "timeout": 1584748800, + "since": 78800 }, "bip147": { "status": "active", - "startTime": 1517792400, - "timeout": 1549328400, - "since": 78800 + "startTime": 1544655600, + "timeout": 1576191600, + "since": 4300 } } } - {% endhighlight %} *See also* diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getblockstats.md b/_includes/devdoc/dash-core/rpcs/rpcs/getblockstats.md new file mode 100644 index 00000000..9aa33261 --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getblockstats.md @@ -0,0 +1,192 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/getblockstats.md" %} + + +##### GetBlockStats +{% include helpers/subhead-links.md %} + +{% assign summary_getBlockStats="computes per block statistics for a given window." %} + +{% autocrossref %} + +The `getblockstats` RPC {{summary_getBlockStats}} + +All amounts are in duffs. + +It won't work for some heights with pruning. It won't work without `-txindex` for +`utxo_size_inc`, `*fee` or `*feerate` stats. + +*Parameter #1---hash_or_height* + +{% itemplate ntpd1 %} +- n: "hash_or_height" + t: "string or numeric" + p: "Required
(exactly 1)" + d: "The block hash or height of the target block" + +{% enditemplate %} + +*Parameter #2---stats* + +{% itemplate ntpd1 %} +- n: "stats" + t: "array" + p: "optional" + d: "Values to plot, by default all values (see result below)" + +{% enditemplate %} + +*Result---a JSON object containing the requested statistics* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object/null" + p: "Required
(exactly 1)" + d: "An object containing stats for the requested block, or JSON `null` if an error occurred" + +- n: "→
`avgfee`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Average fee in the block" + +- n: "→
`avgfeerate`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Average feerate (in duffs per byte)" + +- n: "→
`avgtxsize`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Average transaction size" + +- n: "→
`blockhash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The block hash (to check for potential reorgs)" + +- n: "→
`height`" + t: "numeric" + p: "Required
(exactly 1)" + d: "The height of the block" + +- n: "→
`ins`" + t: "numeric" + p: "Required
(exactly 1)" + d: "The number of inputs (excluding coinbase)" + +- n: "→
`maxfee`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Maximum fee in the block" + +- n: "→
`maxfeerate`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Maximum feerate (in duffs per byte)" + +- n: "→
`maxtxsize`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Maximum transaction size" + +- n: "→
`medianfee`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Truncated median fee in the block" + +- n: "→
`medianfeerate`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Truncated median feerate (in duffs per byte)" + +- n: "→
`mediantime`" + t: "numeric" + p: "Required
(exactly 1)" + d: "The block median time past" + +- n: "→
`mediantxsize`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Truncated median transaction size" + +- n: "→
`minfee`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Minimum fee in the block" + +- n: "→
`minfeerate`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Minimum feerate (in duffs per byte)" + +- n: "→
`mintxsize`" + t: "numeric" + p: "Required
(exactly 1)" + +- n: "→
`outs`" + t: "numeric" + p: "Required
(exactly 1)" + d: "The number of outputs" + +- n: "→
`subsidy`" + t: "numeric" + p: "Required
(exactly 1)" + d: "The block subsidy" + +- n: "→
`time`" + t: "number (real)" + p: "Required
(exactly 1)" + d: "The block time" + +- n: "→
`total_out`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Total amount in all outputs (excluding coinbase and thus reward [i.e. subsidy + totalfee])" + +- n: "→
`total_size`" + t: "numeric" + p: "Required
(exactly 1)" + d: "Total size of all non-coinbase transactions" + +- n: "→
`totalfee`" + t: "numeric" + p: "Required
(exactly 1)" + d: "The fee total" + +- n: "→
`txs`" + t: "numeric" + p: "Required
(exactly 1)" + d: "The number of transactions (excluding coinbase)" + +- n: "→
`utxo_increase`" + t: "numeric" + p: "Required
(exactly 1)" + d: "The increase/decrease in the number of unspent outputs" + +- n: "→
`utxo_size_inc`" + t: "numeric" + p: "Required
(exactly 1)" + d: "The increase/decrease in size for the utxo index (not discounting op_return and similar)" +{% enditemplate %} + +*Example from Dash Core 0.14.1* + +{% highlight bash %} +dash-cli getblockstats 1000 '["blockhash","subsidy", "txs"]' +{% endhighlight %} + +Result: +{% highlight json %} +{ + "blockhash": "000004e906762c8c70583418d46915b4271fa83c29d5b88544d05e09e3f3621d", + "subsidy": 50000000000, + "txs": 1 +} +{% endhighlight %} + +*See also: none* + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getblocktemplate.md b/_includes/devdoc/dash-core/rpcs/rpcs/getblocktemplate.md index 7cf947f9..0f0bbfd1 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getblocktemplate.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getblocktemplate.md @@ -115,17 +115,17 @@ information, please see the following resources: - n: "→ →
Transaction" t: "object" - p: "Optional (0 or more)" + p: "Optional
(0 or more)" d: "Non-coinbase transaction" - n: "→ → →
`data`" t: "string (hex)" - p: "Optional (0 or more)" + p: "Optional
(0 or more)" d: "Transaction data encoded in hex (byte-for-byte)" - n: "→ → →
`hash`" t: "string (hex)" - p: "Optional (0 or more)" + p: "Optional
(0 or more)" d: "The hash/id encoded in little-endian hex" - n: "→ → →
`depends`" @@ -218,27 +218,37 @@ information, please see the following resources: p: "Required
(exactly 1)" d: "The compressed target of next block" +- n: "→
`previousbits`" + t: "string" + p: "Required
(exactly 1)" + d: "The compressed target of the current highest block" + - n: "→
`height`" t: "number" p: "Required
(exactly 1)" d: "The height of the next block" - n: "→
`masternode`" - t: "object" - p: "Required
(exactly 1)" - d: "The masternode payee that must be included in the next block" + t: "array (objects)" + p: "Required
(0 or more)" + d: "Required masternode payments that must be included in the next block" -- n: "→ →
`payee`" +- n: "→ →
Masternode Payee" + t: "object" + p: "Optional
(0 or more)" + d: "Object containing a masternode payee's information" + +- n: "→ → →
`payee`" t: "string" p: "Required
(exactly 1)" d: "Payee address" -- n: "→ →
`script`" +- n: "→ → →
`script`" t: "string" p: "Required
(exactly 1)" d: "Payee scriptPubKey" -- n: "→ →
`amount`" +- n: "→ → →
`amount`" t: "number" p: "Required
(exactly 1)" d: "Required amount to pay" @@ -260,7 +270,7 @@ information, please see the following resources: - n: "→ →
Superblock Payee" t: "object" - p: "Optional (0 or more)" + p: "Optional
(0 or more)" d: "Object containing a superblock payee's information" - n: "→ → →
`payee`" @@ -288,9 +298,13 @@ information, please see the following resources: p: "Required
(exactly 1)" d: "True if superblock payments enabled" +- n: "→
`coinbase_payload`" + t: "string" + p: "Required
(exactly 1)" + d: "_Added in Dash Core 0.13.0_

Coinbase transaction payload data encoded in hexadecimal" {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.13.0* {% highlight bash %} dash-cli -testnet getblocktemplate @@ -303,41 +317,26 @@ Result: "capabilities": [ "proposal" ], - "version": 536870913, + "version": 536870920, "rules": [ - "dip0001" + "csv", + "dip0001", + "bip147" ], "vbavailable": { - "csv": 0 + "dip0003": 3 }, "vbrequired": 0, - "previousblockhash": "000000003d5c325259275fbf51a5dd623a13aade887cf83e5fdc3b\ - 11898a71ce", + "previousblockhash": "0000000004dd4bf3ed4f4bac4a8f8c781a73bff32886390ec15fa0c5686476ac", "transactions": [ - { - "data": "01000000013e9e7e2116d8546a54d8531092d50e2da705a6f229f91a6d129f\ - 3f3e529d2bdb010000006a473044022044569ec727012e06bd4fa853fdcb2d\ - c268f193ca00b68649f3dee0c0ca3207ff02206dc8656025c2f503e58779e6\ - 8a14ed18a7134f2c7d2c4235269bd70a3d6d5bd301210226d4ce54b37c1886\ - 92844201edbfb19e37cdbe7138a133b92b7d3d43ec157da6feffffff02a00b\ - d100000000001976a914d7b47d4b40a23c389f5a17754d7f60f511c7d0ec88\ - ac43321005140000001976a914616fdfd6eae0548f0b0f51bef165974abc10\ - 511688ac1e1f0000", - "hash": "9fd01aafcb4c59741ddfef41da2ec0eb3e1cc5b740150320b29534abdcd67e77", - "depends": [ - ], - "fee": 226, - "sigops": 2 - } ], "coinbaseaux": { "flags": "" }, - "coinbasevalue": 13230000226, - "longpollid": "000000003d5c325259275fbf51a5dd623a13aade887cf83e5fdc3b11898a\ - 71ce316", - "target": "00000001231e0000000000000000000000000000000000000000000000000000", - "mintime": 1507737402, + "coinbasevalue": 2089285715, + "longpollid": "0000000004dd4bf3ed4f4bac4a8f8c781a73bff32886390ec15fa0c5686476ac4", + "target": "000000000eeb4b00000000000000000000000000000000000000000000000000", + "mintime": 1542118149, "mutable": [ "time", "transactions", @@ -346,20 +345,24 @@ Result: "noncerange": "00000000ffffffff", "sigoplimit": 40000, "sizelimit": 2000000, - "curtime": 1507738818, - "bits": "1d01231e", - "height": 7967, - "masternode": { - "payee": "yaJc6tADbEjxQBAC69ugWNoTFpzxqkcgWd", - "script": "76a914996911b133d83de25d1f169c7046d74b728a757b88ac", - "amount": 6615000108 - }, + "curtime": 1542119335, + "bits": "1c0eeb4b", + "previousbits": "1c0e639b", + "height": 263905, + "masternode": [ + { + "payee": "yedxgyCLu7BpxBbpeLUw4vAkxNrcEgHt57", + "script": "76a914c8f2a948efe84e9d9795aa473c5afb6023d6c07488ac", + "amount": 1044642850 + } + ], "masternode_payments_started": true, "masternode_payments_enforced": true, "superblock": [ ], "superblocks_started": true, - "superblocks_enabled": true + "superblocks_enabled": true, + "coinbase_payload": "" } {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getchaintxstats.md b/_includes/devdoc/dash-core/rpcs/rpcs/getchaintxstats.md new file mode 100644 index 00000000..01e80365 --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getchaintxstats.md @@ -0,0 +1,79 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/getchaintxstats.md" %} + + +##### GetChainTxStats +{% include helpers/subhead-links.md %} + +{% assign summary_getChainTxStats="compute statistics about the total number and rate of transactions in the chain." %} + +{% autocrossref %} + +The `getchaintxstats` RPC {{summary_getChainTxStats}} + +*Parameter #1---nblocks* + +{% itemplate ntpd1 %} +- n: "nblocks" + t: "number (int)" + p: "Optional" + d: "Size of the window in number of blocks (default: one month)." + +{% enditemplate %} + +*Parameter #2---blockhash* + +{% itemplate ntpd1 %} +- n: "blockhash" + t: "string" + p: "Optional" + d: "The hash of the block that ends the window." + +{% enditemplate %} + +*Result--statistics about transactions* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object" + p: "Required
(exactly 1)" + d: "Object containing transaction statistics" + +- n: "→
`time`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The timestamp for the statistics in UNIX format" + +- n: "→
`txcount`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The total number of transactions in the chain up to that point" + +- n: "→
`txrate`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The average rate of transactions per second in the window" + +{% enditemplate %} + +*Example from Dash Core 0.14.1* + +{% highlight bash %} +dash-cli -testnet getchaintxstats +{% endhighlight %} + +Result: +{% highlight json %} +{ + "time": 1566416832, + "txcount": 1353139, + "txrate": 0.04107376448354556 +} +{% endhighlight %} + +*See also: none* + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getgovernanceinfo.md b/_includes/devdoc/dash-core/rpcs/rpcs/getgovernanceinfo.md index feebc2de..0b151dfc 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getgovernanceinfo.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getgovernanceinfo.md @@ -30,16 +30,6 @@ The `getgovernanceinfo` RPC {{summary_getGovernanceInfo}} p: "Required
(exactly 1)" d: "The absolute minimum number of votes needed to trigger a governance action" -- n: "→
`masternodewatchdogmaxseconds`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "*DEPRECATED in Dash Core 0.12.3*

Sentinel watchdog expiration time in seconds" - -- n: "→
`sentinelpingmaxseconds`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "*Added in Dash Core 0.12.3.0*

Sentinel ping expiration time in seconds" - - n: "→
`proposalfee`" t: "number (int)" p: "Required
(exactly 1)" @@ -60,14 +50,9 @@ The `getgovernanceinfo` RPC {{summary_getGovernanceInfo}} p: "Required
(exactly 1)" d: "The block number of the next superblock" -- n: "→
`maxgovobjdatasize`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "*Added in Dash Core 0.12.2.2*

The maximum governance object data size in bytes" - {% enditemplate %} -*Example from Dash Core 0.12.3.0* +*Example from Dash Core 0.14.0* {% highlight bash %} dash-cli -testnet getgovernanceinfo @@ -77,13 +62,10 @@ Result: {% highlight json %} { "governanceminquorum": 1, - "masternodewatchdogmaxseconds": 7200, - "sentinelpingmaxseconds": 7200, "proposalfee": 5.00000000, "superblockcycle": 24, - "lastsuperblock": 82704, - "nextsuperblock": 82728, - "maxgovobjdatasize": 16384 + "lastsuperblock": 250824, + "nextsuperblock": 250848 } {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getinfo.md b/_includes/devdoc/dash-core/rpcs/rpcs/getinfo.md index 3612c887..444a8700 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getinfo.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getinfo.md @@ -3,6 +3,7 @@ This file is licensed under the MIT License (MIT) available on http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/getinfo.md" %} + ##### GetInfo {% include helpers/subhead-links.md %} @@ -26,6 +27,11 @@ Core. Use the RPCs listed in the See Also subsection below instead. p: "Required
(exactly 1)" d: "Information about this node and the network" +- n: "→
`deprecation-warning`" + t: "string" + p: "Required
(exactly 1)" + d: "Warning that the getinfo command is deprecated and will be removed in a future version" + - n: "→
`version`" t: "number (int)" p: "Required
(exactly 1)" @@ -104,7 +110,7 @@ Core. Use the RPCs listed in the See Also subsection below instead. - n: "→
`relayfee`" t: "number (duffs)" p: "Required
(exactly 1)" - d: "The minimum fee a low-priority transaction must pay in order for this node to accept it into its memory pool" + d: "The minimum fee per kilobyte a transaction must pay in order for this node to accept it into its memory pool" - n: "→
`errors`" t: "string" @@ -113,7 +119,7 @@ Core. Use the RPCs listed in the See Also subsection below instead. {% enditemplate %} -*Example from Dash Core 0.12.2 with wallet support enabled* +*Example from Dash Core 0.14.1 with wallet support enabled* {% highlight bash %} dash-cli -testnet getinfo @@ -123,8 +129,9 @@ Result: {% highlight json %} { - "version": 120200, - "protocolversion": 70208, + "deprecation-warning": "WARNING: getinfo is deprecated and will be fully removed in a future version. Projects should transition to using getblockchaininfo, getnetworkinfo, and getwalletinfo.", + "version": 140100, + "protocolversion": 70215, "walletversion": 61000, "balance": 0.00000000, "privatesend_balance": 0.00000000, diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getmemoryinfo.md b/_includes/devdoc/dash-core/rpcs/rpcs/getmemoryinfo.md index 2321a4d1..772c1082 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getmemoryinfo.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getmemoryinfo.md @@ -17,7 +17,16 @@ http://opensource.org/licenses/MIT. The `getmemoryinfo` RPC {{summary_getMemoryInfo}} -*Parameters: none* +*Parameter #1---mode* + +{% itemplate ntpd1 %} +- n: "mode" + t: "string" + p: "Optional
Default: `stats`" + d: "*Added in Dash Core 0.14.1*

Determines what kind of information is returned.
+ - `stats` returns general statistics about memory usage in the daemon.
+ - `mallocinfo` returns an XML string describing low-level heap state (only available if compiled with glibc 2.10+)." +{% enditemplate %} *Result---information about memory usage* @@ -75,15 +84,14 @@ Result: {% highlight json %} { "locked": { - "used": 32, - "free": 65504, - "total": 65536, - "locked": 65536, - "chunks_used": 1, - "chunks_free": 1 + "used": 1146240, + "free": 426624, + "total": 1572864, + "locked": 1572864, + "chunks_used": 16368, + "chunks_free": 7 } } - {% endhighlight %} *See also* diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolancestors.md b/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolancestors.md index 84099efd..c5280824 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolancestors.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolancestors.md @@ -90,16 +90,6 @@ The `getmempoolancestors` RPC {{summary_getMemPoolAncestors}} p: "Required
(exactly 1)" d: "The block height when the transaction entered the memory pool" -- n: "→ →
`startingpriority`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The priority of the transaction when it first entered the memory pool" - -- n: "→ →
`currentpriority`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The current priority of the transaction" - - n: "→ →
`descendantcount`" t: "number (int)" p: "Required
(exactly 1)" @@ -176,8 +166,6 @@ Result: "modifiedfee": 0.00000966, "time": 1519160516, "height": 79045, - "startingpriority": 4514051697.115385, - "currentpriority": 4520474899.74359, "descendantcount": 2, "descendantsize": 1189, "descendantfees": 1192, diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getmempooldescendants.md b/_includes/devdoc/dash-core/rpcs/rpcs/getmempooldescendants.md index c2d8c671..a51da6f7 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getmempooldescendants.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getmempooldescendants.md @@ -90,16 +90,6 @@ The `getmempooldescendants` RPC {{summary_getMemPoolDescendants}} p: "Required
(exactly 1)" d: "The block height when the transaction entered the memory pool" -- n: "→ →
`startingpriority`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The priority of the transaction when it first entered the memory pool" - -- n: "→ →
`currentpriority`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The current priority of the transaction" - - n: "→ →
`descendantcount`" t: "number (int)" p: "Required
(exactly 1)" @@ -142,7 +132,7 @@ The `getmempooldescendants` RPC {{summary_getMemPoolDescendants}} {% enditemplate %} -*Examples from Dash Core 0.12.3* +*Examples from Dash Core 0.14.0* The default (`false`): @@ -176,8 +166,6 @@ Result: "modifiedfee": 0.00000226, "time": 1519160551, "height": 79046, - "startingpriority": 0, - "currentpriority": 0, "descendantcount": 1, "descendantsize": 226, "descendantfees": 226, diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolentry.md b/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolentry.md index 62154513..3c8da3f4 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolentry.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolentry.md @@ -13,7 +13,7 @@ http://opensource.org/licenses/MIT. {% autocrossref %} -*Added in Dash Core 0.12.3* +*Added in Dash Core 0.14.0* The `getmempoolentry` RPC {{summary_getMemPoolEntry}} @@ -60,16 +60,6 @@ The `getmempoolentry` RPC {{summary_getMemPoolEntry}} p: "Required
(exactly 1)" d: "The block height when the transaction entered the memory pool" -- n: "→
`startingpriority`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The priority of the transaction when it first entered the memory pool" - -- n: "→
`currentpriority`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The current priority of the transaction" - - n: "→
`descendantcount`" t: "number (int)" p: "Required
(exactly 1)" @@ -110,11 +100,6 @@ The `getmempoolentry` RPC {{summary_getMemPoolEntry}} p: "Optional (0 or more)" d: "The TXIDs of any unconfirmed transactions this transaction depends upon, encoded as hex in RPC byte order" -- n: "→
`instantsend`" - t: "bool" - p: "Required
(exactly 1)" - d: "True if this transaction was sent as an InstantSend one" - - n: "→
`instantlock`" t: "bool" p: "Required
(exactly 1)" @@ -133,23 +118,20 @@ Result: {% highlight json %} { - "size": 226, - "fee": 0.00000226, - "modifiedfee": 0.00000226, - "time": 1519159538, - "height": 79036, - "startingpriority": 0, - "currentpriority": 0, - "descendantcount": 2, - "descendantsize": 452, - "descendantfees": 452, + "size": 372, + "fee": 0.00000375, + "modifiedfee": 0.00000375, + "time": 1566315602, + "height": 159320, + "descendantcount": 1, + "descendantsize": 372, + "descendantfees": 375, "ancestorcount": 1, - "ancestorsize": 226, - "ancestorfees": 226, + "ancestorsize": 372, + "ancestorfees": 375, "depends": [ ], - "instantsend": false, - "instantlock": false + "instantlock": true } {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolinfo.md b/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolinfo.md index 85d3e997..f41244a8 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolinfo.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getmempoolinfo.md @@ -48,9 +48,14 @@ The `getmempoolinfo` RPC {{summary_getMemPoolInfo}} p: "Required
(exactly 1)" d: "*Added in Bitcoin Core 0.12.0*

The lowest fee per kilobyte paid by any transaction in the memory pool" +- n: "→
`instantsendlocks`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "*Added in Dash Core 0.14.1*

Number of unconfirmed InstantSend locks" + {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.1* {% highlight bash %} dash-cli -testnet getmempoolinfo @@ -61,10 +66,11 @@ Result: {% highlight json %} { "size": 1, - "bytes": 3471, - "usage": 8544, + "bytes": 666, + "usage": 1936, "maxmempool": 300000000, - "mempoolminfee": 0.00000000 + "mempoolminfee": 0.00000000, + "instantsendlocks": 1 } {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getmerkleblocks.md b/_includes/devdoc/dash-core/rpcs/rpcs/getmerkleblocks.md new file mode 100644 index 00000000..5a3904b7 --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getmerkleblocks.md @@ -0,0 +1,82 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/getmerkleblocks.md" %} + + +##### GetMerkleBlocks +{% include helpers/subhead-links.md %} + +{% assign summary_getMerkleBlocks="returns an array of hex-encoded merkleblocks for blocks starting from which match ." %} + +{% autocrossref %} + +*Added in Dash Core 0.14.1* + +The `getmerkleblocks` RPC {{summary_getMerkleBlocks}} + +*Parameter #1---filter* + +{% itemplate ntpd1 %} +- n: "filter" + t: "string" + p: "Required
(exactly 1)" + d: "The hex encoded bloom filter" + +{% enditemplate %} + +*Parameter #2---hash* + +{% itemplate ntpd1 %} +- n: "hash" + t: "string" + p: "Required
(exactly 1)" + d: "The block hash" + +{% enditemplate %} + +*Parameter #3---count* + +{% itemplate ntpd1 %} +- n: "count" + t: "number (int)" + p: "Optional
Default/max=2000" + d: "" + +{% enditemplate %} + +*Result---the list of merkleblocks* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "array" + p: "Required
(exactly 1)" + d: "An array of merkleblocks" + +- n: "→
Merkle Block" + t: "string (hex)" + p: "Optional
(1 or more)" + d: "A serialized, hex-encoded merkleblock" +{% enditemplate %} + +*Example from Dash Core 0.14.1* + +{% highlight bash %} +dash-cli getmerkleblocks \ + "2303028005802040100040000008008400048141010000f8400420800080025004000004130000000000000001" \ + "00000000007e1432d2af52e8463278bf556b55cf5049262f25634557e2e91202" + 2000 +{% endhighlight %} + +Result (truncated): +{% highlight json %} +[ + "000000202c...aefc440107", + "0000002058...9a17830103" +] +{% endhighlight %} + +*See also: none* + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getnetworkinfo.md b/_includes/devdoc/dash-core/rpcs/rpcs/getnetworkinfo.md index 1f25f110..9377d2ee 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getnetworkinfo.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getnetworkinfo.md @@ -55,6 +55,11 @@ The `getnetworkinfo` RPC {{summary_getNetworkInfo}} p: "Required
(exactly 1)" d: "The offset of the node's clock from the computer's clock (both in UTC) in seconds. The offset may be up to 4200 seconds (70 minutes)" +- n: "→
`networkactive`" + t: "bool" + p: "Required
(exactly 1)" + d: "Set to `true` if P2P networking is enabled. Set to `false` if P2P networking is disabled. Enabling/disabling done via [SetNetworkActive][rpc setnetworkactive]" + - n: "→
`connections`" t: "number (int)" p: "Required
(exactly 1)" @@ -98,7 +103,7 @@ The `getnetworkinfo` RPC {{summary_getNetworkInfo}} - n: "→
`relayfee`" t: "number (DASH)" p: "Required
(exactly 1)" - d: "The minimum relay fee for non-free transactions in order for this node to accept it into its memory pool" + d: "The minimum relay fee per kilobyte for transactions in order for this node to accept it into its memory pool" - n: "→
`incrementalfee`" t: "number (DASH)" @@ -196,5 +201,6 @@ Result (actual addresses have been replaced with [RFC5737][] reserve * [GetPeerInfo][rpc getpeerinfo]: {{summary_getPeerInfo}} * [GetNetTotals][rpc getnettotals]: {{summary_getNetTotals}} +* [SetNetworkActive][rpc setnetworkactive]: {{summary_setNetworkActive}} {% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getpeerinfo.md b/_includes/devdoc/dash-core/rpcs/rpcs/getpeerinfo.md index 0f4b5e59..c4f7f9b1 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getpeerinfo.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getpeerinfo.md @@ -3,6 +3,7 @@ This file is licensed under the MIT License (MIT) available on http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/getpeerinfo.md" %} + ##### GetPeerInfo {% include helpers/subhead-links.md %} @@ -43,6 +44,11 @@ The `getpeerinfo` RPC {{summary_getPeerInfo}} p: "Optional
(0 or 1)" d: "Our IP address and port number according to the remote node. May be incorrect due to error or lying. Most SPV nodes set this to `127.0.0.1:9999`" +- n: "→ →
`addrbind`" + t: "string" + p: "Optional
(0 or 1)" + d: "Bind address of the connection to the peer" + - n: "→ →
`services`" t: "string (hex)" p: "Required
(exactly 1)" @@ -108,6 +114,11 @@ The `getpeerinfo` RPC {{summary_getPeerInfo}} p: "Required
(exactly 1)" d: "Set to `true` if this node connected to us (inbound); set to `false` if we connected to this node (outbound)" +- n: "→ →
`addnode`" + t: "bool" + p: "Required
(exactly 1)" + d: "Set to `true` if this node was added via the `addnode` RPC." + - n: "→ →
`startingheight`" t: "number (int)" p: "Required
(exactly 1)" @@ -180,6 +191,7 @@ Result (edited to show only a single entry, with IP addresses changed to "id": 3, "addr": "192.0.2.113:19999", "addrlocal": "127.0.0.1:56332", + "addrbind": "192.168.10.111:56332", "services": "0000000000000005", "relaytxes": true, "lastsend": 1507818327, @@ -188,62 +200,62 @@ Result (edited to show only a single entry, with IP addresses changed to "bytesrecv": 887651, "conntime": 1507808575, "timeoffset": 0, - "pingtime": 0.189852, - "minping": 0.187152, - "version": 70208, - "subver": "/Dash Core:0.12.2/", + "pingtime": 0.113646, + "minping": 0.106826, + "version": 70215, + "subver": "/Dash Core:0.14.0.3/", "inbound": false, - "startingheight": 8416, + "addnode": false, + "startingheight": 159292, "banscore": 0, - "synced_headers": 8474, - "synced_blocks": 8474, + "synced_headers": 159350, + "synced_blocks": 159350, "inflight": [ ], "whitelisted": false, "bytessent_per_msg": { - "addr": 165, - "dseg": 65, - "dsq": 33984, + "addr": 55, + "dsq": 69530, "getaddr": 24, - "getdata": 73261, - "getheaders": 861, - "getsporks": 48, - "govobj": 20244, - "govobjvote": 22196, - "govsync": 545682, - "headers": 106, - "inv": 139035, - "mnget": 28, - "notfound": 1220, - "ping": 2624, - "pong": 2624, + "getdata": 9224, + "getheaders": 989, + "getsporks": 24, + "govsync": 66, + "headers": 6148, + "inv": 837, + "ping": 1856, + "pong": 1856, + "qsendrecsigs": 25, + "sendcmpct": 33, + "senddsq": 25, "sendheaders": 24, - "ssc": 1792, + "tx": 5808, "verack": 24, - "version": 128 + "version": 160 }, "bytesrecv_per_msg": { - "addr": 4365, - "block": 22307, - "dsq": 33984, - "getdata": 10417, - "getheaders": 861, - "govobjvote": 179, - "govsync": 4620, - "headers": 6254, - "inv": 130964, - "mnp": 352, - "mnw": 600208, - "notfound": 31192, - "ping": 2624, - "pong": 2624, + "*other*": 25, + "addr": 17362, + "clsig": 3276, + "getdata": 122, + "getheaders": 989, + "headers": 5300, + "inv": 24611, + "islock": 3249, + "mnauth": 152, + "ping": 1856, + "pong": 1856, + "qsigrec": 16492, + "sendcmpct": 33, + "senddsq": 25, "sendheaders": 24, - "spork": 2860, - "ssc": 33664, + "spork": 2090, + "ssc": 32, + "tx": 11523, "verack": 24, - "version": 128 + "version": 162 } - }, + } ] {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getrawmempool.md b/_includes/devdoc/dash-core/rpcs/rpcs/getrawmempool.md index e5224288..17de4a62 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getrawmempool.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getrawmempool.md @@ -78,16 +78,6 @@ The `getrawmempool` RPC {{summary_getRawMemPool}} p: "Required
(exactly 1)" d: "The block height when the transaction entered the memory pool" -- n: "→ →
`startingpriority`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The priority of the transaction when it first entered the memory pool" - -- n: "→ →
`currentpriority`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The current priority of the transaction" - - n: "→ →
`descendantcount`" t: "number (int)" p: "Required
(exactly 1)" @@ -128,11 +118,6 @@ The `getrawmempool` RPC {{summary_getRawMemPool}} p: "Optional (0 or more)" d: "The TXIDs of any unconfirmed transactions this transaction depends upon, encoded as hex in RPC byte order" -- n: "→ →
`instantsend`" - t: "bool" - p: "Required
(exactly 1)" - d: "*Added in Dash Core 0.12.3*

Set to `true` for transactions broadcast via the `ix` message (InstantSend lock requested). Set to `false` for standard (non-InstantSend) transactions" - - n: "→ →
`instantlock`" t: "bool" p: "Required
(exactly 1)" @@ -166,44 +151,38 @@ Result: {% highlight json %} { - "8fd1440ed74d3739aa4e1700e9b2fdb32bc5c138fe79dd319f965f67339eb1ce": { - "size": 372, - "fee": 0.00020000, - "modifiedfee": 0.00020000, - "time": 1519928121, - "height": 83907, - "startingpriority": 2224190635.564103, - "currentpriority": 2224190635.564103, - "descendantcount": 2, - "descendantsize": 598, - "descendantfees": 20226, - "ancestorcount": 1, - "ancestorsize": 372, - "ancestorfees": 20000, - "depends": [ - ], - "instantsend": true, - "instantlock": true - }, - "2d914d77305dd968bbd67aeb8604cf7e9d66a7df58bf5216724db69a54000f40": { - "size": 226, + "3bf4985183ddebcb6b1d58fa04dae9728a8f2bf20be298d81e38a8bd2f50ea47": { + "size": 225, "fee": 0.00000226, "modifiedfee": 0.00000226, - "time": 1519928256, - "height": 83907, - "startingpriority": 0, - "currentpriority": 0, + "time": 1566315512, + "height": 159318, "descendantcount": 1, - "descendantsize": 226, + "descendantsize": 225, "descendantfees": 226, "ancestorcount": 2, - "ancestorsize": 598, - "ancestorfees": 20226, + "ancestorsize": 5760, + "ancestorfees": 5780, "depends": [ - "8fd1440ed74d3739aa4e1700e9b2fdb32bc5c138fe79dd319f965f67339eb1ce" + "1b8fdb3ce371c1274ee60df807d631320e7efaf30e7867584eb44b8ec4c19d12" ], - "instantsend": false, - "instantlock": false + "instantlock": true + }, + "1b8fdb3ce371c1274ee60df807d631320e7efaf30e7867584eb44b8ec4c19d12": { + "size": 5535, + "fee": 0.00005554, + "modifiedfee": 0.00005554, + "time": 1566315441, + "height": 159318, + "descendantcount": 2, + "descendantsize": 5760, + "descendantfees": 5780, + "ancestorcount": 1, + "ancestorsize": 5535, + "ancestorfees": 5554, + "depends": [ + ], + "instantlock": true } } {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getrawtransaction.md b/_includes/devdoc/dash-core/rpcs/rpcs/getrawtransaction.md index 77d85687..59601405 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getrawtransaction.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getrawtransaction.md @@ -70,16 +70,22 @@ deprecated. p: "Required
(exactly 1)" d: "If the transaction was found, this will be an object describing it" -- n: "{{DEPTH}} →
`hex`" +{{INCLUDE_DECODE_RAW_TRANSACTION}} +- n: "→
`hex`" t: "string (hex)" p: "Required
(exactly 1)" d: "The serialized, hex-encoded data for the provided `txid`" -{{INCLUDE_DECODE_RAW_TRANSACTION}} + - n: "→
`blockhash`" t: "string (hex)" p: "Optional
(0 or 1)" d: "If the transaction has been included in a block on the local best block chain, this is the hash of that block encoded as hex in RPC byte order" +- n: "→
`height`" + t: "number (int)" + p: "Optional
(0 or 1)" + d: "The block height where the transaction was mined" + - n: "→
`confirmations`" t: "number (int)" p: "Required
(exactly 1)" @@ -95,34 +101,49 @@ deprecated. p: "Optional
(0 or 1)" d: "This field is currently identical to the time field described above" +- n: "→
`instantlock`" + t: "bool" + p: "Required
(exactly 1)" + d: "If set to `true`, this transaction is locked (by InstantSend or a ChainLock)" + +- n: "→
`instantlock_internal`" + t: "bool" + p: "Required
(exactly 1)" + d: "If set to `true`, this transaction has an InstantSend lock" + +- n: "→
`chainlock`" + t: "bool" + p: "Required
(exactly 1)" + d: "*Added in Dash Core 0.14.0*

If set to `true`, this transaction is in a block that is locked (not susceptible to a chain re-org)" + {% enditemplate %} -*Examples from Dash Core 0.12.2* +*Examples from Dash Core 0.14.0* -A transaction in serialized transaction format: +A classical transaction in serialized transaction format: {% highlight bash %} dash-cli getrawtransaction \ - 2f124cb550d9967b81914b544dea3783de23e85d67a9816f9bada665ecfe1cd5 + f4de3be04efa18e203c9d0b7ad11bb2517f5889338918ed300a374f5bd736ed7 {% endhighlight %} Result (wrapped): {% highlight text %} -01000000016b490886c0198b028c6c5cb145c4eb3b1055a224a7a105aadeff41\ -b69ec91e060100000069463043022033a61c56fa0867ed67b76b023204a9dc0e\ -e6b0d63305dc5f65fe94335445ff2f021f712f55399d5238fc7146497c431fc4\ -182a1de0b96fc22716e0845f561d542e012102eacba539d92eb88d4e73bb3274\ -9d79f53f6e8d7947ac40a71bd4b26c13b6ec29ffffffff0200205fa012000000\ -1976a914485485425fa99504ec1638ac4213f3cfc9f32ef388acc0a8f9be0100\ -00001976a914811eacc14db8ebb5b64486dc43400c0226b428a488ac00000000 +02000000015d0b26079696875e9fc3cb480420aae3c8b1da628fbb14cc718066\ +df7fe7c5fd010000006a47304402202cfa683981898ad9adb8953423a38f7185\ +ed41e163aa195d608fbe5bc3034910022034e2376aaed1c6576c0dad79d626ee\ +27f706baaed86dabb105979c3e6f6e1cb9012103d14eb001cf0908f3a2333d17\ +1f6236497a82318a6a6f649b4d7fd8e5c8922e08feffffff021e3f4b4c000000\ +001976a914b02ae52066542b4aec5cf45c7cae3183d7bd322788ac00f9029500\ +0000001976a914252c9de3a0ebd5c95886187b24969d4ccdb5576e88ac943d0000 {% endhighlight %} Get the same transaction in JSON: {% highlight bash %} dash-cli getrawtransaction \ -2f124cb550d9967b81914b544dea3783de23e85d67a9816f9bada665ecfe1cd5 \ +f4de3be04efa18e203c9d0b7ad11bb2517f5889338918ed300a374f5bd736ed7 \ 1 {% endhighlight %} @@ -130,65 +151,172 @@ Result: {% highlight json %} { - "hex": "01000000016b490886c0198b028c6c5cb145c4eb3b1055a224a7a105aadeff41b69ec91e060100000069463043022033a61c56fa0867ed67b76b023204a9dc0ee6b0d63305dc5f65fe94335445ff2f021f712f55399d5238fc7146497c431fc4182a1de0b96fc22716e0845f561d542e012102eacba539d92eb88d4e73bb32749d79f53f6e8d7947ac40a71bd4b26c13b6ec29ffffffff0200205fa0120000001976a914485485425fa99504ec1638ac4213f3cfc9f32ef388acc0a8f9be010000001976a914811eacc14db8ebb5b64486dc43400c0226b428a488ac00000000", - "txid": "2f124cb550d9967b81914b544dea3783de23e85d67a9816f9bada665ecfe1cd5", - "size": 224, - "version": 1, + "txid": "f4de3be04efa18e203c9d0b7ad11bb2517f5889338918ed300a374f5bd736ed7", + "version": 2, + "type": 0, + "size": 225, + "locktime": 15764, + "vin": [ + { + "txid": "fdc5e77fdf668071cc14bb8f62dab1c8e3aa200448cbc39f5e87969607260b5d", + "vout": 1, + "scriptSig": { + "asm": "304402202cfa683981898ad9adb8953423a38f7185ed41e163aa195d608fbe5bc3034910022034e2376aaed1c6576c0dad79d626ee27f706baaed86dabb105979c3e6f6e1cb9[ALL] 03d14eb001cf0908f3a2333d171f6236497a82318a6a6f649b4d7fd8e5c8922e08", + "hex": "47304402202cfa683981898ad9adb8953423a38f7185ed41e163aa195d608fbe5bc3034910022034e2376aaed1c6576c0dad79d626ee27f706baaed86dabb105979c3e6f6e1cb9012103d14eb001cf0908f3a2333d171f6236497a82318a6a6f649b4d7fd8e5c8922e08" + }, + "value": 37.80000000, + "valueSat": 3780000000, + "address": "yTsGq4wV8WF5GKLaYV2C43zrkr2sfTtysT", + "sequence": 4294967294 + } + ], + "vout": [ + { + "value": 12.79999774, + "valueSat": 1279999774, + "n": 0, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 b02ae52066542b4aec5cf45c7cae3183d7bd3227 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a914b02ae52066542b4aec5cf45c7cae3183d7bd322788ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "ycNwAN4DQ7Xnw5XLKg84SR4U1GE22FfLNQ" + ] + }, + "spentTxId": "85b40136f077cded9587022645fde82389e2f01b0bec697d8cd22ccab930f3d3", + "spentIndex": 19, + "spentHeight": 20631 + }, + { + "value": 25.00000000, + "valueSat": 2500000000, + "n": 1, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 252c9de3a0ebd5c95886187b24969d4ccdb5576e OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a914252c9de3a0ebd5c95886187b24969d4ccdb5576e88ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "yPi1JKw5fn8bMFsCCtnkGagogW6GXwGktZ" + ] + }, + "spentTxId": "90aa8902dbab71c07a5ac06dfe45c5e5fa1f032788b5f916951d0969c9feef39", + "spentIndex": 1, + "spentHeight": 24630 + } + ], + "hex": "02000000015d0b26079696875e9fc3cb480420aae3c8b1da628fbb14cc718066df7fe7c5fd010000006a47304402202cfa683981898ad9adb8953423a38f7185ed41e163aa195d608fbe5bc3034910022034e2376aaed1c6576c0dad79d626ee27f706baaed86dabb105979c3e6f6e1cb9012103d14eb001cf0908f3a2333d171f6236497a82318a6a6f649b4d7fd8e5c8922e08feffffff021e3f4b4c000000001976a914b02ae52066542b4aec5cf45c7cae3183d7bd322788ac00f90295000000001976a914252c9de3a0ebd5c95886187b24969d4ccdb5576e88ac943d0000", + "blockhash": "0000000005f395d62a40ef9f2a13000bd4076e2131c8671db8333a5b31e4403f", + "height": 15765, + "confirmations": 153657, + "time": 1546278750, + "blocktime": 1546278750, + "instantlock": true, + "instantlock_internal": false, + "chainlock": true +} +{% endhighlight %} + + +A special transaction (CbTx) in serialized transaction format: + +{% highlight bash %} +dash-cli getrawtransaction \ + 25632685ed0d7286901a80961c924c1ddd952e764754dbd8b40d0956413c8b56 +{% endhighlight %} + +Result (wrapped): + +{% highlight text %} +030005000100000000000000000000000000000000000000000000000000000000000\ +00000ffffffff2703ae50011a4d696e656420627920416e74506f6f6c2021000b0120\ +1da9196f0000000007000000ffffffff02809e4730000000001976a914cbd7bfcc503\ +51180132b2c0698cb90ad74c473c788ac809e4730000000001976a91488a060bc2dfe\ +05780ae4dcb6c98b12436c35a93988ac00000000460200ae50010078e5c08b3996088\ +7bf95185c381bdb719e60b6925fa12af78a8824fade927387c757acb6bac63da84f92\ +45e20cfd5d830382ac634d434725ca6349ab5db920a3 +{% endhighlight %} + +Get the same transaction in JSON: + +{% highlight bash %} +dash-cli getrawtransaction \ +25632685ed0d7286901a80961c924c1ddd952e764754dbd8b40d0956413c8b56 \ +1 +{% endhighlight %} + +Result: + +{% highlight json %} +{ + "txid": "25632685ed0d7286901a80961c924c1ddd952e764754dbd8b40d0956413c8b56", + "version": 3, + "type": 5, + "size": 229, "locktime": 0, "vin": [ { - "txid": "061ec99eb641ffdeaa05a1a724a255103bebc445b15c6c8c028b19c08608496b", - "vout": 1, - "scriptSig": { - "asm": "3043022033a61c56fa0867ed67b76b023204a9dc0ee6b0d63305dc5f65fe94335445ff2f021f712f55399d5238fc7146497c431fc4182a1de0b96fc22716e0845f561d542e[ALL] 02eacba539d92eb88d4e73bb32749d79f53f6e8d7947ac40a71bd4b26c13b6ec29", - "hex": "463043022033a61c56fa0867ed67b76b023204a9dc0ee6b0d63305dc5f65fe94335445ff2f021f712f55399d5238fc7146497c431fc4182a1de0b96fc22716e0845f561d542e012102eacba539d92eb88d4e73bb32749d79f53f6e8d7947ac40a71bd4b26c13b6ec29" - }, - "value": 874.99879200, - "valueSat": 87499879200, - "address": "yNpezfFDfoikDuT1f4iK75AiLp2YLPsGAb", + "coinbase": "03ae50011a4d696e656420627920416e74506f6f6c2021000b01201da9196f0000000007000000", "sequence": 4294967295 } ], "vout": [ { - "value": 800.00000000, - "valueSat": 80000000000, + "value": 8.10000000, + "valueSat": 810000000, "n": 0, "scriptPubKey": { - "asm": "OP_DUP OP_HASH160 485485425fa99504ec1638ac4213f3cfc9f32ef3 OP_EQUALVERIFY OP_CHECKSIG", - "hex": "76a914485485425fa99504ec1638ac4213f3cfc9f32ef388ac", + "asm": "OP_DUP OP_HASH160 cbd7bfcc50351180132b2c0698cb90ad74c473c7 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a914cbd7bfcc50351180132b2c0698cb90ad74c473c788ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ - "ySutkc49Khpz1HQN8AfWNitVBLwqtyaxvv" + "yeuGUfPMrbEqAS2Pw1wonYgEPbM4LAA9LK" ] - } + }, + "spentTxId": "1790b286922d1a439bdc056939bc902a222f9d66ee63d8427805617eedf835bd", + "spentIndex": 83, + "spentHeight": 94680 }, { - "value": 74.99000000, - "valueSat": 7499000000, + "value": 8.10000000, + "valueSat": 810000000, "n": 1, "scriptPubKey": { - "asm": "OP_DUP OP_HASH160 811eacc14db8ebb5b64486dc43400c0226b428a4 OP_EQUALVERIFY OP_CHECKSIG", - "hex": "76a914811eacc14db8ebb5b64486dc43400c0226b428a488ac", + "asm": "OP_DUP OP_HASH160 88a060bc2dfe05780ae4dcb6c98b12436c35a939 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a91488a060bc2dfe05780ae4dcb6c98b12436c35a93988ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ - "yY6AmGopsZS31wy1JLHR9P6AC6owFaXwuh" + "yYmrsYP3XYMZr1cGtha3QzmuNB1C7CfyhV" ] } } ], - "blockhash": "00000000e679e76eabc913b15c7f202e7ea831b8fb07beb28ca2a047b03ff3cc", - "height": 19560, - "confirmations": 6, - "time": 1509568811, - "blocktime": 1509568811 + "extraPayloadSize": 70, + "extraPayload": "0200ae50010078e5c08b39960887bf95185c381bdb719e60b6925fa12af78a8824fade927387c757acb6bac63da84f9245e20cfd5d830382ac634d434725ca6349ab5db920a3", + "cbTx": { + "version": 2, + "height": 86190, + "merkleRootMNList": "877392defa24888af72aa15f92b6609e71db1b385c1895bf870896398bc0e578", + "merkleRootQuorums": "a320b95dab4963ca2547434d63ac8203835dfd0ce245924fa83dc6bab6ac57c7" + }, + "hex": "03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff2703ae50011a4d696e656420627920416e74506f6f6c2021000b01201da9196f0000000007000000ffffffff02809e4730000000001976a914cbd7bfcc50351180132b2c0698cb90ad74c473c788ac809e4730000000001976a91488a060bc2dfe05780ae4dcb6c98b12436c35a93988ac00000000460200ae50010078e5c08b39960887bf95185c381bdb719e60b6925fa12af78a8824fade927387c757acb6bac63da84f9245e20cfd5d830382ac634d434725ca6349ab5db920a3", + "blockhash": "00000000007b0fb99e36713cf08012482478ee496e6dcb4007ad2e806306e62b", + "height": 86190, + "confirmations": 83233, + "time": 1556114577, + "blocktime": 1556114577, + "instantlock": true, + "instantlock_internal": false, + "chainlock": true } {% endhighlight %} *See also* +* [GetSpecialTxes][rpc getspecialtxes]: {{summary_getSpecialTxes}} * [GetTransaction][rpc gettransaction]: {{summary_getTransaction}} {% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getreceivedbyaccount.md b/_includes/devdoc/dash-core/rpcs/rpcs/getreceivedbyaccount.md index 7ed4e40d..64a9ac36 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getreceivedbyaccount.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getreceivedbyaccount.md @@ -34,13 +34,13 @@ Core. Use the RPCs listed in the See Also subsection below instead. {{INCLUDE_CONFIRMATIONS_PARAMETER}} -*Parameter #3---whether to add 5 confirmations to transactions locked via InstantSend* +*Parameter #3---whether to include transactions locked via InstantSend* {% itemplate ntpd1 %} -- n: "addlockconf" +- n: "addlocked" t: "bool" p: "Optional
(exactly 1)" - d: "Add the number of InstantSend confirmations to InstantSend locked transactions (default=false)" + d: "Add the balance from InstantSend locked transactions (default=false)" {% enditemplate %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getreceivedbyaddress.md b/_includes/devdoc/dash-core/rpcs/rpcs/getreceivedbyaddress.md index b2d87964..79b6b466 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/getreceivedbyaddress.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getreceivedbyaddress.md @@ -15,6 +15,8 @@ http://opensource.org/licenses/MIT. *Requires wallet support.* +{{WARNING_ICON}} Note: This RPC only returns a balance for addresses contained in the local wallet. + The `getreceivedbyaddress` RPC {{summary_getReceivedByAddress}} *Parameter #1---the address* @@ -23,7 +25,7 @@ The `getreceivedbyaddress` RPC {{summary_getReceivedByAddress}} - n: "Address" t: "string" p: "Required
(exactly 1)" - d: "The address whose transactions should be tallied" + d: "__Only works for addresses contained in the local wallet__

The address whose transactions should be tallied" {% enditemplate %} @@ -31,13 +33,13 @@ The `getreceivedbyaddress` RPC {{summary_getReceivedByAddress}} {{INCLUDE_CONFIRMATIONS_PARAMETER}} -*Parameter #3---whether to add 5 confirmations to transactions locked via InstantSend* +*Parameter #3---whether to include transactions locked via InstantSend* {% itemplate ntpd1 %} -- n: "addlockconf" +- n: "addlocked" t: "bool" p: "Optional
(exactly 1)" - d: "Add the number of InstantSend confirmations to InstantSend locked transactions" + d: "Add the balance from InstantSend locked transactions" {% enditemplate %} @@ -51,11 +53,10 @@ The `getreceivedbyaddress` RPC {{summary_getReceivedByAddress}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.13.0* Get the dash received for a particular address, only counting -transactions with six or more confirmations (ignore InstantSend confirmations for -locked InstantSend transactions): +transactions with six or more confirmations (ignore InstantSend locked transactions): {% highlight bash %} dash-cli -testnet getreceivedbyaddress yYoCWcjbykWsQJ7MVJrTMeQd8TZe5N4Q7g 6 @@ -68,8 +69,7 @@ Result: {% endhighlight %} Get the dash received for a particular address, only counting -transactions with six or more confirmations (include InstantSend confirmations for -locked InstantSend transactions): +transactions with six or more confirmations (include InstantSend locked transactions): {% highlight bash %} dash-cli -testnet getreceivedbyaddress yYoCWcjbykWsQJ7MVJrTMeQd8TZe5N4Q7g 6 true diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/getspecialtxes.md b/_includes/devdoc/dash-core/rpcs/rpcs/getspecialtxes.md new file mode 100644 index 00000000..9a2e5384 --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/getspecialtxes.md @@ -0,0 +1,200 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/getspecialtxes.md" %} + + +##### GetSpecialTxes +{% include helpers/subhead-links.md %} + +{% assign summary_getSpecialTxes="returns an array of special transactions found in the specified block" %} + +{% autocrossref %} + +*Added in Dash Core 0.13.1* + +The `getspecialtxes` RPC {{summary_getSpecialTxes}} + +*Parameter #1---Block hash* + +{% itemplate ntpd1 %} +- n: "`blockhash`" + t: "string" + p: "Required
(exactly 1)" + d: "The block hash." +{% enditemplate %} + +*Parameter #2---Special transaction type* + +{% itemplate ntpd1 %} +- n: "type" + t: "int" + p: "Optional
(0 or 1)" + d: "Filter special txes by type, -1 means all types (default: -1)" + +{% enditemplate %} + +*Parameter #3---Result limit* + +{% itemplate ntpd1 %} +- n: "count" + t: "int" + p: "Optional
(0 or 1)" + d: "The number of transactions to return (default: 10)" + +{% enditemplate %} + +*Parameter #4---Results to skip* + +{% itemplate ntpd1 %} +- n: "skip" + t: "int" + p: "Optional
(0 or 1)" + d: "The number of transactions to skip (default: 0)" + +{% enditemplate %} + +*Parameter #5---Verbosity* + +{% itemplate ntpd1 %} +- n: "verbosity" + t: "int" + p: "Optional
(0 or 1)" + d: "0 for hashes, 1 for hex-encoded data, and 2 for JSON object + (default: 0)" + +{% enditemplate %} + +*Result (if `verbosity` was `0`)---An array of transaction IDs* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string (hex): array" + p: "Required
(exactly 1)" + d: "Array of special transaction hashes" +{% enditemplate %} + + +*Result (if `verbosity` was `1`)---An array of serialized transactions* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string (hex): array" + p: "Required
(exactly 1)" + d: "Array of serialized, hex-encoded data for the special transaction(s)" +{% enditemplate %} + +*Result (if `verbosity` was `2`)---An array of JSON objects* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string (hex): array of ojbects" + p: "Required
(exactly 1)" + d: "Array of special transaction objects in the format of the `getrawtransaction` RPC" +{% enditemplate %} + +*Example from Dash Core 0.13.1* + +List of Special Transactions hashes. + +{% highlight bash %} +dash-cli -testnet getspecialtxes \ +0000003db0006ecaccdf5ae2cfa9d94406ef40ff65b9ec34668b87fca3da9226 +{% endhighlight %} + +Result: +{% highlight json %} +[ + "1572a15f56307e413afe3cb7ea0017a1a3fd6d89c6c5f258cc17b2888a8e7fff", + "89a6dc42063e4a792ec225db64dd9426742a5d1738e8821625d2ab920a6187b2", + "fa3b3b0d3522becb02ddd15dd075f3d6ecc6a5a50b43c6c9f6d4703a9a8509d5" +] +{% endhighlight %} + +List of Provider Registration Special Transactions (type: 1) in serialized, hex-encoded format. + +{% highlight bash %} +dash-cli -testnet getspecialtxes \ +0000003db0006ecaccdf5ae2cfa9d94406ef40ff65b9ec34668b87fca3da9226 1 10 0 1 +{% endhighlight %} + +Result: +{% highlight json %} +[ + "0300010001ea721d7420a9b58025894d08f9fecc73b7b87ed09277fa99dad5aa028ea357e1000000006b48304502210093c409672eed335f80630d7108c108d0b85ebe4d8be0758f8a3745f617c4b57302203175063605552c89f6de7f3dadc1773d5ef773b7cc0ccf98e6c5555ea75ba307012102b21d19fec95d9863c5b12fafeb60530e1cfc51d83f49ea9bca7192abb8b83e46feffffff01c4bb609a010000001976a9142efe9f9d3b36b133364d3cccbd27db75a0fbdcb788ac00000000fd120101000000000031567fbaf591ae9d2d0e9050bebce6a311cfd900616f851a3a630aa65e53f6940000000000000000000000000000ffffad3d1ee74a43c1ad3af209f75deaeb9216fc8339fd48d376f9b007ffa44583c9908f4aaca8dd97990c56043e475723f90940ef5fd7d493152540f25f58fb8c965ee5e1be4f850a661476c1ad3af209f75deaeb9216fc8339fd48d376f9b0e8031976a91454bbd7bd7c21553612d60ab16579e51efbcb135288acc281e8bf5a0dd22dfc9f1edeef9ef248f965a79210d997da37fb3e1dec76d1a4412096809bc005c860a0215cb008e3044b972688443b0b7a31ac5a04b728e63b1b5c5489e33dd666435f93c646523ad8a1d935a58957026749cbd0a9bf7e09a77388", + "03000100012354b77c0f261f3d5b8424cbe67c2f27130f01c531732a08b8ae3f28aaa1b1fb000000006a473044022058323d3d9114492a7a7d350d5e3127d2dc550563968319987079c98f19ed519202204160cfe81adf1f41301136a3cbe03697baa1b14c3103b66bd839ace503dbf2630121026f83a8dad6b4695b136c399405b31d4031fd6631c469673d71eda479157ef9dcfeffffff0106b8609a010000001976a9142a855dc127bfdd5cc0ab73b71ff126e49aa409c488ac00000000fd1201010000000000b60dcb8bab5aba47435942c36ca4ee74ea5b662f4d7c7b528ce341915b2d5aec0100000000000000000000000000ffffad3d1ee74a428d3433cb6b9a1a29fdf07613172bbfdab744889689e308c9d2d8a3cb35f9d7bb7220b1eca82c952b82111119670dacae18a509628c775287e4e796128cd6379b80dffd7d8d3433cb6b9a1a29fdf07613172bbfdab744889610271976a91454bbd7bd7c21553612d60ab16579e51efbcb135288ac512010a2b992d7d5c1e1f999852855cc55162800025cfdf3b56c74e4734a2d97411f858532607cbd8848452dab1f216650def1d11a5abf3fa464c9ffcc7fec894a012a4b70ee5d3b983b5fe640f04a7f3e4fe67fbb5b7cccb71afa37888ad6cca48e" +] +{% endhighlight %} + +List of Coinbase Special Transactions (type: 5) in JSON format. + +{% highlight bash %} +dash-cli -testnet getspecialtxes \ +00000000007b0fb99e36713cf08012482478ee496e6dcb4007ad2e806306e62b 5 10 0 2 +{% endhighlight %} + +Result: +{% highlight json %} +[ + { + "txid": "25632685ed0d7286901a80961c924c1ddd952e764754dbd8b40d0956413c8b56", + "size": 229, + "version": 3, + "type": 5, + "locktime": 0, + "vin": [ + { + "coinbase": "03ae50011a4d696e656420627920416e74506f6f6c2021000b01201da9196f0000000007000000", + "sequence": 4294967295 + } + ], + "vout": [ + { + "value": 8.10000000, + "valueSat": 810000000, + "n": 0, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 cbd7bfcc50351180132b2c0698cb90ad74c473c7 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a914cbd7bfcc50351180132b2c0698cb90ad74c473c788ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "yeuGUfPMrbEqAS2Pw1wonYgEPbM4LAA9LK" + ] + } + }, + { + "value": 8.10000000, + "valueSat": 810000000, + "n": 1, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 88a060bc2dfe05780ae4dcb6c98b12436c35a939 OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a91488a060bc2dfe05780ae4dcb6c98b12436c35a93988ac", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "yYmrsYP3XYMZr1cGtha3QzmuNB1C7CfyhV" + ] + } + } + ], + "extraPayloadSize": 70, + "extraPayload": "0200ae50010078e5c08b39960887bf95185c381bdb719e60b6925fa12af78a8824fade927387c757acb6bac63da84f9245e20cfd5d830382ac634d434725ca6349ab5db920a3", + "cbTx": { + "version": 2, + "height": 86190, + "merkleRootMNList": "877392defa24888af72aa15f92b6609e71db1b385c1895bf870896398bc0e578", + "merkleRootQuorums": "a320b95dab4963ca2547434d63ac8203835dfd0ce245924fa83dc6bab6ac57c7" + }, + "instantlock": false, + "chainlock": false + } +] +{% endhighlight %} + +*See also:* + +* [GetRawTransaction][rpc getrawtransaction]: {{summary_getRawTransaction}} + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/gettransaction.md b/_includes/devdoc/dash-core/rpcs/rpcs/gettransaction.md index 33f3d723..18f3a80e 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/gettransaction.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/gettransaction.md @@ -52,11 +52,6 @@ The `gettransaction` RPC {{summary_getTransaction}} p: "Optional
(0 or 1)" d: "If an outgoing transaction, this is the fee paid by the transaction reported as negative dash" -- n: "→
`instantlock`" - t: "bool" - p: "Required
(exactly 1)" - d: "Current transaction lock state" - {{INCLUDE_F_LIST_TRANSACTIONS_F_FULL}} - n: "→
`DS`" @@ -94,6 +89,11 @@ The `gettransaction` RPC {{summary_getTransaction}} p: "Required
(exactly 1)" d: "A negative dash amount if sending payment; a positive dash amount if receiving payment (including coinbases)" +- n: "→ →
`label`" + t: "string" + p: "Optional
(0 or 1)" + d: "An optional comment for the address/transaction" + - n: "→ →
`vout`" t: "number (int)" p: "Required
(exactly 1)" @@ -116,52 +116,45 @@ The `gettransaction` RPC {{summary_getTransaction}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.0* {% highlight bash %} dash-cli -testnet gettransaction \ - 345d5f708b047b145f6a40a4e1e36c76648611cd009bd073e607c8ddf47bb797 + c099c882745ad150e9b2a55ef5818683c7ef597e1e5fc20856c67eabc3778ccc {% endhighlight %} Result: - {% highlight json %} { - "amount": 0.00000000, - "fee": -0.00010000, - "confirmations": 20, + "amount": -50.00000000, + "fee": -0.00030000, + "confirmations": 3064, "instantlock": false, + "instantlock_internal": false, + "chainlock": false, + "blockhash": "00000a01007be2912c3123085534b58d341cb5e5980b967e8dcc021089487a1e", + "blockindex": 1, + "blocktime": 1553290594, "trusted": true, - "txid": "345d5f708b047b145f6a40a4e1e36c76648611cd009bd073e607c8ddf47bb797", + "txid": "c099c882745ad150e9b2a55ef5818683c7ef597e1e5fc20856c67eabc3778ccc", "walletconflicts": [ ], - "time": 1511967821, - "timereceived": 1511967821, - "bip125-replaceable": "no", - "DS": "1", + "time": 1553290584, + "timereceived": 1553290584, "details": [ { "account": "", - "address": "ybTSbNqB7nG4ZVbHyati6GbfFz5w7tDnHf", - "category": "privatesend", - "amount": -10.00000000, - "label": "PS", - "vout": 0, - "fee": -0.00010000, + "address": "ycCsAUKsjdmoP4qAXiS1cjYA4ixM48zJWe", + "category": "send", + "amount": -50.00000000, + "label": "Electrum", + "vout": 1, + "fee": -0.00030000, "abandoned": false - }, - { - "account": "PS", - "address": "ybTSbNqB7nG4ZVbHyati6GbfFz5w7tDnHf", - "category": "receive", - "amount": 10.00000000, - "label": "PS", - "vout": 0 } ], - "hex": "010000000156d338508686982770a101c9fd41ce8b2c6ff4eb17dac6b1e7a32dfc5d2ae6e9030000006b4830450221008e8bf68440818d2b2fe8bcc2447d3b455f4e27864dae3f2bc62d2c8d1fdadaad0220390a0810f7f75436a7ebb0bc5c5a5e377b2330e1395f42b5f96d249ac9705ffc012103f4398f7e93dcc64a24191dbae57ef1ccbfcbd867f39a714020e66cf5b10050c4feffffff0100ca9a3b000000001976a914a60d00463c9eed290555e8f719333fc6b21c636088ac89850000" + "hex": "0200000003aac865dba0e98fe32533df6bc3eaac160d04bb02966584fb61fc8d7788e09537010000006a47304402202d537257f23ab42b3e14f2ab533f39bb4586aa1b29a1f833f718a59493c8a601022019c6c156c20e66ef256519592b3c977b64d417c94aea4dca20cf18522a138993012103c67d86944315838aea7ec80d390b5d09b91b62483370d4979da5ccf7a7df77a9feffffff47833a270d2e2bac47bc5dc0df576c3a68b01bedbc89692060ac4113a6f9cb67010000006a4730440220442c19a913b10edc533bf63310f5294d6d91eec0eb9c510a3c6b0f33333f27320220501d5093ecdf603b8af9734e21d5de4710c8500309bfa4acdda243a294442b2c012103c67d86944315838aea7ec80d390b5d09b91b62483370d4979da5ccf7a7df77a9feffffffdcfd2d0fb30d79ffeadab8832e65be2310b67043ff3d74deac9a9cb825acda67000000006b483045022100cae8c025d3bec82903f356a5ec38d78a141447b6562e3aceac901f5fcc6f8567022076407835937514d6690c81c0c3b97f92d2b0ae9749249affaf539ead825692f4012102d6be44ab930ff67f084fbaf47a38b539b8d5da65c010952a972c9e524b6009dffeffffff0204fe2b00000000001976a914e3b0093477c2f629430d0a7b5813fe8b0153b0fd88ac00f2052a010000001976a914ae4365dedb1836ba215b9149602e0787a23376d288ac42010100" } - {% endhighlight %} *See also* diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/gettxout.md b/_includes/devdoc/dash-core/rpcs/rpcs/gettxout.md index 57321cbf..22a52205 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/gettxout.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/gettxout.md @@ -102,11 +102,6 @@ The `gettxout` RPC {{summary_getTxOut}} p: "Required
(1 or more)" d: "A P2PKH or P2SH address" -- n: "→
`version`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The transaction version number of the transaction containing the pubkey script" - - n: "→
`coinbase`" t: "bool" p: "Required
(exactly 1)" @@ -114,7 +109,7 @@ The `gettxout` RPC {{summary_getTxOut}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.1* Get the UTXO from the following transaction from the first output index ("0"), searching the memory pool if necessary. @@ -142,7 +137,6 @@ Result: "ycwoiAibTjpwnoCZSX7S4kiB2H8wULw9qo" ] }, - "version": 1, "coinbase": false } {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/gettxoutsetinfo.md b/_includes/devdoc/dash-core/rpcs/rpcs/gettxoutsetinfo.md index ba8db755..55495ba3 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/gettxoutsetinfo.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/gettxoutsetinfo.md @@ -3,6 +3,7 @@ This file is licensed under the MIT License (MIT) available on http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/gettxoutsetinfo.md" %} + ##### GetTxOutSetInfo {% include helpers/subhead-links.md %} @@ -43,16 +44,21 @@ The `gettxoutsetinfo` RPC {{summary_getTxOutSetInfo}} p: "Required
(exactly 1)" d: "The number of unspent transaction outputs" -- n: "→
`bytes_serialized`" +- n: "→
`bogosize`" t: "number (int)" p: "Required
(exactly 1)" - d: "The size of the serialized UTXO set in bytes; not counting overhead, this is the size of the `chainstate` directory in the Bitcoin Core configuration directory" + d: "A meaningless metric for UTXO set size" -- n: "→
`hash_serialized`" +- n: "→
`hash_serialized_2`" t: "string (hex)" p: "Required
(exactly 1)" d: "A SHA256(SHA256()) hash of the serialized UTXO set; useful for comparing two nodes to see if they have the same set (they should, if they always used the same serialization format and currently have the same best block). The hash is encoded as hex in RPC byte order" +- n: "→
`disk_size`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The estimated size of the chainstate on disk" + - n: "→
`total_amount`" t: "number (Dash)" p: "Required
(exactly 1)" @@ -60,7 +66,7 @@ The `gettxoutsetinfo` RPC {{summary_getTxOutSetInfo}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.1* {% highlight bash %} dash-cli -testnet gettxoutsetinfo @@ -70,13 +76,14 @@ Result: {% highlight json %} { - "height": 4755, - "bestblock": "0000000025da0abc9e9937f1c65b3f544a57bb7e8817422f7ff2a89ff32696f4", - "transactions": 4748, - "txouts": 10602, - "bytes_serialized": 463925, - "hash_serialized": "fce0776d7961b409c4d8a46363c8d049879321861f7f40db97b0432e59532320", - "total_amount": 2243585.70000000 + "height": 159358, + "bestblock": "0000000000a705ef74a1fc134ea1eba49af8eead40b3df1fc4fb40f5940a0d60", + "transactions": 187542, + "txouts": 366996, + "bogosize": 28344374, + "hash_serialized_2": "d7326bdc2d9cb7d91580bfd47d6c2972ab1776c2c33c787873a5fd01986c9377", + "disk_size": 21513509, + "total_amount": 7517185.08574437 } {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/gobject.md b/_includes/devdoc/dash-core/rpcs/rpcs/gobject.md index 19850f2e..8428a984 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/gobject.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/gobject.md @@ -4,6 +4,8 @@ http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/gobject.md" %} + + ##### GObject {% include helpers/subhead-links.md %} @@ -47,17 +49,14 @@ The `gobject check` RPC validates governance object data (_proposals only_). {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.0* {% highlight bash %} -dash-cli -testnet gobject check 5b5b2270726f706f73616c222c7b22656e645f65706f\ -6368223a2231353037343534383935222c226e616d65223a227465737470726f706f73616c5f\ -2d5f6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839\ -31353037323635383233222c227061796d656e745f61646472657373223a2279664e68484c4c\ -695936577a5a646a51766137324a64395134313468516578514c68222c227061796d656e745f\ -616d6f756e74223a2232222c2273746172745f65706f6368223a223135303732363538323322\ -2c2274797065223a312c2275726c223a2268747470733a2f2f7777772e6461736863656e7472\ -616c2e6f72672f702f746573745f70726f706f73616c5f31353037323635383233227d5d5d +dash-cli -testnet gobject check 7b22656e645f65706f6368223a3135363034353730\ +35352c226e616d65223a2274657374222c227061796d656e745f61646472657373223a22796\ +4354b4d52457333474c4d65366d544a597233597248316a75774e777246436642222c227061\ +796d656e745f616d6f756e74223a352c2273746172745f65706f6368223a313536303435333\ +439302c2274797065223a312c2275726c223a22687474703a2f2f746573742e636f6d227d {% endhighlight %} Result: @@ -102,20 +101,51 @@ The `gobject prepare` RPC prepares a governance object by signing and creating a - n: "`time`" t: "int64_t" p: "Required
(exactly 1)" - d: "Create time" + d: "Create time (Unix epoch time)" {% enditemplate %} *Parameter #4---data* {% itemplate ntpd1 %} -- n: "`data`" +- n: "`data-hex`" t: "string (hex)" p: "Required
(exactly 1)" - d: "Object data (JSON object with governance details)" + d: "**Updated in Dash Core 0.14.0 to require all new proposals to use JSON serialization.**

Object data (JSON object with governance details). Additional details regarding this are provided in an example below." {% enditemplate %} +*Parameter #5---use-IS* + +{% itemplate ntpd1 %} +- n: "`use-IS`" + t: "boolean" + p: "Optional
(0 or 1)" + d: "*Deprecated and ignored since Dash Core 0.14.1*" + +{% enditemplate %} + +*Parameter #6---outputHash* + +{% itemplate ntpd1 %} +- n: "`outputHash`" + t: "string (hex)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0*

The single output to submit the proposal fee from" + +{% enditemplate %} + +*Parameter #7---outputIndex* + +{% itemplate ntpd1 %} +- n: "`outputIndex`" + t: "numeric" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0*

The output index (required if the `outputHash` parameter is provided)" + +{% enditemplate %} + + *Result---collateral transaction ID* {% itemplate ntpd1 %} @@ -126,21 +156,55 @@ The `gobject prepare` RPC prepares a governance object by signing and creating a {% enditemplate %} -*Example from Dash Core 0.12.2* +**Details of the `data-hex` field:** + +The `data-hex` field is comprised of a JSON object as described in [GObject +Deserialize](#gobject-deserialize) which is serialized to hex. + +An example of a proposal JSON object is shown here: + +{% highlight json %} +{ + "end_epoch": 1560457055, + "name": "test", + "payment_address": "yd5KMREs3GLMe6mTJYr3YrH1juwNwrFCfB", + "payment_amount": 5, + "start_epoch": 1560453490, + "type": 1, + "url": "http://test.com" +} +{% endhighlight %} + +To serialize the object, first remove all spaces from the JSON object as shown below: + +{% highlight json %} +{"end_epoch":1560457055,"name":"test","payment_address":"yd5KMREs3GLMe6mTJYr3YrH1juwNwrFCfB","payment_amount":5,"start_epoch":1560453490,"type":1,"url":"http://test.com"} +{% endhighlight %} + +Then convert the string to its hex equivalent as shown below. This is what will +be used for the `data-hex` field of the `gobject prepare` command: {% highlight bash %} -dash-cli -testnet gobject prepare 0 1 1509548445 5b5b2270726f706f73616c222c7b22656e645f65706f6\ -368223a313530393638303337392c226e616d65223a22746573742d70726f706f73616c2d646\ -173682d646f6373222c227061796d656e745f61646472657373223a2279554b447a353950745\ -0577348596b56346537424337416263454c72346a52787371222c227061796d656e745f616d6\ -f756e74223a32302c2273746172745f65706f6368223a313530393637363831342c227479706\ -5223a312c2275726c223a2268747470733a2f2f646173682d646f63732e746573742f7465737\ -4227d5d5d +7b22656e645f65706f6368223a313536303435373035352c226e616d65223a2274657374222c\ +227061796d656e745f61646472657373223a227964354b4d52457333474c4d65366d544a5972\ +33597248316a75774e777246436642222c227061796d656e745f616d6f756e74223a352c2273\ +746172745f65706f6368223a313536303435333439302c2274797065223a312c2275726c223a\ +22687474703a2f2f746573742e636f6d227d +{% endhighlight %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +gobject prepare 0 1 1560449223 7b22656e645f65706f6368223a3135363034353730353\ +52c226e616d65223a2274657374222c227061796d656e745f61646472657373223a227964354\ +b4d52457333474c4d65366d544a597233597248316a75774e777246436642222c227061796d6\ +56e745f616d6f756e74223a352c2273746172745f65706f6368223a313536303435333439302\ +c2274797065223a312c2275726c223a22687474703a2f2f746573742e636f6d227d {% endhighlight %} Result (Collateral Transaction ID): {% highlight bash %} -061ec99eb641ffdeaa05a1a724a255103bebc445b15c6c8c028b19c08608496b +3fd758e7a5761bb07b2850b8ba432ef42c1ea80f0921d2eab0682697dda78262 {% endhighlight %} {% endautocrossref %} @@ -150,7 +214,11 @@ Result (Collateral Transaction ID): {% autocrossref %} -The `gobject submit` RPC submits a governance object to network (objects must first be prepared via `gobject prepare`). +The `gobject submit` RPC submits a governance object to network (objects must +first be prepared via `gobject prepare`). + +Note: Parameters 1-4 should be the same values as the ones used for `gobject +prepare`. *Parameter #1---parent hash* @@ -185,20 +253,20 @@ The `gobject submit` RPC submits a governance object to network (objects must fi *Parameter #4---data* {% itemplate ntpd1 %} -- n: "`data`" +- n: "`data-hex`" t: "string (hex)" p: "Required
(exactly 1)" - d: "Object data (JSON object with governance details)" + d: "**Updated in Dash Core 0.14.0 to require all new proposals to use JSON serialization.**

Object data (JSON object with governance details). See [GObject Prepare](#gobject-prepare) for additional details about this field." {% enditemplate %} -*Parameter #5---transaction ID* +*Parameter #5---fee transaction ID* {% itemplate ntpd1 %} - n: "`data`" t: "string (hex)" p: "Required
(exactly 1)" - d: "Collateral transaction ID" + d: "Fee transaction ID - required for all objects except triggers" {% enditemplate %} @@ -212,21 +280,21 @@ The `gobject submit` RPC submits a governance object to network (objects must fi {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.0* {% highlight bash %} -dash-cli -testnet gobject submit 0 1 1509548445 5b5b2270726f706f73616c222c7b22656e645f65706f6\ -368223a313530393638303337392c226e616d65223a22746573742d70726f706f73616c2d646\ -173682d646f6373222c227061796d656e745f61646472657373223a2279554b447a353950745\ -0577348596b56346537424337416263454c72346a52787371222c227061796d656e745f616d6\ -f756e74223a32302c2273746172745f65706f6368223a313530393637363831342c227479706\ -5223a312c2275726c223a2268747470733a2f2f646173682d646f63732e746573742f7465737\ -4227d5d5d 061ec99eb641ffdeaa05a1a724a255103bebc445b15c6c8c028b19c08608496b +dash-cli -testnet gobject submit 0 1 1560449223 7b22656e645f65706f6368223a3\ +13536303435373035352c226e616d65223a2274657374222c227061796d656e745f61646472\ +657373223a227964354b4d52457333474c4d65366d544a597233597248316a75774e7772464\ +36642222c227061796d656e745f616d6f756e74223a352c2273746172745f65706f6368223a\ +313536303435333439302c2274797065223a312c2275726c223a22687474703a2f2f7465737\ +42e636f6d227d \ +3fd758e7a5761bb07b2850b8ba432ef42c1ea80f0921d2eab0682697dda78262 {% endhighlight %} Result (Governance Object Hash): {% highlight bash %} -75e991c86ed5a50305e315e00c9a95fc74841bd97d58391071edc9ff206a0d3c +e353b2ab5f7e7cb24b95e00e153ec2a6339249672f18b8e8e144aa711678710d {% endhighlight %} {% endautocrossref %} @@ -241,7 +309,7 @@ The `gobject deserialize` RPC deserializes a governance object from a hex string *Parameter #1---object data (hex)* {% itemplate ntpd1 %} -- n: "`data-hex`" +- n: "`hex_data`" t: "string (hex)" p: "Required
(exactly 1)" d: "The data (hex) of a governance object" @@ -263,11 +331,6 @@ deserialized. Examples are shown below for both proposal and trigger object type p: "Required
(exactly 1)" d: "Array of governance objects" -- n: "→
`proposal`" - t: "string (hex)" - p: "Required
(exactly 1)" - d: "Proposal object" - - n: "→ →
`end_epoch`" t: "string" p: "Required
(exactly 1)" @@ -305,35 +368,27 @@ deserialized. Examples are shown below for both proposal and trigger object type {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.0* {% highlight bash %} -dash-cli -testnet gobject deserialize 5b5b2270726f706f73616c222c7b22656e645f6\ -5706f6368223a2231353037343534383935222c226e616d65223a227465737470726f706f7361\ -6c5f2d5f6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373\ -83931353037323635383233222c227061796d656e745f61646472657373223a2279664e68484c\ -4c695936577a5a646a51766137324a64395134313468516578514c68222c227061796d656e745\ -f616d6f756e74223a2232222c2273746172745f65706f6368223a223135303732363538323322\ -2c2274797065223a312c2275726c223a2268747470733a2f2f7777772e6461736863656e74726\ -16c2e6f72672f702f746573745f70726f706f73616c5f31353037323635383233227d5d5d +dash-cli -testnet gobject deserialize 7b22656e645f65706f6368223a313536303435\ +373035352c226e616d65223a2274657374222c227061796d656e745f61646472657373223a22\ +7964354b4d52457333474c4d65366d544a597233597248316a75774e777246436642222c2270\ +61796d656e745f616d6f756e74223a352c2273746172745f65706f6368223a31353630343533\ +3439302c2274797065223a312c2275726c223a22687474703a2f2f746573742e636f6d227d {% endhighlight %} Result: {% highlight json %} -[ - [ - "proposal", - { - "end_epoch":"1507454895", - "name":"testproposal_-_abcdefghijklmnopqrstuvwxyz01234567891507265823", - "payment_address":"yfNhHLLiY6WzZdjQva72Jd9Q414hQexQLh", - "payment_amount":"2", - "start_epoch":"1507265823", - "type":1, - "url":"https://www.dashcentral.org/p/test_proposal_1507265823" - } - ] -] +{ + "end_epoch": 1560457055, + "name": "test", + "payment_address": "yd5KMREs3GLMe6mTJYr3YrH1juwNwrFCfB", + "payment_amount": 5, + "start_epoch": 1560453490, + "type": 1, + "url": "http://test.com" +} {% endhighlight %} @@ -348,11 +403,6 @@ Result: p: "Required
(exactly 1)" d: "Array of governance objects" -- n: "→
`trigger`" - t: "string (hex)" - p: "Required
(exactly 1)" - d: "Trigger object" - - n: "→ →
`event_block_height`" t: "int" p: "Required
(exactly 1)" @@ -380,38 +430,27 @@ Result: {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.0* {% highlight bash %} -dash-cli -testnet gobject deserialize 5b5b2274726967676572222c207b226576656e7\ -45f626c6f636b5f686569676874223a2031383435362c20227061796d656e745f616464726573\ -736573223a20227952465968665a4a4258567a3861696850365a7166714174374245316256644\ -676567c79544c795070554668696768355270787a72695a6362474c5972527836687959455022\ -2c20227061796d656e745f616d6f756e7473223a2022322e31323334353637387c322e3030303\ -030303030222c202270726f706f73616c5f686173686573223a20223632623161336564633938\ -37626432313134636439323263336339376166643039383339353534313862313730316330666\ -131353262616662386131313735667c3138376337353166653631336434386139623331316161\ -34383833383635666166396234336333623931333433333438326636636632343763313835656\ -13037222c202274797065223a20327d5d5d +dash-cli -testnet gobject deserialize 7b226576656e745f626c6f636b5f68656967687\ +4223a203131393539322c20227061796d656e745f616464726573736573223a20227954686d6e\ +75565a316765516e79776f456147627079333362695435473573587a62222c20227061796d656\ +e745f616d6f756e7473223a2022312e3335393631393331222c202270726f706f73616c5f6861\ +73686573223a20223836333966636464653131626432373032373663396330333564366435346\ +3653962393138323465366466373532636164376464646331616532663734386435222c202274\ +797065223a20327d {% endhighlight %} Result (wrapped): {% highlight json %} -[ - [ - "trigger", - { - "event_block_height":18456, - "payment_addresses":"yRFYhfZJBXVz8aihP6ZqfqAt7BE1bVdFvV\ - |yTLyPpUFhigh5RpxzriZcbGLYrRx6hyYEP", - "payment_amounts":"2.12345678|2.00000000", - "proposal_hashes":"62b1a3edc987bd2114cd922c3c97afd0983955418b1701c0fa\ - 152bafb8a1175f|187c751fe613d48a9b311aa4883865faf9b43c3b913433482f6c\ - f247c185ea07", - "type":2 - } - ] -] +{ + "event_block_height": 119592, + "payment_addresses": "yThmnuVZ1geQnywoEaGbpy33biT5G5sXzb", + "payment_amounts": "1.35961931", + "proposal_hashes": "8639fcdde11bd270276c9c035d6d54ce9b91824e6df752cad7dddc1ae2f748d5", + "type": 2 +} {% endhighlight %} {% endautocrossref %} @@ -476,7 +515,7 @@ The `gobject count` RPC returns the count of governance objects and votes. {% enditemplate %} -*Example from Dash Core 0.12.3 (mode: `json`/default)* +*Example from Dash Core 0.14.0 (mode: `json`/default)* {% highlight bash %} dash-cli -testnet gobject count @@ -485,12 +524,12 @@ dash-cli -testnet gobject count Result (wrapped): {% highlight json %} { - "objects_total": 177, - "proposals": 177, + "objects_total": 3, + "proposals": 3, "triggers": 0, "other": 0, - "erased": 5, - "votes": 9680 + "erased": 4, + "votes": 18 } {% endhighlight %} @@ -507,7 +546,7 @@ Result (wrapped): {% enditemplate %} -*Example from Dash Core 0.12.3 (mode: `all`)* +*Example from Dash Core 0.14.0 (mode: `all`)* {% highlight bash %} dash-cli -testnet gobject count all @@ -515,8 +554,8 @@ dash-cli -testnet gobject count all Result (wrapped): {% highlight text %} -Governance Objects: 177 (Proposals: 177, Triggers: 0, Watchdogs: 0/0, \ - Other: 0; Erased: 5), Votes: 9680 +Governance Objects: 177 (Proposals: 177, Triggers: 0, Other: 0; Erased: 5), \ +Votes: 9680 {% endhighlight %} {% endautocrossref %} @@ -569,7 +608,7 @@ The `gobject get` RPC returns a governance object by hash. - n: "→
`ObjectType`" t: "number" p: "Required
(exactly 1)" - d: "Object types:
`1` - Unknown
`2` - Proposal
`3` - Trigger
`4` - Watchdog" + d: "Object types:
`1` - Unknown
`2` - Proposal
`3` - Trigger" - n: "→
`CreationTime`" t: "number" @@ -766,52 +805,7 @@ Result (wrapped): -The `gobject getvotes` RPC gets all votes for a governance object hash (including old votes). - -*Parameter #1---object hash* - -{% itemplate ntpd1 %} -- n: "`governance-hash`" - t: "string (hex)" - p: "Required
(exactly 1)" - d: "The hash of a governance object" - -{% enditemplate %} - -*Result---votes for specified governance* - -{% itemplate ntpd1 %} -- n: "Result" - t: "object" - p: "Required
(exactly 1)" - d: "The governance object votes" - -- n: "→
Vote Info" - t: "string" - p: "Required
(1 or more)" - d: "Key: vote-hash

Value: Masternode's unspent outpoint, time, outcome, and signal of the vote" - -{% enditemplate %} - -*Example from Dash Core 0.12.2* - -{% highlight bash %} -dash-cli -testnet gobject getvotes 78941af577f639ac94440e4855a1ed8f\ - 696f1506d1c0bed4f4b68f05be26d3ca -{% endhighlight %} - -Result (truncated): -{% highlight json %} -{ - "174aaba65982d25a23f437e2a66ec3836146ba7b7ce5b3fe2d5476907f7079d9": "2eab488e3a7b030303de0d18e357ce17a9fc6b8876705d61076bbe923b2e5fc8-1:1509354047:YES:DELETE", - "216cbc42addec1a6b83e1f2b0b3779594bd879f5671dd76a9826cc690c68286d": "b0320c1eff10ccb5e26086017a09e77dacb30fdcafccb3d98db3e5b610b9f1bd-1:1509117256:YES:DELETE", - "aa4dc9d3b9e74e8c1ffc725b737d07f8a32e43c64907e4bea19e64a86135f08a": "af9f5646ace92f76b3a01b0abe08716a0a7ded64074c2d2e712c93174b9013d1-1:1508866932:YES:FUNDING", - "73dd135ea7bece0f2047de75d8ca04f2985daebed9568d28ee58a60a12a2a082": "8e3fee7f668fed7019588be616225c6c4762ee632470878b2dc8eae3f0b3f67d-1:1508866932:YES:FUNDING", - "d13b9c5c28bbc8684a7291961a1023abbbe65b534804d0629fb44166cc1a6148": "08b2dbffd61d927bc12c20f6853513f41fbf7737446632b13c7ca0df8c6da282-1:1508866932:YES:FUNDING", - "8a4283d457d8635b43c6fa6cbf865813a80d965c777e8ba07364eb6468200ae1": "76c40abd280441b75577e99e9e4f253f9281a7deb4feebff83860f9cede7a09b-1:1508866932:YES:FUNDING", - "313e19607813cb0db3b3fb477982b4d3418f13f8511295419df8fe1f7ff6668f": "0fd502f28b9a9a256d9ba29a047c375fe2823b6e76e4853af16e079a709ab72a-1:1508866932:YES:FUNDING" -} -{% endhighlight %} +{{WARNING}} **_Removed in Dash Core 0.14.0._** {% endautocrossref %} @@ -890,7 +884,7 @@ The `gobject list` RPC Lists governance objects (can be filtered by signal and/o - n: "`type`" t: "string (hex)" p: "Optional
(exactly 1)" - d: "Type of governance object signal:
• `proposals`
• `triggers`
• `watchdogs`
• `all` (_DEFAULT_)" + d: "Type of governance object signal:
• `proposals`
• `triggers`
• `all` (_DEFAULT_)" {% enditemplate %} @@ -973,7 +967,7 @@ The `gobject diff` RPC Lists governance objects differences since last diff. - n: "`type`" t: "string (hex)" p: "Optional
(exactly 1)" - d: "Type of governance object signal:
• `proposals`
• `triggers`
• `watchdogs`
• `all` (_DEFAULT_)" + d: "Type of governance object signal:
• `proposals`
• `triggers`
• `all` (_DEFAULT_)" {% enditemplate %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/instantsendtoaddress.md b/_includes/devdoc/dash-core/rpcs/rpcs/instantsendtoaddress.md deleted file mode 100644 index 2d371622..00000000 --- a/_includes/devdoc/dash-core/rpcs/rpcs/instantsendtoaddress.md +++ /dev/null @@ -1,101 +0,0 @@ -{% comment %} -This file is licensed under the MIT License (MIT) available on -http://opensource.org/licenses/MIT. -{% endcomment %} -{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/instantsendtoaddress.md" %} - -##### InstantSendToAddress -{% include helpers/subhead-links.md %} - -{% assign summary_instantSendToAddress="InstantSend an amount to a given address." %} - - - -{% autocrossref %} - -The `instantsendtoaddress` RPC {{summary_instantSendToAddress}} - -*Parameter #1---to address* - -{% itemplate ntpd1 %} -- n: "To Address" - t: "string" - p: "Required
(exactly 1)" - d: "A P2PKH or P2SH address to which the dash should be sent" - -{% enditemplate %} - -*Parameter #2---amount to spend* - -{% itemplate ntpd1 %} -- n: "Amount" - t: "number (dash)" - p: "Required
(exactly 1)" - d: "The amount to spent in dash" - -{% enditemplate %} - -*Parameter #3---a comment* - -{% itemplate ntpd1 %} -- n: "Comment" - t: "string" - p: "Optional
(0 or 1)" - d: "A locally-stored (not broadcast) comment assigned to this transaction. Default is no comment" - -{% enditemplate %} - -*Parameter #4---a comment about who the payment was sent to* - -{% itemplate ntpd1 %} -- n: "Comment To" - t: "string" - p: "Optional
(0 or 1)" - d: "A locally-stored (not broadcast) comment assigned to this transaction. Meant to be used for describing who the payment was sent to. Default is no comment" - -{% enditemplate %} - -*Parameter #5---automatic fee subtraction* - -{% itemplate ntpd1 %} -- n: "Subtract Fee From Amount" - t: "boolean" - p: "Optional
(0 or 1)" - d: "The fee will be deducted from the amount being sent. The recipient will receive less dash than you enter in the amount field. Default is `false`" - -{% enditemplate %} - -*Result---a TXID of the sent transaction* - -{% itemplate ntpd1 %} -- n: "`result`" - t: "string" - p: "Required
(exactly 1)" - d: "The TXID of the sent transaction, encoded as hex in RPC byte order" - -{% enditemplate %} - -*Example from Dash Core 0.12.2* - -InstantSend 0.1 dash to the address below with the comment "instantsendtoaddress -example" and the comment-to "Nemo From Example.com": - -{% highlight bash %} -dash-cli -testnet instantsendtoaddress ySutkc49Khpz1HQN8AfWNitVBLwqtyaxvv \ - 1.0 "instantsendtoaddress example" "Nemo From Example.com" -{% endhighlight %} - -Result: - -{% highlight text %} -70e2029d363f0110fe8a0aa2ba7bd771a579453135568b2aa559b2cb30f875aa -{% endhighlight %} - -*See also:* - -* [SendFrom][rpc sendfrom]: {{summary_sendFrom}} -* [SendMany][rpc sendmany]: {{summary_sendMany}} -* [SendToAddress][rpc sendtoaddress]: {{summary_sendToAddress}} -* [Move][rpc move]: {{summary_move}} - -{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/listaccounts.md b/_includes/devdoc/dash-core/rpcs/rpcs/listaccounts.md index 042e238c..4cc6ffce 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/listaccounts.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/listaccounts.md @@ -24,13 +24,13 @@ Core. Use the RPCs listed in the See Also subsection below instead. {{INCLUDE_CONFIRMATIONS_PARAMETER}} -*Parameter #2---whether to add 5 confirmations to transactions locked via InstantSend* +*Parameter #2--- whether to include transactions locked via InstantSend* {% itemplate ntpd1 %} -- n: "addlockconf" +- n: "addlocked" t: "bool" p: "Optional
(exactly 1)" - d: "Add the number of InstantSend confirmations to InstantSend locked transactions" + d: "Add the balance from InstantSend locked transactions" {% enditemplate %} @@ -53,10 +53,10 @@ Core. Use the RPCs listed in the See Also subsection below instead. {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.13.0* Display account balances with one confirmation and watch-only addresses -included. Add the InstantSend confirmations (5) for locked transactions. +included. Add the balance of InstantSend locked transactions also. {% highlight bash %} dash-cli -testnet listaccounts 1 true true diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/listreceivedbyaccount.md b/_includes/devdoc/dash-core/rpcs/rpcs/listreceivedbyaccount.md index 9ce6d3e3..3b0edb90 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/listreceivedbyaccount.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/listreceivedbyaccount.md @@ -24,13 +24,13 @@ Core. Use the RPCs listed in the See Also subsection below instead. {{INCLUDE_CONFIRMATIONS_PARAMETER}} -*Parameter #2---whether to add 5 confirmations to transactions locked via InstantSend* +*Parameter #2---whether to include transactions locked via InstantSend* {% itemplate ntpd1 %} -- n: "addlockconf" +- n: "addlocked" t: "bool" p: "Optional
(exactly 1)" - d: "Add the number of InstantSend confirmations to InstantSend locked transactions" + d: "Add the balance from InstantSend locked transactions" {% enditemplate %} @@ -88,11 +88,10 @@ Core. Use the RPCs listed in the See Also subsection below instead. {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.13.0* -Get the balances for all non-empty accounts, including only transactions -which have been confirmed at least six times (include InstantSend confirmations -for locked InstantSend transactions): +Get the balances for all non-empty accounts, including transactions +which have been confirmed at least six times and InstantSend locked transactions: {% highlight bash %} dash-cli -testnet listreceivedbyaccount 6 true false true diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/listreceivedbyaddress.md b/_includes/devdoc/dash-core/rpcs/rpcs/listreceivedbyaddress.md index dea5c33f..fc67242e 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/listreceivedbyaddress.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/listreceivedbyaddress.md @@ -21,13 +21,13 @@ The `listreceivedbyaddress` RPC {{summary_listReceivedByAddress}} {{INCLUDE_CONFIRMATIONS_PARAMETER}} -*Parameter #2---whether to add 5 confirmations to transactions locked via InstantSend* +*Parameter #2---whether to include transactions locked via InstantSend* {% itemplate ntpd1 %} -- n: "addlockconf" +- n: "addlocked" t: "bool" p: "Optional
(exactly 1)" - d: "Add the number of InstantSend confirmations to InstantSend locked transactions" + d: "Add the balance from InstantSend locked transactions" {% enditemplate %} @@ -100,11 +100,10 @@ The `listreceivedbyaddress` RPC {{summary_listReceivedByAddress}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.13.0* List addresses with balances confirmed by at least six blocks, including -watch-only addresses (include InstantSend confirmations for locked InstantSend -transactions): +watch-only addresses. Also include the balance from InstantSend locked transactions: {% highlight bash %} dash-cli -testnet listreceivedbyaddress 6 true false true diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/listsinceblock.md b/_includes/devdoc/dash-core/rpcs/rpcs/listsinceblock.md index 4fb5018e..242cd841 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/listsinceblock.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/listsinceblock.md @@ -41,6 +41,16 @@ The `listsinceblock` RPC {{summary_listSinceBlock}} {{INCLUDE_INCLUDE_WATCH_ONLY_PARAMETER}} +*Parameter #4---include_removed* + +{% itemplate ntpd1 %} +- n: "include_removed" + t: "bool" + p: "Optional
Default=`true`" + d: "Show transactions that were removed due to a reorg in the \"removed\" array (not guaranteed to work on pruned nodes)" + +{% enditemplate %} + **Result** {% assign DEPTH="→ → → " %} @@ -64,6 +74,11 @@ The `listsinceblock` RPC {{summary_listSinceBlock}} {{INCLUDE_F_LIST_TRANSACTIONS}} {{INCLUDE_F_LIST_TRANSACTIONS_F_FULL}} +- n: "→
`removed`" + t: "array" + p: "Optional
(0 or 1)" + d: "Structure is the same as `transactions`. Only present if `include_removed` is `true`.
_Note_: transactions that were re-added in the active chain will appear as-is in this array, and may thus have a positive confirmation count." + - n: "→
`lastblock`" t: "string (hex)" p: "Required
(exactly 1)" @@ -71,15 +86,15 @@ The `listsinceblock` RPC {{summary_listSinceBlock}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.1* Get all transactions since a particular block (including watch-only transactions) and the header hash of the sixth most recent block. {% highlight bash %} dash-cli -testnet listsinceblock \ - 00000000688633a503f69818a70eac281302e9189b1bb57a76a05c329fcda718 \ - 6 true + 0000000001fc119ea77e0c67783227fb9d55386125179ea5597109d311af2337 \ + 6 true true {% endhighlight %} Result (edited to show only two payments): @@ -89,48 +104,51 @@ Result (edited to show only two payments): "transactions": [ { "account": "", - "address": "yfCjqf9F7oNGD1sRqta2rNpCXSQ9dknDf5", + "address": "yMaodAgCofB2gmHEtATAiV3w5NkzTpmkgS", "category": "send", - "amount": -0.01000010, - "vout": 7, - "fee": 0.05000050, - "confirmations": 95, - "instantlock": false, - "blockhash": "0000000002aa705754c6ab4e15cf2183a1d174e61c080f64eb469c458669144b", + "amount": -2365.65209808, + "label": "Mining Consolidation", + "vout": 0, + "fee": -0.00031420, + "confirmations": 5, + "instantlock": true, + "instantlock_internal": false, + "chainlock": true, + "blockhash": "00000000001c4e142c6deaa273206706d37a7aa792887d9bd81ae787d4259137", "blockindex": 1, - "blocktime": 1511972930, - "txid": "52e34eec71a4cf95c043b76567f55cec1bc293c444810d454a2d05f2a819b5ed", + "blocktime": 1566399553, + "txid": "bb8a2789c3166181cc190e0fd7675770217b69c9aeafe0d8207baf1ebeb05845", "walletconflicts": [ ], - "time": 1511972930, - "timereceived": 1511974218, - "bip125-replaceable": "no", + "time": 1566399271, + "timereceived": 1566399271, "abandoned": false }, { - "account": "", - "address": "yi2U4Cx2QH33LdNwk2c2oLABWzEZWhYU9k", - "category": "send", - "amount": -0.01000010, - "vout": 8, - "fee": 0.05000050, - "confirmations": 95, - "instantlock": false, - "blockhash": "0000000002aa705754c6ab4e15cf2183a1d174e61c080f64eb469c458669144b", + "account": "Mining Consolidation", + "address": "yMaodAgCofB2gmHEtATAiV3w5NkzTpmkgS", + "category": "receive", + "amount": 2365.65209808, + "label": "Mining Consolidation", + "vout": 0, + "confirmations": 5, + "instantlock": true, + "instantlock_internal": false, + "chainlock": true, + "blockhash": "00000000001c4e142c6deaa273206706d37a7aa792887d9bd81ae787d4259137", "blockindex": 1, - "blocktime": 1511972930, - "txid": "52e34eec71a4cf95c043b76567f55cec1bc293c444810d454a2d05f2a819b5ed", + "blocktime": 1566399553, + "txid": "bb8a2789c3166181cc190e0fd7675770217b69c9aeafe0d8207baf1ebeb05845", "walletconflicts": [ ], - "time": 1511972930, - "timereceived": 1511974218, - "bip125-replaceable": "no", - "abandoned": false + "time": 1566399271, + "timereceived": 1566399271 } ], - "lastblock": "000000000dba5583e3fc5c2df06b478e922702f53a1476aac8eb4322f648ccea" + "removed": [ + ], + "lastblock": "000000000158ad1e4eab53044e18aaf76e605a27252862d4f1d78cfd373f1686" } - {% endhighlight %} *See also* diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/listtransactions.md b/_includes/devdoc/dash-core/rpcs/rpcs/listtransactions.md index a2a8aacc..6be199ec 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/listtransactions.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/listtransactions.md @@ -107,18 +107,28 @@ The `listtransactions` RPC {{summary_listTransactions}} - n: "→
`instantlock`" t: "bool" p: "Required
(exactly 1)" - d: "Current transaction lock state" + d: "Current transaction lock state (InstantSend and/or ChainLock)" -- n: "→ →
`trusted`" +- n: "→
`instantlock_internal`" t: "bool" - p: "Optional
(0 or 1)" - d: "Indicates whether we consider the outputs of this unconfirmed transaction safe to spend. Only returned for unconfirmed transactions" + p: "Required
(exactly 1)" + d: "Current InstantSend transaction lock state" + +- n: "
`chainlock`" + t: "bool" + p: "Required
(exactly 1)" + d: "*Added in Dash Core 0.14.0*

If set to `true`, this transaction is in a block that is locked (not susceptible to a chain re-org)" - n: "→ →
`generated`" t: "bool" p: "Optional
(0 or 1)" d: "Set to `true` if the transaction is a coinbase. Not returned for regular transactions or *move* category payments" +- n: "→ →
`trusted`" + t: "bool" + p: "Optional
(0 or 1)" + d: "Indicates whether we consider the outputs of this unconfirmed transaction safe to spend. Only returned for unconfirmed transactions" + - n: "→ →
`blockhash`" t: "string (hex)" p: "Optional
(0 or 1)" @@ -174,11 +184,6 @@ The `listtransactions` RPC {{summary_listTransactions}} p: "Optional
(0 or 1)" d: "This is the account the dash were moved from or moved to, as indicated by a negative or positive *amount* field in this payment. Only returned by *move* category payments" -- n: "→ →
`bip125-replaceable`" - t: "string" - p: "Required
(exactly 1)" - d: "*Added in Bitcoin Core 0.12.0*

Indicates if a transaction is replaceable under BIP125:
• `yes` replaceable
• `no` not replaceable
• `unknown` for unconfirmed transactions not in the mempool" - - n: "→ →
`abandoned`" t: "bool" p: "Optional
(0 or 1)" @@ -186,7 +191,7 @@ The `listtransactions` RPC {{summary_listTransactions}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.0* List the most recent transaction from the main account including watch-only addresses. @@ -199,24 +204,26 @@ Result: {% highlight json %} [ { - "account": "MN Setup", - "address": "yY6AmGopsZS31wy1JLHR9P6AC6owFaXwuh", - "category": "immature", - "amount": 11.25000000, - "label": "MN Setup", - "vout": 3, - "confirmations": 20, - "instantlock": false, - "generated": true, - "blockhash": "000000000207e556193e19287d2e554a5f99e1ff7cb19367e8de8ad6bacc494e", - "blockindex": 0, - "blocktime": 1511986957, - "txid": "cd9d44cd87ffb784f9dac384bad7db55324d3f47724eb60e16b3de6a26175936", + "account": "", + "address": "ySGKtDZ3qBHRqk7mHsdofShQkqMcAS7SYJ", + "category": "send", + "amount": -0.50000000, + "label": "", + "vout": 1, + "fee": -0.00040000, + "confirmations": 3, + "instantlock": true, + "instantlock_internal": true, + "chainlock": false, + "blockhash": "000000000327ff7785d799dde99949457ac231ef1d956a2287c2f7bb84d9738c", + "blockindex": 2, + "blocktime": 1553798971, + "txid": "048aae3ad194f5398b67fc7029b26bf50d66ecc7d185fd6d26f8c6ec5a4ed1f9", "walletconflicts": [ ], - "time": 1511986957, - "timereceived": 1511986982, - "bip125-replaceable": "no" + "time": 1553798920, + "timereceived": 1553798920, + "abandoned": false } ] {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/listunspent.md b/_includes/devdoc/dash-core/rpcs/rpcs/listunspent.md index 11a5ce3d..44ea258a 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/listunspent.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/listunspent.md @@ -60,10 +60,19 @@ the *spendable* field in the results described below. - n: "Include Unsafe" t: "bool" p: "Optional
(false or true)" - d: "Include outputs that are not safe to spend because they come from unconfirmed untrusted transactions or unconfirmed replacement transactions (cases where we are less sure that a conflicting transaction won't be mined). Default is `true`" + d: "Include outputs that are not safe to spend . See description of `safe` attribute below. Default is `true`" {% enditemplate %} +*Parameter #5---query options* + +{% itemplate ntpd1 %} +- n: "Query Options" + t: "json" + p: "Optional" + d: "JSON with query options. Available options:
- `minimumAmount`: Minimum value of each UTXO in DASH
- `maximumAmount`: Maximum value of each UTXO in DASH
- `maximumCount`: Maximum number of UTXOs
- `minimumSumAmount`: Minimum sum value of all UTXOs in DASH" + +{% enditemplate %} *Result---the list of unspent outputs* @@ -133,9 +142,14 @@ the *spendable* field in the results described below. p: "Required
(exactly 1)" d: "The number of PrivateSend rounds" +- n: "→ →
`safe`" + t: "bool" + p: "Required
(exactly 1)" + d: "*Added in Bitcoin Core 0.15.0*

Whether this output is considered safe to spend. Unconfirmed transactions from outside keys are considered unsafe and are not eligible for spending by `fundrawtransaction` and `sendtoaddress`." + {% enditemplate %} -*Example from Dash Core 0.12.3* +*Example from Dash Core 0.14.1* Get all outputs confirmed at least 6 times for a particular address: @@ -143,7 +157,7 @@ address: {% highlight bash %} dash-cli -testnet listunspent 6 99999999 ''' [ - "yXGNabkdQ3JZ7LZ9RCnFe5dqhtBA3hVmU8" + "yLki4jbxX28JB3TThm1DTgRfbKVhhiMx3d" ] ''' {% endhighlight %} @@ -153,15 +167,52 @@ Result: {% highlight json %} [ { - "txid": "0e86f58c56648175362443c1ef28e473acb4c4adc1b3f7983deaddfa3a61a4d7", - "vout": 4, - "address": "yXGNabkdQ3JZ7LZ9RCnFe5dqhtBA3hVmU8", - "scriptPubKey": "76a91478149277b5d820b04e60cbf96ff81fd1ccc6533388ac", - "amount": 0.01000010, - "confirmations": 609, + "txid": "534fe12e360773dddf8aa125a4027d2d8c0073e13ff2f04fd733202b85dbdcf1", + "vout": 0, + "address": "yLki4jbxX28JB3TThm1DTgRfbKVhhiMx3d", + "scriptPubKey": "76a91404c719ccf48d39d3e6253ac98edaf2b5d24f0c0588ac", + "amount": 1.00001000, + "confirmations": 85, "spendable": true, "solvable": true, - "ps_rounds": 5 + "safe": true, + "ps_rounds": 13 + } +] +{% endhighlight %} + +Get all outputs for a particular address that have at least 1 confirmation and a maximum value of 10: + +{% highlight bash %} +listunspent 1 9999999 "[\"yQqTPAw1Nk8iFDeDXqe5dQ7A9xD6LVUStD\"]" true "{\"maximumAmount\":\"10\"}" + +dash-cli -testnet listunspent 1 9999999 ''' + [ + "yQqTPAw1Nk8iFDeDXqe5dQ7A9xD6LVUStD" + ] + ''' true ''' + { + "maximumAmount": "10" + } + ''' +{% endhighlight %} + +Result: + +{% highlight json %} +[ + { + "txid": "42cd5150fd1179b5a194e034685d524e6d5d38703ac794d236495923a29addc5", + "vout": 1, + "address": "yQqTPAw1Nk8iFDeDXqe5dQ7A9xD6LVUStD", + "account": "", + "scriptPubKey": "76a914318d6d7e26e07a142a425a32ea917a30147d6c9788ac", + "amount": 5.00000000, + "confirmations": 100, + "spendable": true, + "solvable": true, + "safe": true, + "ps_rounds": -2 } ] {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/listwallets.md b/_includes/devdoc/dash-core/rpcs/rpcs/listwallets.md new file mode 100644 index 00000000..0518125a --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/listwallets.md @@ -0,0 +1,51 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/listwallets.md" %} + + +##### ListWallets +{% include helpers/subhead-links.md %} + +{% assign summary_listWallets="returns a list of currently loaded wallets." %} + +{% autocrossref %} + +The `listwallets` RPC {{summary_listWallets}} + +For full information on the wallet, use the `getwalletinfo` RPC. + +*Parameters: none* + +*Result* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "array" + p: "Required
(exactly 1)" + d: "An array of strings containing a list of currently loaded wallet files" + +- n: "→
Wallet" + t: "string" + p: "Required
(0 or more)" + d: "The name of a wallet file" + +{% enditemplate %} + +*Example from Dash Core 0.14.1* + +{% highlight bash %} +dash-cli -testnet listwallets +{% endhighlight %} + +Result: +{% highlight json %} +[ + "wallet.dat" +] +{% endhighlight %} + +*See also: none* + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/logging.md b/_includes/devdoc/dash-core/rpcs/rpcs/logging.md new file mode 100644 index 00000000..7c199a45 --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/logging.md @@ -0,0 +1,149 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/logging.md" %} + + +##### Logging +{% include helpers/subhead-links.md %} + +{% assign summary_logging="gets and sets the logging configuration" %} + +{% autocrossref %} + +The `logging` RPC {{summary_logging}} + +*Parameter #1---include categories* + +{% itemplate ntpd1 %} +- n: "`include`" + t: "array of strings" + p: "Optional
(0 or 1)" + d: "Enable debugging for these categories" + +{% enditemplate %} + +*Parameter #2---exclude categories* + +{% itemplate ntpd1 %} +- n: "`exclude`" + t: "array of strings" + p: "Optional
(0 or 1)" + d: "Enable debugging for these categories" + +{% enditemplate %} + +The categories are: + +| Type | Category | +| - | - | +| Special | • `0` - Disables all categories
• `1` or `all` - Enables all categories
• `dash` - Enables/disables all Dash categories | +| Standard | `addrman`, `bench`
`cmpctblock`, `coindb`, `db`, `estimatefee`, `http`, `leveldb`, `libevent`, `mempool`, `mempoolrej`, `net`, `proxy`, `prune`, `qt`, `rand`, `reindex`, `rpc`, `selectcoins`, `tor`, `zmq`| +| Dash |
`chainlocks`, `gobject`, `instantsend`, `keepass`, `llmq`, `llmq-dkg`, `llmq-sigs`, `mnpayments`, `mnsync`, `privatesend`, `spork` | + +*Result---a list of the logging categories that are active* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object" + p: "Required
(exactly 1)" + d: "A JSON object show a list of the logging categories that are active" + +{% enditemplate %} + +*Example from Dash Core 0.14.1* + +Include a category in logging + +{% highlight bash %} +dash-cli -testnet logging '["llmq", "spork"]' +{% endhighlight %} + +Result: +{% highlight json %} +{ + "net": 0, + "tor": 0, + "mempool": 0, + "http": 0, + "bench": 0, + "zmq": 0, + "db": 0, + "rpc": 0, + "estimatefee": 0, + "addrman": 0, + "selectcoins": 0, + "reindex": 0, + "cmpctblock": 0, + "rand": 0, + "prune": 0, + "proxy": 0, + "mempoolrej": 0, + "libevent": 0, + "coindb": 0, + "qt": 0, + "leveldb": 0, + "chainlocks": 0, + "gobject": 0, + "instantsend": 0, + "keepass": 0, + "llmq": 1, + "llmq-dkg": 0, + "llmq-sigs": 0, + "mnpayments": 0, + "mnsync": 0, + "privatesend": 0, + "spork": 1 +} +{% endhighlight %} + +Excluding a previously included category (without including any new ones): + +{% highlight bash %} +dash-cli -testnet logging '[]' '["spork"]' +{% endhighlight %} + +Result: +{% highlight json %} +{ + "net": 0, + "tor": 0, + "mempool": 0, + "http": 0, + "bench": 0, + "zmq": 0, + "db": 0, + "rpc": 0, + "estimatefee": 0, + "addrman": 0, + "selectcoins": 0, + "reindex": 0, + "cmpctblock": 0, + "rand": 0, + "prune": 0, + "proxy": 0, + "mempoolrej": 0, + "libevent": 0, + "coindb": 0, + "qt": 0, + "leveldb": 0, + "chainlocks": 0, + "gobject": 0, + "instantsend": 0, + "keepass": 0, + "llmq": 1, + "llmq-dkg": 0, + "llmq-sigs": 0, + "mnpayments": 0, + "mnsync": 0, + "privatesend": 0, + "spork": 0 +} +{% endhighlight %} + +*See also* + +* [Debug][rpc debug]: {{summary_debug}} + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/masternode.md b/_includes/devdoc/dash-core/rpcs/rpcs/masternode.md index 071813bf..74a710ee 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/masternode.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/masternode.md @@ -29,7 +29,7 @@ The `masternode count` RPC prints the number of all known masternode {% itemplate ntpd1 %} - n: "Mode" t: "string (hex)" - p: "Optional
(exactly 1)" + p: "Deprecated" d: "Which masternodes to count:
`total` - Pre-0.12.3 default result,
`ps` - PrivateSend capable,
`enabled` - Enabled,
`all` - All,
`qualify` - Eligible for payment" {% enditemplate %} @@ -47,24 +47,14 @@ The `masternode count` RPC prints the number of all known masternode p: "Required
(exactly 1)" d: "Count of all masternodes" -- n: "→
`ps_compatible`" - t: "int" - p: "Required
(exactly 1)" - d: "Count of PrivateSend compatible masternodes" - - n: "→
`enabled`" t: "int" p: "Required
(exactly 1)" d: "Count of enabled masternodes" -- n: "→
`qualify`" - t: "int" - p: "Required
(exactly 1)" - d: "Count of masternodes qualified to receive payment" - {% enditemplate %} -*Example from Dash Core 0.12.3* +*Example from Dash Core 0.14.0* {% highlight bash %} dash-cli -testnet masternode count @@ -73,10 +63,8 @@ dash-cli -testnet masternode count Result: {% highlight bash %} { - "total": 142, - "ps_compatible": 13, - "enabled": 13, - "qualify": 6 + "total": 185, + "enabled": 130 } {% endhighlight %} @@ -93,7 +81,7 @@ Result: {% enditemplate %} -*Example from Dash Core 0.12.3* +*Example from Dash Core 0.14.0* {% highlight bash %} dash-cli -testnet masternode count all @@ -101,7 +89,7 @@ dash-cli -testnet masternode count all Result: {% highlight bash %} -Total: 129 (PS Compatible: 97 / Enabled: 97 / Qualify: 90) +Total: 185 (Enabled: 130) {% endhighlight %} **Get total count of all masternodes (default output of `masternode count` pre-0.12.3)** @@ -156,14 +144,14 @@ The `masternode current` RPC prints info on current masternode winne p: "Required
(exactly 1)" d: "The IP address/port of the masternode" -- n: "→
`protocol`" - t: "number (int)" +- n: "→
`proTxHash`" + t: "string" p: "Required
(exactly 1)" - d: "The protocol version number used by this node. See the [protocol versions section][section protocol versions] for more information" + d: "The masternode's Provider Registration transaction hash" - n: "→
`outpoint`" t: "string" - p: "Required
(1 or more)" + p: "Required
(exactly 1)" d: "The masternode's outpoint" - n: "→
`payee`" @@ -171,19 +159,9 @@ The `masternode current` RPC prints info on current masternode winne p: "Required
(exactly 1)" d: "Payee address" -- n: "→
`lastseen`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The Unix epoch time when the masternode was last seen" - -- n: "→
`activeseconds`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The number of seconds the masternode has been active" - {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.0* {% highlight bash %} dash-cli -testnet masternode current @@ -192,84 +170,16 @@ dash-cli -testnet masternode current Result: {% highlight json %} { - "height": 37375, - "IP:port": "108.61.192.47:19999", - "protocol": 70208, - "outpoint": "3df7fb192e21c34da99bdd10c34e58ecaf3f3c37d6b2289f0ffedba5050188cc-1", - "payee": "ydGgePy4a3zza37Zm4D44B99czyo6TftU1", - "lastseen": 1512482630, - "activeseconds": 3170434 + "height": 76179, + "IP:port": "34.242.53.163:26155", + "proTxHash": "9de76b8291d00026ab0af86306023c7b90f8e9229dc04916fe1335bf5e11f15d", + "outpoint": "9de76b8291d00026ab0af86306023c7b90f8e9229dc04916fe1335bf5e11f15d-1", + "payee": "yZnU7YJJgGQKvKPQFqXJ4k4DGSsRMhgLXx" } {% endhighlight %} {% endautocrossref %} -###### Masternode Debug - - -{% autocrossref %} - -The `masternode debug` RPC prints masternode status. - -{{WARNING}} `masternode debug` was removed in Dash Core 0.12.2.2. - -*Parameters: none* - -*Result---masternode status* - -{% itemplate ntpd1 %} -- n: "Result" - t: "string" - p: "Required
(exactly 1)" - d: "Masternode status" - -{% enditemplate %} - -*Example from Dash Core 0.12.2* - -{% highlight bash %} -dash-cli -testnet masternode debug -{% endhighlight %} - -Result: -{% highlight bash %} -Masternode successfully started -{% endhighlight %} - -{% endautocrossref %} - -###### Masternode Genkey - - -{% autocrossref %} - -The `masternode genkey` RPC generates a new masternodeprivkey. - -*Parameters: none* - -*Result---masternode private key* - -{% itemplate ntpd1 %} -- n: "Result" - t: "string" - p: "Required
(exactly 1)" - d: "Masternode private key" - -{% enditemplate %} - -*Example from Dash Core 0.12.2* - -{% highlight bash %} -dash-cli -testnet masternode genkey -{% endhighlight %} - -Result: -{% highlight bash %} -92Mn5DQpnBHjFPbS3ZXcX3EdhuET18u3eXTTtVsdDzdcAMaXqtG -{% endhighlight %} - -{% endautocrossref %} - ###### Masternode Outputs @@ -309,189 +219,6 @@ Result: {% endautocrossref %} -###### Masternode Start - - -{% autocrossref %} - -The `masternode start` RPC starts a local hot masternode configure in dash.conf. - -{{WARNING}} `masternode start` was removed in Dash Core 0.12.2.2. Local -masternode support was removed for security reasons. - -*Parameters: none* - -*Result---masternode status* - -{% itemplate ntpd1 %} -- n: "Result" - t: "string" - p: "Required
(exactly 1)" - d: "Masternode status" - -{% enditemplate %} - -*Example from Dash Core 0.12.2* - -{% highlight bash %} -dash-cli -testnet masternode start -{% endhighlight %} - -Result: -{% highlight bash %} -Masternode successfully started -{% endhighlight %} - -{% endautocrossref %} - -###### Masternode Start-alias - - -{% autocrossref %} - -The `masternode start-alias` starts a single remote masternode by assigned alias configured in masternode.conf. - -*Parameter #1---masternode alias* - -{% itemplate ntpd1 %} -- n: "Alias" - t: "string" - p: "Required
(exactly 1)" - d: "Alias of the masternode to start" - -{% enditemplate %} - -*Result---masternode status* - -{% itemplate ntpd1 %} -- n: "Result" - t: "string" - p: "Required
(exactly 1)" - d: "Masternode status" - -{% enditemplate %} - -*Example from Dash Core 0.12.2* - -{% highlight bash %} -dash-cli -testnet masternode start-alias MN01 -{% endhighlight %} - -Result: -{% highlight json %} -{ - "alias": "MN01", - "result": "successful" -} -{% endhighlight %} - -{% endautocrossref %} - -###### Masternode Start-mode - - -{% autocrossref %} - -The `masternode start-` RPC starts remote masternodes configured in -masternode.conf. Valid modes are: `all`, `missing`, or `disabled`. - -*Parameters: none* - -*Result---masternode status* - -{% itemplate ntpd1 %} -- n: "Result" - t: "string" - p: "Required
(exactly 1)" - d: "Masternode status" - -- n: "→
`overall`" - t: "string" - p: "Required
(1 or more)" - d: "Reports masternode start successes/failures" - -- n: "→
`detail`" - t: "object" - p: "Required
(exactly 1)" - d: "Start details" - -- n: "→ →
`status`" - t: "object" - p: "Required
(1 or more)" - d: "Name of the masternode alias" - -- n: "→ → →
`alias`" - t: "string" - p: "Required
(exactly 1)" - d: "Masternode alias" - -- n: "→ → →
`result`" - t: "string" - p: "Required
(exactly 1)" - d: "Start result" - -{% enditemplate %} - - -*Example from Dash Core 0.12.2* - -Start all masternodes in masternodes.conf - -{% highlight bash %} -dash-cli -testnet masternode start-all -{% endhighlight %} - -Result: -{% highlight json %} -{ - "overall": "Successfully started 1 masternodes, failed to start 0, total 1", - "detail": { - "status": { - "alias": "MN01", - "result": "successful" - } - } -} -{% endhighlight %} - - -Start missing masternodes in masternodes.conf - -{% highlight bash %} -dash-cli -testnet masternode start-missing -{% endhighlight %} - -Result: -{% highlight json %} -{ - "overall": "Successfully started 0 masternodes, failed to start 0, total 0", - "detail": { - } -} -{% endhighlight %} - - -Start disabled masternodes in masternodes.conf - -{% highlight bash %} -dash-cli -testnet masternode start-disabled -{% endhighlight %} - -Result: -{% highlight json %} -{ - "overall": "Successfully started 1 masternodes, failed to start 0, total 1", - "detail": { - "status": { - "alias": "MN01", - "result": "successful" - } - } -} -{% endhighlight %} - -{% endautocrossref %} - ###### Masternode Status @@ -511,7 +238,7 @@ The `masternode status` RPC prints masternode status information. - n: "→
`outpoint`" t: "string" - p: "Required
(1 or more)" + p: "Required
(exactly 1)" d: "The masternode's outpoint" - n: "→
`service`" @@ -519,10 +246,85 @@ The `masternode status` RPC prints masternode status information. p: "Required
(exactly 1)" d: "The IP address/port of the masternode" -- n: "→
`payee`" +- n: "→
`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The masternode's ProRegTx hash" + +- n: "→
`collateralHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The masternode's collateral hash" + +- n: "→
`collateralIndex`" + t: "int" + p: "Required
(exactly 1)" + d: "Index of the collateral" + +- n: "→
`dmnState`" + t: "object" + p: "Required
(exactly 1)" + d: "Deterministic Masternode State" + +- n: "→ →
`service`" t: "string" p: "Required
(exactly 1)" - d: "Payee address" + d: "The IP address/port of the masternode" + +- n: "→ →
`registeredHeight`" + t: "int" + p: "Required
(exactly 1)" + d: "Block height at which the masternode was registered" + +- n: "→ →
`lastPaidHeight`" + t: "int" + p: "Required
(exactly 1)" + d: "Block height at which the masternode was last paid" + +- n: "→ →
`PoSePenalty`" + t: "int" + p: "Required
(exactly 1)" + d: "Current proof-of-service penalty" + +- n: "→ →
`PoSeRevivedHeight`" + t: "int" + p: "Required
(exactly 1)" + d: "Block height at which the masternode was last revived from a PoSe ban" + +- n: "→ →
`PoSeBanHeight`" + t: "int" + p: "Required
(exactly 1)" + d: "Block height at which the masternode was last PoSe banned" + +- n: "→ →
`revocationReason`" + t: "int" + p: "Required
(exactly 1)" + d: "Reason code for of masternode operator key revocation" + +- n: "→ →
`ownerAddress`" + t: "string" + p: "Required
(exactly 1)" + d: "The owner address" + +- n: "→ →
`votingAddress`" + t: "string" + p: "Required
(exactly 1)" + d: "The voting address" + +- n: "→ →
`payoutAddress`" + t: "string" + p: "Required
(exactly 1)" + d: "The payout address" + +- n: "→ →
`pubKeyOperator`" + t: "string" + p: "Required
(exactly 1)" + d: "The operator public key" + +- n: "→ →
`operatorPayoutAddress`" + t: "string" + p: "Optional
(0 or 1)" + d: "The operator payout address" - n: "→
`status`" t: "string" @@ -531,7 +333,7 @@ The `masternode status` RPC prints masternode status information. {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.13.2* {% highlight bash %} dash-cli -testnet masternode status @@ -540,10 +342,26 @@ dash-cli -testnet masternode status Result: {% highlight json %} { - "outpoint": "f6c83fd96bfaa47887c4587cceadeb9af6238a2c86fe36b883c4d7a6867eab0f-1", - "service": "45.32.237.77:19999", - "payee": "yY6AmGopsZS31wy1JLHR9P6AC6owFaXwuh", - "status": "Masternode successfully started" + "outpoint": "d1be3a1aa0b9516d06ed180607c168724c21d8ccf6c5a3f5983769830724c357-0", + "service": "45.32.237.76:19999", + "proTxHash": "04d06d16b3eca2f104ef9749d0c1c17d183eb1b4fe3a16808fd70464f03bcd63", + "collateralHash": "d1be3a1aa0b9516d06ed180607c168724c21d8ccf6c5a3f5983769830724c357", + "collateralIndex": 0, + "dmnState": { + "service": "45.32.237.76:19999", + "registeredHeight": 7402, + "lastPaidHeight": 59721, + "PoSePenalty": 0, + "PoSeRevivedHeight": 61915, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "yT8DDY5NkX4ZtBkUVz7y1RgzbakCnMPogh", + "votingAddress": "yMLrhooXyJtpV3R2ncsxvkrh6wRennNPoG", + "payoutAddress": "yTsGq4wV8WF5GKLaYV2C43zrkr2sfTtysT", + "pubKeyOperator": "02a2e2673109a5e204f8a82baf628bb5f09a8dfc671859e84d2661cae03e6c6e198a037e968253e94cd099d07b98e94e" + }, + "state": "READY", + "status": "Ready" } {% endhighlight %} @@ -575,90 +393,6 @@ Result: {% endautocrossref %} -###### Masternode List-conf - - -{% autocrossref %} - -The `masternode list-conf` RPC prints masternode.conf in JSON format. - -*Parameters: none* - -*Result---masternode info* - -{% itemplate ntpd1 %} -- n: "Result" - t: "object" - p: "Required
(exactly 1)" - d: "Masternode status info" - -- n: "→
`masternode`" - t: "object" - p: "Required
(1 or more)" - d: "Object containing masternode info" - -- n: "→ →
`alias`" - t: "string" - p: "Required
(exactly 1)" - d: "Masternode alias" - -- n: "→ →
`address`" - t: "string" - p: "Required
(exactly 1)" - d: "The IP address/port of the masternode" - -- n: "→ →
`privateKey`" - t: "string" - p: "Required
(exactly 1)" - d: "Masternode private key" - -- n: "→ →
`txHash`" - t: "string (hex)" - p: "Required
(exactly 1)" - d: "Masternode collateral transaction hash" - -- n: "→ →
`outputIndex`" - t: "int" - p: "Required
(exactly 1)" - d: "Masternode collateral transaction index" - -- n: "→ →
`status`" - t: "string" - p: "Required
(exactly 1)" - d: "The masternode's status" - -{% enditemplate %} - -*Example from Dash Core 0.12.2* - -{% highlight bash %} -dash-cli -testnet masternode status -{% endhighlight %} - -Result: -{% highlight json %} -{ - "masternode": { - "alias": "MN01", - "address": "45.32.237.77:19999", - "privateKey": "92woG282ZQMASn8BAah6H8QmiE5NsPwucv7cu9eTVG1uU63fcfs", - "txHash": "f6c83fd96bfaa47887c4587cceadeb9af6238a2c86fe36b883c4d7a6867eab0f", - "outputIndex": "1", - "status": "ENABLED" - }, - "masternode": { - "alias": "MN02", - "address": "45.32.237.78:19999", - "privateKey": "92woG282ZQMASn8BAah6H8QmiE5NsPwucv7cu9eTVG1uU63fcfs", - "txHash": "f6c83fd96bfaa47887c4587cceadeb9af6238a2c86fe36b883c4d7a6867eab0f", - "outputIndex": "1", - "status": "ENABLED" - } -} -{% endhighlight %} - -{% endautocrossref %} - ###### Masternode Winner @@ -686,14 +420,14 @@ The `masternode winner` RPC prints info on the next masternode winne p: "Required
(exactly 1)" d: "The IP address/port of the masternode" -- n: "→
`protocol`" - t: "number (int)" +- n: "→
`proTxHash`" + t: "string" p: "Required
(exactly 1)" - d: "The protocol version number used by this node. See the [protocol versions section][section protocol versions] for more information" + d: "The masternode's Provider Registration transaction hash" - n: "→
`outpoint`" t: "string" - p: "Required
(1 or more)" + p: "Required
(exactly 1)" d: "The masternode's outpoint" - n: "→
`payee`" @@ -701,19 +435,9 @@ The `masternode winner` RPC prints info on the next masternode winne p: "Required
(exactly 1)" d: "Payee address" -- n: "→
`lastseen`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The Unix epoch time when the masternode was last seen" - -- n: "→
`activeseconds`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "The number of seconds the masternode has been active" - {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.0* {% highlight bash %} dash-cli -testnet masternode winner @@ -722,13 +446,11 @@ dash-cli -testnet masternode winner Result: {% highlight json %} { - "height": 37384, - "IP:port": "145.239.235.17:29999", - "protocol": 70208, - "outpoint": "66eddd00e5927d0a03437d5b8a2f15367c978ef7951c80ae1608a45b1bf64318-1", - "payee": "yY3q6wqRe1y7xzHbGE88YfRg4t97GU7BJ6", - "lastseen": 1512482474, - "activeseconds": 1180019 + "height": 76191, + "IP:port": "34.242.53.163:26173", + "proTxHash": "024608d03beb6a6065f14a29a837c68ae449ac1e17056819366ca0b72b6dd81f", + "outpoint": "024608d03beb6a6065f14a29a837c68ae449ac1e17056819366ca0b72b6dd81f-1", + "payee": "yhp182AnF7gUAyHiWgSbDrKqHKt2dzhoyW" } {% endhighlight %} @@ -838,6 +560,36 @@ Result: } {% endhighlight %} + +**Deprecated RPCs** + +![Warning icon](/img/icons/icon_warning.svg) The following RPCs were deprecated by Dash Core 0.14.0 + +**Masternode Check** + +Forces a check of all masternodes and removes invalid ones. + + +**Masternode Genkey** + +Generates a new masternodeprivkey. + + +**Masternode Start-alias** + +Starts a single remote masternode by assigned alias configured in masternode.conf. + + +**Masternode Start-mode** + +Starts remote masternodes configured in masternode.conf. Valid modes are: `all`, `missing`, or `disabled`. + + +**Masternode List-conf** + +Prints masternode.conf in JSON format. + + *See also:* * [MasternodeList][rpc masternodelist]: {{summary_masternodeList}} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/masternodebroadcast.md b/_includes/devdoc/dash-core/rpcs/rpcs/masternodebroadcast.md index 0642214f..bde08d10 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/masternodebroadcast.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/masternodebroadcast.md @@ -7,10 +7,12 @@ http://opensource.org/licenses/MIT. ##### MasternodeBroadcast {% include helpers/subhead-links.md %} -{% assign summary_masternodeBroadcast="provides a set of commands to create and relay masternode broadcast messages." %} +{% assign summary_masternodeBroadcast="was removed in Dash Core 0.14.0." %} {% autocrossref %} +{{WARNING}} **_Removed in Dash Core 0.14.0._** + The `masternodebroadcast` RPC {{summary_masternodeBroadcast}} *Parameter #1---masternode broadcast command* diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/masternodelist.md b/_includes/devdoc/dash-core/rpcs/rpcs/masternodelist.md index d51aa6ac..d181d2ec 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/masternodelist.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/masternodelist.md @@ -29,21 +29,17 @@ The `masternodelist` RPC {{summary_masternodeList}} Mode | Description --- | --- | --- | -`activeseconds` | Print number of seconds masternode recognized by the network as enabled (since latest issued \"masternodestart/start-many/start-alias\") -`addr` | Print ip address associated with a masternode (can be additionally filtered, partial match) -`daemon` | Print daemon version of a masternode (can be additionally filtered, exact match) -`full` | Print info in format 'status protocol payee lastseen activeseconds lastpaidtime lastpaidblock IP' (can be additionally filtered, partial match) -`info` | Print info in format 'status protocol payee lastseen activeseconds sentinelversion sentinelstate IP' (can be additionally filtered, partial match) +`addr` | Print IP address associated with a masternode (can be additionally filtered, partial match) +`full` | Print info in format 'status payee lastpaidtime lastpaidblock IP' (can be additionally filtered, partial match) +`info` | Print info in format 'status payee IP' (can be additionally filtered, partial match) `json` (Default) | Print info in JSON format (can be additionally filtered, partial match) `lastpaidblock` | Print the last block height a node was paid on the network `lastpaidtime` | Print the last time a node was paid on the network -`lastseen` | Print timestamp of when a masternode was last seen on the network +`owneraddress` | Print the masternode owner Dash address `payee` | Print Dash address associated with a masternode (can be additionally filtered, partial match) -`protocol` | Print protocol of a masternode (can be additionally filtered, exact match) -`pubkey` | Print the masternode (not collateral) public key -`rank` | Print rank of a masternode based on current block -`sentinel` | Print sentinel version of a masternode (can be additionally filtered, exact match) -`status` | Print masternode status: PRE_ENABLED / ENABLED / EXPIRED / SENTINEL_PING_EXPIRED / NEW_START_REQUIRED / UPDATE_REQUIRED / POSE_BAN / OUTPOINT_SPENT (can be additionally filtered, partial match) +`pubKeyOperator` | Print the masternode operator public key +`status` | Print masternode status: ENABLED / POSE_BANNED (can be additionally filtered, partial match) +`votingaddress` | Print the masternode voting Dash address *Parameter #2---List filter* @@ -70,7 +66,7 @@ Mode | Description {% enditemplate %} -*Example from Dash Core 0.12.3* +*Example from Dash Core 0.14.0* Get unfiltered Masternode list in default mode @@ -81,122 +77,41 @@ dash-cli -testnet masternodelist Result: {% highlight json %} { - "83ab0eaeffc212fab5aea4a3057fba51dafdfa6da8b29c3f0de62ed9319fea03-0": { - "address": "203.0.113.1:19999", - "payee": "yiz8WZ9VY9F7SyGuc8mXj6wrDERs6T47B1", + "64fbf05880cdbd35a0278ba01a5edf0c20a9c756d15f883d496f5df35b31b542-1": { + "proTxHash": "ab51b2ba4dca27658e13fea81c0764167c1466aa2d92050c67e4490ce7623da0", + "address": "167.99.164.60:19999", + "payee": "ycZgaHNb8AQq7HnJ3rTwx2fXUd7VCWQumX", "status": "ENABLED", - "protocol": 70208, - "daemonversion": "Unknown", - "sentinelversion": "1.0.2", - "sentinelstate": "current", - "lastseen": 1520876844, - "activeseconds": 3389581, - "lastpaidtime": 1520868832, - "lastpaidblock": 89879 + "lastpaidtime": 1556615121, + "lastpaidblock": 89725, + "owneraddress": "yisedvAxYga44V9bTABzoQ7KoQMugyfU1E", + "votingaddress": "yVpKfQgjkRkezFS5SpZvAEVFsbv9zJedf4", + "collateraladdress": "yeXE94admJeH3oKiaB7UpwWnPZD6Q8srhT", + "pubkeyoperator": "8072ac9a55d1cf5bf9c4262d49e2ef1ffcd716b8983ffdc62b940fec6cb4179d6275f8b68316f29c6c2ad540db329258" }, - "33a833559acc50b63e0909a550d10af26f41043382a9eed30e5218df5adf5304-1": { - "address": "203.0.113.2:39999", - "payee": "yfY21tLcuKtohnkKtwBQXzEKFapwuhb9FE", + "6ed4aa5fa90565c2331bcd22275f684ecdca5da8dd7f83ca943aadc6f44e6746-0": { + "proTxHash": "8f5d5c7c0d9232f45f3a77eef6541922f827930b1f3bb789ad1771dc4d6275c0", + "address": "3.209.222.37:19999", + "payee": "yiVDR2HothEwH2Ss17GntqNp1rBUthnyje", + "status": "POSE_BANNED", + "lastpaidtime": 1554219432, + "lastpaidblock": 72365, + "owneraddress": "ycAZ9adjpGfZ2WLEpyfyUWAjkF6sXdD5df", + "votingaddress": "yQrieR9S99hqnPghoj12RszMXYzc6yzyn2", + "collateraladdress": "ya82BzRBhuFZAPhgXvhkzZgqiVsMdnfan7", + "pubkeyoperator": "0a7fd01cfd502296cfd523d58ee9f4cff34243abb0dcc543ec237ff4d73938e69d187f0b6838bbaf9d54b89adc0d4c8e" + }, + "4758b97bbd20024e171767b8baf4290bec1475b254180869cdfe0db75d7faefb-0": { + "proTxHash": "5cd86ed16f87819dca7b6e4e3d24947b1a6328ed8cc4c9aec7af35fa2b162220", + "address": "68.183.167.16:19999", + "payee": "ycZgaHNb8AQq7HnJ3rTwx2fXUd7VCWQumX", "status": "ENABLED", - "protocol": 70208, - "daemonversion": "Unknown", - "sentinelversion": "1.1.0", - "sentinelstate": "current", - "lastseen": 1520876480, - "activeseconds": 2110895, - "lastpaidtime": 1520866020, - "lastpaidblock": 89862 - }, - "54754314335419cc04ef09295ff7765c8062a6123486aed55fd7e9b04f300b13-0": { - "address": "203.0.113.3:20019", - "payee": "ycn5RWc4Ruo35FTS8bJwugVyCEkfVcrw9a", - "status": "NEW_START_REQUIRED", - "protocol": 70208, - "daemonversion": "Unknown", - "sentinelversion": "Unknown", - "sentinelstate": "expired", - "lastseen": 1517843286, - "activeseconds": 0, - "lastpaidtime": 1520873295, - "lastpaidblock": 89898 - }, - "a4676419793d232359dfd7240bf1b0635b56f2a16aac4cb57f7e9ba459d50116-1": { - "address": "203.0.113.4:19999", - "payee": "ydZHEVgMX67xsi97BhN8KoacN6SCMz6Xho", - "status": "SENTINEL_PING_EXPIRED", - "protocol": 70208, - "daemonversion": "Unknown", - "sentinelversion": "1.0.2", - "sentinelstate": "expired", - "lastseen": 1520876776, - "activeseconds": 7694877, - "lastpaidtime": 0, - "lastpaidblock": 0 - }, - "3d64bd65cb84b935278420de3673cba33470a1e1996c4debfccb5d722254404c-1": { - "address": "203.0.113.5:19999", - "payee": "ySkDc9dHns1AFcjJzGqNmkNnErjakcB2Bp", - "status": "ENABLED", - "protocol": 70208, - "daemonversion": "Unknown", - "sentinelversion": "1.0.2", - "sentinelstate": "current", - "lastseen": 1520876576, - "activeseconds": 10796968, - "lastpaidtime": 1520876143, - "lastpaidblock": 89922 - }, - "54355b4b4d26b84821dab6e0e1c0bded7d8fefc72414f22f45515d1732f1c8e6-1": { - "address": "203.0.113.6:29999", - "payee": "yPk4NCyqvWjeJbE3tW1wmJ9LV2wgVLiYRT", - "status": "ENABLED", - "protocol": 70208, - "daemonversion": "Unknown", - "sentinelversion": "1.1.0", - "sentinelstate": "current", - "lastseen": 1520876323, - "activeseconds": 2110746, - "lastpaidtime": 1520875985, - "lastpaidblock": 89920 - }, - "c6585f4ba88875eb2edc376b9ae24b74fd8c0ef89288923cf16a8fe2787b7ce8-1": { - "address": "203.0.113.7:19999", - "payee": "yP1UHNx26ShYLej56SbHiTiPAUv2QppbUv", - "status": "SENTINEL_PING_EXPIRED", - "protocol": 70208, - "daemonversion": "Unknown", - "sentinelversion": "1.0.2", - "sentinelstate": "expired", - "lastseen": 1520876884, - "activeseconds": 7694986, - "lastpaidtime": 0, - "lastpaidblock": 0 - }, - "b7d45ac3d8c5ddea9ff90d81d92d362e09713a06b2a0089f49c7deb9b2521fef-0": { - "address": "203.0.113.8:19999", - "payee": "yN4iFe7a2G6YYoBtUXcoyixCTV3vDzWSrS", - "status": "NEW_START_REQUIRED", - "protocol": 70208, - "daemonversion": "Unknown", - "sentinelversion": "1.0.2", - "sentinelstate": "current", - "lastseen": 1508842770, - "activeseconds": 416775, - "lastpaidtime": 0, - "lastpaidblock": 0 - }, - "5ef4e5c9d09f6fb927b7b815ea2736ddfce468021d49704acfc3bb7939b425ff-1": { - "address": "203.0.113.9:19999", - "payee": "yPwTQgY8JDFaDjAgUdHmapG4SmzY6SDbE9", - "status": "ENABLED", - "protocol": 70208, - "daemonversion": "Unknown", - "sentinelversion": "1.1.0", - "sentinelstate": "current", - "lastseen": 1520876862, - "activeseconds": 2111317, - "lastpaidtime": 1520872118, - "lastpaidblock": 89892 + "lastpaidtime": 1556616437, + "lastpaidblock": 89734, + "owneraddress": "yPmESxMJhZYuKDLJ1oYdH6kpE8oADVAPUQ", + "votingaddress": "yLvTNLDLHa3pDMbFDRBX5mVMjCshzrDD1X", + "collateraladdress": "ydGCjUEVRHkQZK3ajCsGJGDE9sjrbbS56v", + "pubkeyoperator": "18af4d035eed23d30eb02808af0c133d9879c0fb82c72329ab2ed208ebc1631641ca42bbf462239d151f4e84d8dcde7b" } } {% endhighlight %} @@ -210,19 +125,20 @@ dash-cli -testnet masternodelist full "NEW" Result: {% highlight json %} { - "6125fc1da46cd2fdd013b1fbb02144367a95feffd379c08064f38de0e3deb80c-1": "NEW_START_REQUIRED 70208 yh7RGWjZN8yDAAzPpYFUJZAj41jG7G43c8 1507401630 0 1507409411 5874 1.1.1.1:19999", - "866d66b88afed15ed1a936b680ace1a99e0ca14d0242bc2983c5fdd2c16c1637-1": "NEW_START_REQUIRED 70208 yQHJ4muL7FyhUj1x8iBr2Ws9E4cJ68DKin 1507626190 138962 1507620650 7215 178.62.203.249:19999", - "7c17695bdccc617410164882bd8b5fb7bf4f5a3dceb0a7476800e161cba1c57f-1": "NEW_START_REQUIRED 70208 yjWGCrz6iJnDsrog5FX6ag3iQUNor9UFj5 1507636178 0 0 0 83.1.99.1:19999", - "0512f77ebceaf288386e9a050e3c80652c7bfb6e993659ded2dff43eae6904ac-1": "NEW_START_REQUIRED 70208 ydahSbZKWUjBi6jHeWjLgr7navPoZVCgwH 1507646277 32460 1507649163 7397 172.104.45.115:19999", - "4222505288507e0f1abc32f0323cce1d6c4d22c8e785adb0cf8075b70ae92ddf-1": "NEW_START_REQUIRED 70208 yUznkRL396PewekhtCpUJkfJcxt8fhDyoX 1507646174 9996 1507642757 7355 83.1.99.2:19999", - "b454dd0efc19657f8d56a750385b90ebfb53dce5182a21238b225d6cbb3307f0-1": "NEW_START_REQUIRED 70208 yYR5dcULfpnbPSixorzMkQ9SGwzPPsXcuC 1507401632 0 1507408648 5868 2.2.2.2:19999" + "64fbf05880cdbd35a0278ba01a5edf0c20a9c756d15f883d496f5df35b31b542-1": " ENABLED ycZgaHNb8AQq7HnJ3rTwx2fXUd7VCWQumX 1553155206 65121 167.99.164.60:19999", + "809818107c1104bbba6d386567aa231a294219387e591542df599b7ae7d23339-1": " POSE_BANNED yLriZkwBhftk8VBUqrSykhFhAi4PowZ2Rs 1547488185 24447 45.48.177.222:19999", + "d9fd715b7d896f5426e90bd3383a67fd3e311e00c021750560c6e5c5f9cdac85-1": " ENABLED yRbiW3dguCym4fzUGZCf2kWzKUgw97zEqE 1553155396 65122 109.235.71.56:19999", + "0950cce784fadcc2df4febb19d3a21eab4836ba22ea996ce7e2dde32b6c31431-0": " ENABLED ycZgaHNb8AQq7HnJ3rTwx2fXUd7VCWQumX 1553154969 65119 165.227.63.223:19999", + "08b493929f61a3205f09af9290af9034bec6a8355040a82ce4413f294c703e9a-0": " ENABLED ybCE7m9oPjvCjm8MzPdbMBGgkF7p9wXsFq 1553153959 65110 34.207.45.58:19999", + "b4f9de65ae676b63f84f2865317b8b512a12516c4459f2f59ca2626c71f7dda3-1": " POSE_BANNED yYmromZERpc15GTDvgvjmjChPmgHbhWf1r 0 0 1.1.1.1:19999", + "b7ec36db0c4ece8018183dcb90eed910e38e1c8d3641bbb4facced9a48a283a3-5": " ENABLED ybFPBD7hm9KVd2Dubj97K5mw2ymR8gWJre 1553164088 65172 18.202.52.170:20028", + "71fa05269adf3efc9ffa9a9ce33d27320de61c230cdf4a3835ba7f707bd7807a-1": " POSE_BANNED yVxBZ8JeM5qRbLnUnswZ2APV3rgeZ7C9n9 1552466625 61158 167.99.110.59:19999" } {% endhighlight %} *See also:* * [Masternode][rpc masternode]: {{summary_masternode}} -* [MasternodeBroadcast][rpc masternodebroadcast]: {{summary_masternodeBroadcast}} * [MnSync][rpc mnsync]: {{summary_mnSync}} {% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/mnsync.md b/_includes/devdoc/dash-core/rpcs/rpcs/mnsync.md index 3b164241..0ecbe0fa 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/mnsync.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/mnsync.md @@ -58,16 +58,6 @@ The `mnsync` RPC {{summary_mnSync}} p: "Required
(exactly 1)" d: "Blockchain sync status" -- n: "→
`IsMasternodeListSynced`" - t: "boolean" - p: "Required
(exactly 1)" - d: "Masternode list sync status" - -- n: "→
`IsWinnersListSynced`" - t: "boolean" - p: "Required
(exactly 1)" - d: "Masternode winners list sync status" - - n: "→
`IsSynced`" t: "boolean" p: "Required
(exactly 1)" @@ -86,13 +76,13 @@ AssetID | AssetName --- | --- | --- | 0 | MASTERNODE_SYNC_INITIAL 1 | MASTERNODE_SYNC_WAITING -2 | MASTERNODE_SYNC_LIST -3 | MASTERNODE_SYNC_MNW +_2_ | **Deprecated since 0.14.0**
_MASTERNODE_SYNC_LIST_ +_3_ | **Deprecated since 0.14.0**
_MASTERNODE_SYNC_MNW_ 4 | MASTERNODE_SYNC_GOVERNANCE -1 | MASTERNODE_SYNC_FAILED 999 | MASTERNODE_SYNC_FINISHED -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.0* Get Masternode sync status @@ -108,8 +98,6 @@ Result: "AssetStartTime": 1507662300, "Attempt": 0, "IsBlockchainSynced": true, - "IsMasternodeListSynced": true, - "IsWinnersListSynced": true, "IsSynced": true, "IsFailed": false } @@ -136,7 +124,7 @@ dash-cli -testnet mnsync next Result: {% highlight text %} -sync updated to MASTERNODE_SYNC_LIST +sync updated to MASTERNODE_SYNC_GOVERNANCE {% endhighlight %} @@ -166,7 +154,6 @@ success *See also:* * [Masternode][rpc masternode]: {{summary_masternode}} -* [MasternodeBroadcast][rpc masternodebroadcast]: {{summary_masternodeBroadcast}} * [MasternodeList][rpc masternodelist]: {{summary_masternodeList}} {% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/prioritisetransaction.md b/_includes/devdoc/dash-core/rpcs/rpcs/prioritisetransaction.md index 13736a78..9d15b299 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/prioritisetransaction.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/prioritisetransaction.md @@ -3,6 +3,7 @@ This file is licensed under the MIT License (MIT) available on http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/prioritisetransaction.md" %} + ##### PrioritiseTransaction {% include helpers/subhead-links.md %} @@ -23,17 +24,7 @@ The `prioritisetransaction` RPC {{summary_prioritiseTransaction}} {% enditemplate %} -*Parameter #2---the change to make to the virtual priority* - -{% itemplate ntpd1 %} -- n: "Priority" - t: "number (real)" - p: "Required
(exactly 1)" - d: "If positive, the priority to add to the transaction in addition to its computed priority; if negative, the priority to subtract from the transaction's computed priory. Computed priority is the age of each input in days since it was added to the block chain as an output (coinage) times the value of the input in satoshis (value) divided by the size of the serialized transaction (size), which is `coinage * value / size`" - -{% enditemplate %} - -*Parameter #3---the change to make to the virtual fee* +*Parameter #2---the change to make to the virtual fee* {% itemplate ntpd1 %} - n: "Fee" @@ -53,12 +44,12 @@ The `prioritisetransaction` RPC {{summary_prioritiseTransaction}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.0* {% highlight bash %} dash-cli -testnet prioritisetransaction \ f86c74f27fdd9c7e618d69b3606eeae1710b3f02fabede6ae8c88dd7bb756942 \ - 1234 456789 + 456789 {% endhighlight %} Result: diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/protx.md b/_includes/devdoc/dash-core/rpcs/rpcs/protx.md new file mode 100644 index 00000000..b8995b2c --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/protx.md @@ -0,0 +1,1115 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/protx.md" %} + + + +##### ProTx +{% include helpers/subhead-links.md %} + +{% assign summary_proTx="provides a set of commands to execute ProTx related actions." %} + +{% autocrossref %} + +*Added in Dash Core 0.13.0* + +The `protx` RPC {{summary_proTx}} + +{% endautocrossref %} + +###### ProTx Register + + +{% autocrossref %} + +The `protx register` RPC creates a ProRegTx referencing an existing collateral and and sends it to the network. + +*Parameter #1---collateral address* + +{% itemplate ntpd1 %} +- n: "`collateralHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The collateral transaction hash" +{% enditemplate %} + +*Parameter #2---collateral index* + +{% itemplate ntpd1 %} +- n: "`collateralIndex`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The collateral transaction output index" +{% enditemplate %} + +*Parameter #3---IP Address and port* + +{% itemplate ntpd1 %} +- n: "`ipAndPort`" + t: "string" + p: "Required
(exactly 1)" + d: "IP and port in the form 'IP:PORT'.
Must be unique on the network.
Can be set to '0', which will require a ProUpServTx afterwards." +{% enditemplate %} + +*Parameter #4---owner address* + +{% itemplate ntpd1 %} +- n: "`ownerAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The owner key used for payee updates and proposal voting. The private key belonging to this address be known in your wallet. The address must be unused and must differ from the `collateralAddress`." +{% enditemplate %} + +*Parameter #5---operator public key* + +{% itemplate ntpd1 %} +- n: "`operatorPubKey`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: " The operator public key. The private key does not have to be known. It has to match the private key which is later used when operating the masternode." +{% enditemplate %} + +*Parameter #6---voting address* + +{% itemplate ntpd1 %} +- n: "`votingAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The voting address. The private key does not have to be known by your wallet. It has to match the private key which is later used when voting on proposals. If set to an empty string, `ownerAddress` will be used." +{% enditemplate %} + +*Parameter #7---operator reward* + +{% itemplate ntpd1 %} +- n: "`operatorReward`" + t: "number" + p: "Required
(exactly 1)" + d: "The fraction in % to share with the operator. If non-zero, `ipAndPort` must be zero as well.
The value must be between '0.00' and '100.00'." +{% enditemplate %} + +*Parameter #8---payout address* + +{% itemplate ntpd1 %} +- n: "`payoutAddress`" + t: "string" + p: "Required
(exactly 1)" + d: "The Dash address to use for masternode reward payments." +{% enditemplate %} + +*Parameter #9---fee source address* + +{% itemplate ntpd1 %} +- n: "`feeSourceAddress`" + t: "string" + p: "Optional
(0 or 1)" + d: "If specified, the wallet will only use coins from this address to fund the ProTx. If not specified, `payoutAddress` will be used. The private key belonging to this address must be known in your wallet." +{% enditemplate %} + +*Result---provider registration transaction hash* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Provider registration transaction (ProRegTx) hash" +{% enditemplate %} + +*Example from Dash Core 0.13.0* + +{% highlight bash %} +dash-cli -testnet protx register\ + 8b2eab3413abb6e04d17d1defe2b71039ba6b6f72ea1e5dab29bb10e7b745948 1\ + 2.3.4.5:2345 yNLuVTXJbjbxgrQX5LSMi7hV19We8hT2d6\ + 88d719278eef605d9c19037366910b59bc28d437de4a8db4d76fda6d6985dbdf10404fb9bb5cd0e8c22f4a914a6c5566\ + yNLuVTXJbjbxgrQX5LSMi7hV19We8hT2d6 5 yjJJLkYDUN6X8gWjXbCoKEXoiLeKxxMMRt +{% endhighlight %} + +Result: +{% highlight bash %} +61e6d780178d353940c4cb9b3073ac0c50792bbcf0b15c1750d2028b71e34929 +{% endhighlight %} + +{% endautocrossref %} + +###### ProTx Register Fund + + +{% autocrossref %} + +The `protx register_fund` RPC creates and funds a ProRegTx with the 1,000 DASH necessary for a masternode and then sends it to the network. + +*Parameter #1---collateral address* + +{% itemplate ntpd1 %} +- n: "`collateralAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The Dash address to send the collateral to" +{% enditemplate %} + +*Parameter #2---IP Address and port* + +{% itemplate ntpd1 %} +- n: "`ipAndPort`" + t: "string" + p: "Required
(exactly 1)" + d: "IP and port in the form 'IP:PORT'.
Must be unique on the network.
Can be set to '0', which will require a ProUpServTx afterwards." +{% enditemplate %} + +*Parameter #3---owner address* + +{% itemplate ntpd1 %} +- n: "`ownerAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The owner key used for payee updates and proposal voting. The private key belonging to this address be known in your wallet. The address must be unused and must differ from the `collateralAddress`." +{% enditemplate %} + +*Parameter #4---operator public key* + +{% itemplate ntpd1 %} +- n: "`operatorPubKey`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: " The operator public key. The private key does not have to be known. It has to match the private key which is later used when operating the masternode." +{% enditemplate %} + +*Parameter #5---voting address* + +{% itemplate ntpd1 %} +- n: "`votingAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The voting address. The private key does not have to be known by your wallet. It has to match the private key which is later used when voting on proposals. If set to an empty string, `ownerAddress` will be used." +{% enditemplate %} + +*Parameter #6---operator reward* + +{% itemplate ntpd1 %} +- n: "`operatorReward`" + t: "number" + p: "Required
(exactly 1)" + d: "The fraction in % to share with the operator.
The value must be between '0.00' and '100.00'." +{% enditemplate %} + +*Parameter #7---payout address* + +{% itemplate ntpd1 %} +- n: "`payoutAddress`" + t: "string" + p: "Required
(exactly 1)" + d: "The Dash address to use for masternode reward payments." +{% enditemplate %} + +*Parameter #8---fund address* + +{% itemplate ntpd1 %} +- n: "`fundAddress`" + t: "string" + p: "Optional
(0 or 1)" + d: "If specified, the wallet will only use coins from this address to fund the ProTx. If not specified, `payoutAddress` will be used. The private key belonging to this address must be known in your wallet." +{% enditemplate %} + +*Result---provider registration transaction hash* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Provider registration transaction (ProRegTx) hash" +{% enditemplate %} + +*Example from Dash Core 0.13.0* + +{% highlight bash %} +dash-cli -testnet protx register_fund yakx4mMRptKhgfjedNzX5FGQq7kSSBF2e7\ + 3.4.5.6:3456 yX2cDS4kcJ4LK4uq9Hd4TG7kURV3sGLZrw\ + 0e02146e9c34cfbcb3f3037574a1abb35525e2ca0c3c6901dbf82ac591e30218d1711223b7ca956edf39f3d984d06d51\ + yX2cDS4kcJ4LK4uq9Hd4TG7kURV3sGLZrw 5 yakx4mMRptKhgfjedNzX5FGQq7kSSBF2e7 +{% endhighlight %} + +Result: +{% highlight bash %} +ba1b3330e16a0876b7a186e7ceb689f03ec646e611e91d7139de021bbf13afdd +{% endhighlight %} + +{% endautocrossref %} + +###### ProTx Register Prepare + + +{% autocrossref %} + +The `protx register_prepare` RPC creates an unsigned ProTx and +returns it. The ProTx must be signed externally with the collateral key and then +passed to "protx register_submit". The prepared transaction will also contain inputs +and outputs to cover fees. + +*Parameter #1---collateral address* + +{% itemplate ntpd1 %} +- n: "`collateralHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The collateral transaction hash" +{% enditemplate %} + +*Parameter #2---collateral index* + +{% itemplate ntpd1 %} +- n: "`collateralIndex`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The collateral transaction output index" +{% enditemplate %} + +*Parameter #3---IP Address and port* + +{% itemplate ntpd1 %} +- n: "`ipAndPort`" + t: "string" + p: "Required
(exactly 1)" + d: "IP and port in the form 'IP:PORT'.
Must be unique on the network.
Can be set to '0', which will require a ProUpServTx afterwards." +{% enditemplate %} + +*Parameter #4---owner address* + +{% itemplate ntpd1 %} +- n: "`ownerAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The owner key used for payee updates and proposal voting. The private key belonging to this address be known in your wallet. The address must be unused and must differ from the `collateralAddress`." +{% enditemplate %} + +*Parameter #5---operator public key* + +{% itemplate ntpd1 %} +- n: "`operatorPubKey`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: " The operator public key. The private key does not have to be known. It has to match the private key which is later used when operating the masternode." +{% enditemplate %} + +*Parameter #6---voting address* + +{% itemplate ntpd1 %} +- n: "`votingAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The voting address. The private key does not have to be known by your wallet. It has to match the private key which is later used when voting on proposals. If set to an empty string, `ownerAddress` will be used." +{% enditemplate %} + +*Parameter #7---operator reward* + +{% itemplate ntpd1 %} +- n: "`operatorReward`" + t: "number" + p: "Required
(exactly 1)" + d: "The fraction in % to share with the operator.
The value must be between '0.00' and '100.00'." +{% enditemplate %} + +*Parameter #8---payout address* + +{% itemplate ntpd1 %} +- n: "`payoutAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The Dash address to use for masternode reward payments." +{% enditemplate %} + +*Parameter #9---fee source address* + +{% itemplate ntpd1 %} +- n: "`feeSourceAddress`" + t: "string" + p: "Optional
(0 or 1)" + d: "If specified, the wallet will only use coins from this address to fund the ProTx. If not specified, `payoutAddress` will be used. The private key belonging to this address must be known in your wallet." +{% enditemplate %} + +*Result---unsigned transaction and message to sign* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object" + p: "Required
(exactly 1)" + d: "JSON object containing an unsigned provider transaction and the message to be signed externally, or JSON `null` if an error occurred" + +- n: "→
`tx`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The serialized ProRegTx in hex format" + +- n: "→
`collateralAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The collateral address" + +- n: "→
`signMessage`" + t: "string (base64)" + p: "Required
(exactly 1)" + d: "The string message that needs to be signed with the collateral key." +{% enditemplate %} + +*Example from Dash Core 0.13.0* + +{% highlight bash %} +dash-cli -testnet protx register_prepare\ + df41e398bb245e973340d434d386f431dbd69735a575721b0b6833856e7d31ec 1 \ + 9.8.7.6:9876 yemjhGQ99V5ayJMjoyGGPtxteahii6G1Jz\ + 06849865d01e4f73a6d5a025117e48f50b897e14235800501c8bfb8a6365cc8dbf5ddb67a3635d0f1dcc7d46a7ee280c\ + yemjhGQ99V5ayJMjoyGGPtxteahii6G1Jz 1.2 yjJJLkYDUN6X8gWjXbCoKEXoiLeKxxMMRt +{% endhighlight %} + +Result: +{% highlight json %} +{ + "tx": "0300010001912b88876fee2f8e43e23b5e81276c163cf23d867bad4148170cb106ef9023700000000000feffffff0125623ba40b0000001976a914736e155c1039a269d4019c66219d2a18f0fee27588ac00000000d1010000000000ec317d6e8533680b1b7275a53597d6db31f486d334d44033975e24bb98e341df0100000000000000000000000000ffff090807062694ca6b243168b30461d1f19e2bb89a965a5bac067e06849865d01e4f73a6d5a025117e48f50b897e14235800501c8bfb8a6365cc8dbf5ddb67a3635d0f1dcc7d46a7ee280cca6b243168b30461d1f19e2bb89a965a5bac067e78001976a914fc136008111fcc7a05be6cec66f97568727a9e5188ace5f6b70ac55411727e25178bd417b9b03f837ad7155d90ad286f3a427203fb9f00", + "collateralAddress": "yWuKWhDzGQqZL8rw6kGxGrfe6P8bUC2S4f", + "signMessage": "yjJJLkYDUN6X8gWjXbCoKEXoiLeKxxMMRt|120|yemjhGQ99V5ayJMjoyGGPtxteahii6G1Jz|yemjhGQ99V5ayJMjoyGGPtxteahii6G1Jz|69a49e18c1253b90d39322f7e2f7af74524401bc33a27645e697e74a214e3e1e" +} +{% endhighlight %} + +{% endautocrossref %} + +###### ProTx Register Submit + + +{% autocrossref %} + +The `protx register_submit` RPC submits the specified ProTx to the +network. This command will also sign the inputs of the transaction which were +previously added by `protx register_prepare` to cover transaction fees. + +*Parameter #1---collateral address* + +{% itemplate ntpd1 %} +- n: "`tx`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The serialized transaction previously returned by `protx register_prepare`" +{% enditemplate %} + +*Parameter #2---collateral index* + +{% itemplate ntpd1 %} +- n: "`sig`" + t: "string (base64)" + p: "Required
(exactly 1)" + d: "The signature signed with the collateral key. Must be in base64 format." +{% enditemplate %} + +*Result---provider registration transaction hash* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Provider registration transaction (ProRegTx) hash" +{% enditemplate %} + +*Example from Dash Core 0.13.0* + +{% highlight bash %} +dash-cli -testnet protx register_submit\ + 03000100012d988526d5d1efd32320023c92eff09c2963dcb021b0de9761\ + 17e5e37dc7a7870000000000feffffff015f603ba40b0000001976a9140c\ + 37e07eb5c608961769e6506c23c11e9f9fe00988ac00000000d101000000\ + 00002d988526d5d1efd32320023c92eff09c2963dcb021b0de976117e5e3\ + 7dc7a7870100000000000000000000000000ffff05060708162e243dd366\ + bf4a329968d77eac9fb63481a600938d125e1b7cba03ca2a097e402185e6\ + 160232ea53e6d62898a3be8617b06ff347d967543228bd9b605547c3d478\ + b0a838ca243dd366bf4a329968d77eac9fb63481a600938dc4091976a914\ + e9bf4e6f26fecf1dfc1e04dde43472df378628b888ac6a048e7f645e8adc\ + 305ccfd8652066046a0702596af13b8ac97803ade256da2900\ + \ + H90IvqVtFjZkwLJb08yMEgGixs0/FpcdvwImBcir4cYLJhD3pdX+lKD2GsPl6KNxghVXNk5/HpOdBoWAHo9u++Y= +{% endhighlight %} + +Result: +{% highlight bash %} +273ce3ebe24183ee4117b10e054cdbb108a3bde5d2f286129e29480d46a3f573 +{% endhighlight %} + +{% endautocrossref %} + +###### ProTx List + + +{% autocrossref %} + +The `protx list` RPC returns a list of provider transactions. + +Lists all ProTxs in your wallet or on-chain, depending on the given type. If +`type` is not specified, it defaults to `registered`. All types have the optional +argument `detailed` which if set to `true` will result in a detailed list being +returned. If set to `false`, only the hashes of the ProTx will be returned. + +*Parameter #1---type* + +{% itemplate ntpd1 %} +- n: "`type`" + t: "string" + p: "Optional
(0 or 1)" + d: "The type of ProTxs to list:
`registered` - all ProTxs registered at height
`valid` - all active/valid ProTxs at height
`wallet` - all ProTxs found in the current wallet

Height defaults to current chain-tip if one is not provided" +{% enditemplate %} + +*Parameter #2---detailed* + +{% itemplate ntpd1 %} +- n: "`detailed`" + t: "bool" + p: "Optional
(0 or 1)" + d: "If set to `false` (default), only ProTx hashes are returned. If set to `true`, a detailed list of ProTx details is returned." +{% enditemplate %} + +*Parameter #3---height* + +{% itemplate ntpd1 %} +- n: "`height`" + t: "bool" + p: "Optional
(0 or 1)" + d: "List ProTxs from this height (default: current chain tip)." +{% enditemplate %} + +*Result (if `detailed` was `false`)---provider registration transaction hash* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string (hex): array" + p: "Required
(exactly 1)" + d: "Array of provider transaction (ProTx) hashes" +{% enditemplate %} + +*Result (if `detailed` was `true`)---JSON provider registration transaction details* + +{% assign DEPTH="→" %} +{% include helpers/vars.md %} + +{% itemplate ntpd1 %} +- n: "`result`" + t: "array" + p: "Required
(exactly 1)" + d: "An array of objects each containing a provider transaction, or JSON `null` if an error occurred" + + {{INCLUDE_PROTX}} + +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet protx list +{% endhighlight %} + +Result: +{% highlight json %} +[ + "2b4a07a9b04dc42a0c19b85edb60954a27acaadfe3ee21d0171385778f34e1c2", + "61e6d780178d353940c4cb9b3073ac0c50792bbcf0b15c1750d2028b71e34929", + "ca193751f3cbed2aa4f1b33b0acc48c7ed8b9a3679858d69cf23157a4f545176", + "ba1b3330e16a0876b7a186e7ceb689f03ec646e611e91d7139de021bbf13afdd" +] +{% endhighlight %} + + +List of ProTxs which are active/valid at the given chain height. + +{% highlight bash %} +dash-cli -testnet protx list valid false 700 +{% endhighlight %} + +Result: +{% highlight json %} +[ + "2b4a07a9b04dc42a0c19b85edb60954a27acaadfe3ee21d0171385778f34e1c2" +] +{% endhighlight %} + +Detailed list of ProTxs which are active/valid at the given chain height. + +{% highlight bash %} +dash-cli -testnet protx list valid true 700 +{% endhighlight %} + +Result: +{% highlight json %} +[ + { + "proTxHash": "c48a44a9493eae641bea36992bc8c27eaaa33adb1884960f55cd259608d26d2f", + "collateralHash": "e3270ff48c4b802d56ee58d3d53777f7f9c289964e4df0842518075fc81345b1", + "collateralIndex": 3, + "collateralAddress": "yYpzTXjVx7A5uohsmW8sRy7TJp4tihVuZg", + "operatorReward": 0, + "state": { + "service": "1.2.3.4:1234", + "registeredHeight": 7090, + "lastPaidHeight": 0, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "yTMDce5yEpiPqmgPrPmTj7yAmQPJERUSVy", + "votingAddress": "yTMDce5yEpiPqmgPrPmTj7yAmQPJERUSVy", + "payoutAddress": "yU3UdrmS6KpWwBDLQTkp1KjXePwWsMbYdj", + "pubKeyOperator": "8700add55a28ef22ec042a2f28e25fb4ef04b3024a7c56ad7eed4aebc736f312d18f355370dfb6a5fec9258f464b227e" + }, + "confirmations": 1, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + } +] +{% endhighlight %} + +{% endautocrossref %} + +###### ProTx Info + + +{% autocrossref %} + +The `protx info` RPC returns detailed information about a deterministic masternode. + +{% assign DEPTH="→" %} +{% include helpers/vars.md %} + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object" + p: "Required
(exactly 1)" + d: "An JSON object containing a provider transaction, or JSON `null` if an error occurred" + + {{INCLUDE_PROTX}} +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet protx info\ + 2b4a07a9b04dc42a0c19b85edb60954a27acaadfe3ee21d0171385778f34e1c2 +{% endhighlight %} + +Result: +{% highlight json %} +{ + "proTxHash": "2b4a07a9b04dc42a0c19b85edb60954a27acaadfe3ee21d0171385778f34e1c2", + "collateralHash": "8d23d08ee6e2e0577550c90afde9bc63745f734605724ba9908e0220c48dec04", + "collateralIndex": 1, + "collateralAddress": "ygp7ZJGQZsVvuU11shixkNZSq9Uw4QrdWj", + "operatorReward": 5, + "state": { + "service": "54.149.207.193:19999", + "registeredHeight": 683, + "lastPaidHeight": 785, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "ycdU6EyVggw4RaW3EKPHCMBeT6vzRDXgbJ", + "votingAddress": "ycdU6EyVggw4RaW3EKPHCMBeT6vzRDXgbJ", + "payoutAddress": "yXsKagNKcHkE2eUKQe8Sf2Z32SKrmQ6XEJ", + "pubKeyOperator": "8ad9500ef26ae510e0dd8cf0568b2a89d1234697873db2fcdd11674a73caba91cd416f9ac701f4f7807d8db102bc4a39" + }, + "confirmations": 192, + "wallet": { + "hasOwnerKey": true, + "hasOperatorKey": false, + "hasVotingKey": true, + "ownsCollateral": true, + "ownsPayeeScript": true, + "ownsOperatorRewardScript": false + } +} +{% endhighlight %} + +{% endautocrossref %} + +###### ProTx Update Service + + +{% autocrossref %} + +The `protx update_service` RPC creates and sends a ProUpServTx to the network. + +*Parameter #1---initial provider registration transaction hash* + +{% itemplate ntpd1 %} +- n: "`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the provider transaction as hex in RPC byte order" +{% enditemplate %} + +*Parameter #2---IP Address and port* + +{% itemplate ntpd1 %} +- n: "`ipAndPort`" + t: "string" + p: "Required
(exactly 1)" + d: "IP and port in the form 'IP:PORT'.
Must be unique on the network." +{% enditemplate %} + +*Parameter #3---operator public key* + +{% itemplate ntpd1 %} +- n: "`operatorPubKey`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: " The operator public key. The private key does not have to be known. It has to match the private key which is later used when operating the masternode." +{% enditemplate %} + +*Parameter #4---operator payout address* + +{% itemplate ntpd1 %} +- n: "`operatorPayoutAddress`" + t: "string (hex)" + p: "Optional
(0 or 1)" + d: "The Dash address used for operator reward payments. Only allowed when the ProRegTx had a non-zero `operatorReward` value. If set to an empty string, the currently active payout address is reused." +{% enditemplate %} + +*Parameter #5---fee source address* + +{% itemplate ntpd1 %} +- n: "`feeSourceAddress`" + t: "string" + p: "Optional
(0 or 1)" + d: "If specified, the wallet will only use coins from this address to fund the ProTx. If not specified, `operatorPayoutAddress` will be used. The private key belonging to this address must be known in your wallet." +{% enditemplate %} + +*Result---provider update service transaction hash* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Provider update service transaction (ProUpServTx) hash" +{% enditemplate %} + +*Example from Dash Core 0.13.0* + +{% highlight bash %} +dash-cli -testnet protx update_service\ + ba1b3330e16a0876b7a186e7ceb689f03ec646e611e91d7139de021bbf13afdd\ + "4.3.2.1:4321"\ + 4da7e1ea30fb9e55c73ad23df0b9d3d34342acb24facf4b19420e1a26ae272d1 +{% endhighlight %} + +Result: +{% highlight bash %} +5b6cfa1bdd3c8b7e0b9550b9c4e809381f81a410bc7f241d3879dd736fd51270 +{% endhighlight %} + +{% endautocrossref %} + +###### ProTx Update Registrar + + +{% autocrossref %} + +The `protx update_registrar` RPC creates and sends a ProUpRegTx to the network. + +*Parameter #1---initial provider registration transaction hash* + +{% itemplate ntpd1 %} +- n: "`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the provider transaction as hex in RPC byte order" +{% enditemplate %} + +*Parameter #2---operator public key* + +{% itemplate ntpd1 %} +- n: "`operatorPubKey`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: " The operator public key. The private key does not have to be known. It has to match the private key which is later used when operating the masternode. If set to an empty string, the last on-chain operator key of the masternode will be used." +{% enditemplate %} + +*Parameter #3---voting address* + +{% itemplate ntpd1 %} +- n: "`votingAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The voting address. The private key does not have to be known by your wallet. It has to match the private key which is later used when voting on proposals. If set to an empty string, `ownerAddress` will be used." +{% enditemplate %} + +*Parameter #4---operator payout address* + +{% itemplate ntpd1 %} +- n: "`payoutAddress`" + t: "string (hex)" + p: "Optional
(0 or 1)" + d: "The Dash address to use for masternode reward payments. If set to an empty string, the last on-chain payout address of the masternode will be used." +{% enditemplate %} + +*Parameter #5---fee source address* + +{% itemplate ntpd1 %} +- n: "`feeSourceAddress`" + t: "string" + p: "Optional
(0 or 1)" + d: "If specified, the wallet will only use coins from this address to fund the ProTx. If not specified, `payoutAddress` will be used. The private key belonging to this address must be known in your wallet." +{% enditemplate %} + +*Result---provider update registrar transaction hash* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Provider update registrar transaction (ProUpRegTx) hash" +{% enditemplate %} + +*Example from Dash Core 0.13.0* + +{% highlight bash %} +dash-cli -testnet protx update_registrar\ + "ba1b3330e16a0876b7a186e7ceb689f03ec646e611e91d7139de021bbf13afdd"\ + "0e02146e9c34cfbcb3f3037574a1abb35525e2ca0c3c6901dbf82ac591e30218d1711223b7ca956edf39f3d984d06d51"\ + "yX2cDS4kcJ4LK4uq9Hd4TG7kURV3sGLZrw" "yakx4mMRptKhgfjedNzX5FGQq7kSSBF2e7" +{% endhighlight %} + +Result: +{% highlight bash %} +702390ef06b10c174841ad7b863df23c166c27815e3be2438e2fee6f87882b91 +{% endhighlight %} + +{% endautocrossref %} + +###### ProTx Revoke + + +{% autocrossref %} + +The `protx revoke` RPC creates and sends a ProUpRevTx to the network. + +*Parameter #1---initial provider registration transaction hash* + +{% itemplate ntpd1 %} +- n: "`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the provider transaction as hex in RPC byte order" +{% enditemplate %} + +*Parameter #2---operator private key* + +{% itemplate ntpd1 %} +- n: "`operatorPubKey`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: " The operator private key belonging to the registered operator public key." +{% enditemplate %} + +*Parameter #3---reason* + +{% itemplate ntpd1 %} +- n: "`reason`" + t: "number" + p: "Required
(exactly 1)" + d: "The reason for revocation." +{% enditemplate %} + +*Parameter #4---fee source address* + +{% itemplate ntpd1 %} +- n: "`feeSourceAddress`" + t: "string" + p: "Optional
(0 or 1)" + d: "If specified, the wallet will only use coins from this address to fund the ProTx. If not specified, `payoutAddress` will be used. The private key belonging to this address must be known in your wallet." +{% enditemplate %} + +*Result---provider update revoke transaction hash* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Provider update revoke transaction (ProUpRevTx) hash" +{% enditemplate %} + +*Example from Dash Core 0.13.0* + +{% highlight bash %} +dash-cli -testnet protx revoke\ + "ba1b3330e16a0876b7a186e7ceb689f03ec646e611e91d7139de021bbf13afdd"\ + "4da7e1ea30fb9e55c73ad23df0b9d3d34342acb24facf4b19420e1a26ae272d1" +{% endhighlight %} + +Result: +{% highlight bash %} +2aad36dd2ab254bee06b0b5dad51e7603691b72058d5806fd94e1d2d19a7c209 +{% endhighlight %} + +{% endautocrossref %} + +###### ProTx Diff + + +{% autocrossref %} + +The `protx diff` RPC calculates a diff and a proof between two masternode list. + +*Parameter #1---start block height* + +{% itemplate ntpd1 %} +- n: "`baseBlock`" + t: "number (int)" + p: "Required
(Exactly 1)" + d: "" +{% enditemplate %} + +*Parameter #2---end block height* + +{% itemplate ntpd1 %} +- n: "`block`" + t: "bool" + p: "Required
(Exactly 1)" + d: "" +{% enditemplate %} + +*Result---JSON provider registration transaction details* + +{% assign DEPTH="→" %} +{% include helpers/vars.md %} + +{% itemplate ntpd1 %} +- n: "`result`" + t: "array" + p: "Required
(exactly 1)" + d: "An array of objects each containing a provider transaction, or JSON `null` if an error occurred" + +- n: "→
`baseBlockHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the base block as hex in RPC byte order" + +- n: "→
`blockHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the ending block as hex in RPC byte order" + +- n: "→
`cbTxMerkleTree`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The coinbase transaction merkle tree" + +- n: "→
`cbTx`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The coinbase transaction" + +- n: "→
`deletedMNs`" + t: "array" + p: "Required
(exactly 1)" + d: "An array of deleted masternode hashes" + +- n: "→
`mnlist`" + t: "array" + p: "Required
(exactly 1)" + d: "An array of masternode details" + +- n: "→ →
`proRegTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the initial provider registration transaction as hex in RPC byte order" + +- n: "→ →
`confirmedHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the block where the ProRegTx was mined" + +- n: "→ →
`service`" + t: "string" + p: "Required
(exactly 1)" + d: "The IP address/Port of the masternode" + +- n: "→ →
`pubKeyOperator`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The operator public key" + +- n: "→ →
`votingAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The voting address" + +- n: "→ →
`isValid`" + t: "bool" + p: "Required
(exactly 1)" + d: "Set to `true` if masternode is valid" + +- n: "→
`deletedQuorums`" + t: "array" + p: "Required
(exactly 1)" + d: "An array of deleted quorums" + +- n: "→ →
`llmqType`" + t: "number" + p: "Required
(exactly 1)" + d: "The quorum type" + +- n: "→ →
`quorumHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the quorum" + +- n: "→
`newQuorums`" + t: "array" + p: "Required
(exactly 1)" + d: "An array of new quorums" + +- n: "→ →
`version`" + t: "number" + p: "Required
(exactly 1)" + d: "The quorum version" + +- n: "→ →
`llmqType`" + t: "number" + p: "Required
(exactly 1)" + d: "The quorum type" + +- n: "→ →
`quorumHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the quorum" + +- n: "→ →
`signersCount`" + t: "number" + p: "Required
(exactly 1)" + d: "The number of signers for the quorum" + +- n: "→ →
`validMembersCount`" + t: "number" + p: "Required
(exactly 1)" + d: "The number of valid members in the quorum" + +- n: "→ →
`quorumPublicKey`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The public key of the quorum" + +- n: "→
`merkleRootMNList`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Merkle root of the masternode list" + +- n: "→
`merkleRootQuorums`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "*Added in Coinbase Transaction version 2 (Dash Core 0.14.0)*

Merkle root of the masternode list" +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet protx diff 75000 76000 +{% endhighlight %} + +Result (truncated): +{% highlight json %} +{ + "baseBlockHash": "0000000003deb00bba101ee581cdc4e1cbd1243ec5cd190472ae93eff07c8881", + "blockHash": "0000000000c0279636003ed0042c9a454b4c39e9a6c49bb92d420e0bf4e0f49b", + "cbTxMerkleTree": "01000000015ef8245e2a381174f5e2cc701d5d067d9f16945179380a3ce54415114426eb510101", + "cbTx": "03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff4c03e02801043619ab5c08fabe6d6d736170747365743a7265737574736574d6e48c2ebd4e147373617074736574730100000000000000380000ae250000000d2f6e6f64655374726174756d2f000000000340230e43000000001976a914cb594917ad4e5849688ec63f29a0f7f3badb5da688ac4cfe1c3e000000001976a91470da282ad16926e127064b7d3d787d7f3793014788acf424f104000000001976a914312d9ccd4e73f2e66006e45701bce17125ba681e88ac00000000260100e0280100d26df127ba2765c8f098ab71199c82c59509418efe26cdf02f7c92ce738e2247", + "deletedMNs": [ + ], + "mnList": [ + { + "proRegTxHash": "fef106ff6420f9c6638c9676988a8fc655750caafb506c98cb5ff3d4fea99a41", + "confirmedHash": "0000000005d5635228f113b50fb5ad66995a7476ed20374e6e159f1f9e62347b", + "service": "45.48.177.222:19999", + "pubKeyOperator": "842476e8d82327adfb9b617a7ac3f62868946c0c4b6b0e365747cfb8825b8b79ba0eb1fa62e8583ae7102f59bf70c7c7", + "votingAddress": "yf7QHemCfbmKEncwZxroTj8JtShXsC28V6", + "isValid": true + }, + { + "proRegTxHash": "7d56a2cf814b344f54ac4b6485a7a5b2b5a439ea796defff67f2a5872c9df5c3", + "confirmedHash": "00000c66555eea6272e5c7bcdb2648e1a63fd5b23a6d1d4c3f9dc5df43c6a5a8", + "service": "178.151.192.107:19999", + "pubKeyOperator": "8631b1ba19ed23fdab61db7a81c9aa1356eaf37d0a29a14cc493e2f863080bf909b4d3e23d536be1d18e4c842566ed67", + "votingAddress": "yP2LXCZTVVjBFQiN2bhghQvNwdUQG8NMX8", + "isValid": true + }, + { + "proRegTxHash": "be32ec53dbbfb64e5ba29e25e3716f6f4024291914ce4c858cd69f0b4e371dda", + "confirmedHash": "0000000015717296254a7c6139a50c34ad481dc8fdf7b0ea4c8320dc3fff2759", + "service": "173.61.30.231:19025", + "pubKeyOperator": "86ce02e551a46f1ca9a734104b4e387984d733ba99930eb677aae126fa142f201049842422ab2f105e3c9805f1bd54e8", + "votingAddress": "ySBU7oXuuTSJqtmUArMRFsKefJPtEDkESG", + "isValid": false + } + ], + "deletedQuorums": [ + { + "llmqType": 1, + "quorumHash": "00000000052b95b036c87f82d19878f69bf940e6acf9f03cd818bd07a5686d0e" + }, + { + "llmqType": 1, + "quorumHash": "0000000000e8b557ea26921f4bb143e961dd35209cf8c1c7b73397322c1a5018" + }, + { + "llmqType": 1, + "quorumHash": "000000000b259f422fe3b647b8f1553b846d95dc8c79699d60e48a81dcf14747" + }, + { + "llmqType": 1, + "quorumHash": "00000000143365adb3c3de6a35ae247120df8ca53a61afd82cd6fd4126ca8a4d" + } + ], + "newQuorums": [ + { + "version": 1, + "llmqType": 1, + "quorumHash": "0000000001427858db64213ed3ef32ffb2546ca7f2a096adbefc197437b90612", + "signersCount": 50, + "validMembersCount": 50, + "quorumPublicKey": "922e3683358f09a2619efb9e8329f90d5a8a608a18e26db212613ef7f95818eb6f68372fb313edbf96fdd2cdee20a66d" + }, + { + "version": 1, + "llmqType": 1, + "quorumHash": "000000000148a6fced08763f3f31dd68a3d88d2d4f2d48eef44eb9311de66129", + "signersCount": 50, + "validMembersCount": 50, + "quorumPublicKey": "814973fcf54892fa4edbf9e732341ff1227e2a89bf59cb22b52082e940f7c3ac8a7c25163cb375b3cfe3654e86eaa65d" + }, + { + "version": 1, + "llmqType": 1, + "quorumHash": "0000000009931a8a6dcdf21a869739356e7715eb155c1a18a58c8bf13382ac33", + "signersCount": 50, + "validMembersCount": 50, + "quorumPublicKey": "0694b46d8581423f2f68196dcc2d06be0b6b365a4100b54e351ab42f5828d09fd03941f8a1255363753a53d32b43f63b" + }, + { + "version": 1, + "llmqType": 1, + "quorumHash": "0000000006097e9d08a4ca9bedbe4a97bb9bf3fe8d09372d18d2398f185cff5d", + "signersCount": 50, + "validMembersCount": 50, + "quorumPublicKey": "10d0488558afd929508cd2d11bda7564333a904aa23c8b4a1ed57d86b217e3181497469e7220e9421e14f645a00940fc" + } + ], + "merkleRootMNList": "47228e73ce927c2ff0cd26fe8e410995c5829c1971ab98f0c86527ba27f16dd2" +} +{% endhighlight %} + +{% endautocrossref %} + +{% autocrossref %} + +*See also: none* + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/quorum.md b/_includes/devdoc/dash-core/rpcs/rpcs/quorum.md new file mode 100644 index 00000000..6e1284ee --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/quorum.md @@ -0,0 +1,1796 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/quorum.md" %} + +##### Quorum +{% include helpers/subhead-links.md %} + + + +{% assign summary_quorum="provides a set of commands for quorums (LLMQs)." %} + +{% autocrossref %} + +*Added in Dash Core 0.14.0* + +The `quorum` RPC {{summary_quorum}} + +{% endautocrossref %} + +###### Quorum List + + +{% autocrossref %} + +The `quorum list` RPC displays a list of on-chain quorums. + +*Parameter #1---quorum count* + +{% itemplate ntpd1 %} +- n: "`count`" + t: "number" + p: "Optional
(0 or 1)" + d: "Number of quorums to list. Will list active quorums if `count` is not specified." +{% enditemplate %} + +*Result---a list of quorums* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object" + p: "Required
(exactly 1)" + d: "Quorum list" + +- n: "→
Quorum" + t: "array" + p: "Required
(1 or more)" + d: "Array of quorum details" + +- n: "→ →
Quorum Hash" + t: "string (hex)" + p: "Optional
(0 or more)" + d: "A quorum hash" +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet quorum list +{% endhighlight %} + +Result: +{% highlight json %} +{ + "llmq_50_60": [ + "00000000023cc6dde69bed898c83fe2328ef38b1ea9da14a599efa14caef0b7d", + "000000002b968fb3b2fc2ff18d6e89611e366b4d38a6d0437e99bd7c37f2fd83", + "000000000301054c038b07b5b51493d5efc3f078e3aede6eb603c47943d1cc78", + "000000000e901278c00c896754a06f8d45d0268c6aff6e72ffb3007d07c10e73", + "000000001bc592f2a8676203835bc6ad442abeadb9c22b8d6a2999db07354b01", + "000000000896c37ef8a32318ee871589394f1578473b8825275b610690e47db0", + "00000000133b192b2319a0716ad18e5788981fff51856f61205af5d6a634ba41", + "0000000004946f3f9f82a298985f73080d62627d51f6f4ba77f3cd8c6788b3d0", + "0000000005cb014d3df9bac0ba379f1d5b8b75f0e6d7c408d43ac1db330ec641", + "0000000006c1653c7ee747f140dd7daa1da23a541e67a0fc0dc88db3482ec4d5" + ], + "llmq_400_60": [ + "0000000007697fd69a799bfa26576a177e817bc0e45b9fcfbf48b362b05aeff2" + ], + "llmq_400_85": [ + ] +} +{% endhighlight %} + +{% endautocrossref %} + +###### Quorum Info + + +{% autocrossref %} + +The `quorum info` RPC returns information about a specific quorum. + +*Parameter #1---LLMQ Type* + +{% itemplate ntpd1 %} +- n: "`llmqType`" + t: "number" + p: "Required
(exactly 1)" + d: "[Type of quorums](https://github.com/dashpay/dips/blob/master/dip-0006.md#current-llmq-types) to list:
`1` - LLMQ_50_60
`2` - LLMQ_400_60
`3` - LLMQ_400_85" +{% enditemplate %} + +*Parameter #2---quorum hash* + +{% itemplate ntpd1 %} +- n: "`quorumHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The block hash of the quorum" +{% enditemplate %} + +*Parameter #3---secret key share* + +{% itemplate ntpd1 %} +- n: "`includeSkShare`" + t: "bool" + p: "Optional
(0 or 1)" + d: "Include the secret key share (default: `false`)" +{% enditemplate %} + +*Result---information about a quorum* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "object" + p: "Required
(exactly 1)" + d: "Quorum list" + +- n: "→
`height`" + t: "number" + p: "Required
(exactly 1)" + d: "Block height of the quorum" + +- n: "→
`quorumHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the quorum" + +- n: "→
`minedBlock`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the block that established the quorum" + +- n: "→
`members`" + t: "array" + p: "Required
(exactly 1)" + d: "An array containing quorum member details" + +- n: "→ →
Member" + t: "object" + p: "Required
(1 or more)" + d: "An object describing a particular member" + +- n: "→ → →
`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The masternode's Provider Registration transaction hash" + +- n: "→ → →
`valid`" + t: "bool" + p: "Required
(exactly 1)" + d: "Indicates if the member is valid" + +- n: "→ → →
`pubKeyShare`" + t: "string" + p: "Optional
(0 or 1)" + d: "Member public key share" + +- n: "→
`quorumPublicKey`" + t: "string" + p: "Required
(exactly 1)" + d: "Quorum public key" + +- n: "→
`secretKeyShare`" + t: "string" + p: "Optional
(exactly 1)" + d: "Quorum secret key share" +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet quorum info 1 \ + 0000000003284177404622ea79491cb19855254627751cfbbb0035a62d17ab6a true +{% endhighlight %} + +Result (truncated): +{% highlight json %} +{ + "height": 76728, + "quorumHash": "0000000003284177404622ea79491cb19855254627751cfbbb0035a62d17ab6a", + "minedBlock": "0000000009d8c183650d12e9ff952967ecfde58404e80db1bf5a7d1a31ccd4ee", + "members": [ + { + "proTxHash": "5eccc0b9a1a2b8a9c3511cae98a664c377e8493c35cdd120e0d71f0b6b0f62c5", + "valid": true, + "pubKeyShare": "04a4ae5cb7f598d1bcc6fa49162fe8c19f6ad763ce3959f5afdc3c00e19d8261af37729ae8a707860ecdea067029d3e9" + }, + { + "proTxHash": "1e17ddf8748ed5e6696255da61922bd3985fd15a33fcb2d051cf84242e89f121", + "valid": true, + "pubKeyShare": "8239b67aff5368e710a8ebe5f1f3e9087e8f9c52ed165293779f40b0e764a20972f2ade9367f41cd4f64a3516ad8c90c" + }, + { + "proTxHash": "f1eb4ac02ab1acbace0a01328e204c4fd7dec5e53a72cccac7729c5802dbeaf4", + "valid": true, + "pubKeyShare": "969655b04484de85b3f1ecce5a9745ec7fd0a34533e13fcf285e15ed034578a604e0e2af98cd12cf89d1cfcc167c978d" + }, + { + "proTxHash": "a288f5de676eb63dee13a618d39bd6b07ad73e9ae40148202fc5b5f32e1b0bfb", + "valid": true, + "pubKeyShare": "047bee41fdce58f8d87ba6820c784f2a096d85d1ceec62520013c7c3ef9de9203b82eadc910b197a906be2cd5fd21c53" + }, + { + "proTxHash": "57795a35a3a127e817704b6b8ce64ac7f6afc49f0d0172c1e4125987c31dd1d7", + "valid": true, + "pubKeyShare": "168b9cb406bc44348b5de18c9017817f4e1b15c304ab8d365ba3828712ab1f64c1e4715715d61a96c5923fbe8c470788" + }, + { + "proTxHash": "04d06d16b3eca2f104ef9749d0c1c17d183eb1b4fe3a16808fd70464f03bcd63", + "valid": true, + "pubKeyShare": "93a85894c04dbc06e9a598126aa8ba9983427a089710c4ff37b9b9f12980780e988f89192b5feaa25f907b8db9efb930" + } + ], + "quorumPublicKey": "18772a3ca86f47795f4e9fa40babe89c7be6bc15bb4e4c8a137715a814a4118516a63b89c5c415b9dfe956f2d6a4fde3", + "secretKeyShare": "3da0d8f532309660f7f44aa0ed42c1569773b39c70f5771ce5604be77e50759e" +} +{% endhighlight %} + +{% endautocrossref %} + + +###### Quorum DKGStatus + + +{% autocrossref %} + +The `quorum list` RPC displays the status of the current DKG process. + +*Parameter #1---detail level* + +{% itemplate ntpd1 %} +- n: "`detail_level`" + t: "number" + p: "Optional
(0 or 1)" + d: "Detail level of output (default: 0):
`0` - Only show counts (_default_)
`1` - Show member indexes
`2` - Show member's ProTxHashes

_Note: Works only when Spork 17 is enabled and only displays details related to the node running the command._" +{% enditemplate %} + +*Result (if detail level was 0 or omitted)---JSON DKG details* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "array" + p: "Required
(exactly 1)" + d: "An array of objects each containing a provider transaction, or JSON `null` if an error occurred" + +- n: "→
`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the initial provider registration transaction as hex in RPC byte order" + +- n: "→
`time`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The Unix epoch time" + +- n: "→
`timeStr`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The UTC time as a string" + +- n: "→
`session`" + t: "object" + p: "Required
(exactly 1)" + d: "Object containing DKG Session information" + +- n: "→ →
LLMQ Type" + t: "object" + p: "Required
(exactly 1)" + d: "Object" + +- n: "→ → →
`llmqType`" + t: "number" + p: "Required
(exactly 1)" + d: "[Type of quorum](https://github.com/dashpay/dips/blob/master/dip-0006.md#current-llmq-types):
`1` - LLMQ_50_60
`2` - LLMQ_400_60
`3` - LLMQ_400_85" + +- n: "→ → →
`quorumHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The block hash of the quorum" + +- n: "→ → →
`quorumHeight`" + t: "number" + p: "Required
(exactly 1)" + d: "The block height of the quorum" + +- n: "→ → →
`phase`" + t: "number" + p: "Required
(exactly 1)" + d: "The active DKG phase
`1` - Initialized
`2` - Contributing
`3` - Complaining
`4` - Justifying
`5` - Committing
`6` - Finalizing" + +- n: "→ → →
`sentContributions`" + t: "bool" + p: "Required
(exactly 1)" + d: "True when contributions have been sent" + +- n: "→ → →
`sentComplaint`" + t: "bool" + p: "Required
(exactly 1)" + d: "True when complaints have been sent" + +- n: "→ → →
`sentJustification`" + t: "bool" + p: "Required
(exactly 1)" + d: "True when justifications have been sent" + +- n: "→ → →
`sentPrematureCommitment`" + t: "bool" + p: "Required
(exactly 1)" + d: "True when premature commitments have been sent" + +- n: "→ → →
`aborted`" + t: "bool" + p: "Required
(exactly 1)" + d: "True if the DKG session has been aborted" + +- n: "→ → →
`badMembers`" + t: "number" + p: "Required
(exactly 1)" + d: "Number of bad members" + +- n: "→ → →
`weComplain`" + t: "number" + p: "Required
(exactly 1)" + d: "Number of complaints sent" + +- n: "→ → →
`receivedContributions`" + t: "number" + p: "Required
(exactly 1)" + d: "Number of contributions received" + +- n: "→ → →
`receivedComplaints`" + t: "number" + p: "Required
(exactly 1)" + d: "Number of complaints received" + +- n: "→ → →
`receivedJustifications`" + t: "number" + p: "Required
(exactly 1)" + d: "Number of justifications received" + +- n: "→ → →
`receivedPrematureCommitments`" + t: "number" + p: "Required
(exactly 1)" + d: "Number of premature commitments received" + +- n: "→
`minableCommitments`" + t: "object" + p: "Required
(exactly 1)" + d: "Object containing minable commitments" +{% enditemplate %} + +*Result (if detail level was 1)---JSON DKG details including member index* + +Note: detail level 1 includes all level 0 fields and expands the following fields. + +{% itemplate ntpd1 %} +- n: "→ → →
`badMembers`" + t: "array" + p: "Required
(exactly 1)" + d: "Array containing the member index for each bad member" + +- n: "→ → →
`weComplain`" + t: "array" + p: "Required
(exactly 1)" + d: "Array containing the member index for each complaint sent" + +- n: "→ → →
`receivedContributions`" + t: "array" + p: "Required
(exactly 1)" + d: "Array containing the member index for each contribution received" + +- n: "→ → →
`receivedComplaints`" + t: "array" + p: "Required
(exactly 1)" + d: "Array containing the member index for each complaint received" + +- n: "→ → →
`receivedJustifications`" + t: "array" + p: "Required
(exactly 1)" + d: "Array containing the member index for each justification received" + +- n: "→ → →
`receivedPrematureCommitments`" + t: "array" + p: "Required
(exactly 1)" + d: "Array containing the member index for each commitment received" +{% enditemplate %} + +*Result (if detail level was 2)---JSON DKG details including member index and ProTx hash* + +Note: detail level 2 includes all level 0 fields, adds the `allMembers` field, and expands several fields. + +{% itemplate ntpd1 %} +- n: "→ → →
`badMembers`" + t: "array" + p: "Required
(exactly 1)" + d: "An array of objects with each object containing the member index and ProTx hash for a bad member" + +- n: "→ → → →
Member" + t: "object" + p: "Required
(0 or more)" + d: "An object describing quorum member details" + +- n: "→ → → → →
`memberIndex`" + t: "number" + p: "Required
(exactly 1)" + d: "The quorum member's index" + +- n: "→ → → → →
`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the quorum member's provider registration transaction as hex in RPC byte order" + +- n: "→ → →
`weComplain`" + t: "object" + p: "Required
(exactly 1)" + d: "An array of objects with each object containing the member index and ProTx hash for a member being complained about" + +- n: "→ → → →
Member" + t: "object" + p: "Required
(0 or more)" + d: "An object describing quorum member details" + +- n: "→ → → → →
`memberIndex`" + t: "number" + p: "Required
(exactly 1)" + d: "The quorum member's index" + +- n: "→ → → → →
`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the quorum member's provider registration transaction as hex in RPC byte order" + +- n: "→ → →
`receivedContributions`" + t: "object" + p: "Required
(exactly 1)" + d: "An array of objects with each object containing the member index and ProTx hash for a member a contribution was received from" + +- n: "→ → → →
Member" + t: "object" + p: "Required
(0 or more)" + d: "An object describing quorum member details" + +- n: "→ → → → →
`memberIndex`" + t: "number" + p: "Required
(exactly 1)" + d: "The quorum member's index" + +- n: "→ → → → →
`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the quorum member's provider registration transaction as hex in RPC byte order" + +- n: "→ → →
`receivedComplaints`" + t: "object" + p: "Required
(exactly 1)" + d: "An array of objects with each object containing the member index and ProTx hash for a member a complaint was received from" + +- n: "→ → → →
Member" + t: "object" + p: "Required
(0 or more)" + d: "An object describing quorum member details" + +- n: "→ → → → →
`memberIndex`" + t: "number" + p: "Required
(exactly 1)" + d: "The quorum member's index" + +- n: "→ → → → →
`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the quorum member's provider registration transaction as hex in RPC byte order" + +- n: "→ → →
`receivedJustifications`" + t: "object" + p: "Required
(exactly 1)" + d: "An array of objects with each object containing the member index and ProTx hash for a member a justification was received from" + +- n: "→ → → →
Member" + t: "object" + p: "Required
(0 or more)" + d: "An object describing quorum member details" + +- n: "→ → → → →
`memberIndex`" + t: "number" + p: "Required
(exactly 1)" + d: "The quorum member's index" + +- n: "→ → → → →
`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the quorum member's provider registration transaction as hex in RPC byte order" + +- n: "→ → →
`receivedPrematureCommitments`" + t: "object" + p: "Required
(exactly 1)" + d: "An array of objects with each object containing the member index and ProTx hash for a member a premature commitment was received from" + +- n: "→ → → →
Member" + t: "object" + p: "Required
(0 or more)" + d: "An object describing quorum member details" + +- n: "→ → → → →
`memberIndex`" + t: "number" + p: "Required
(exactly 1)" + d: "The quorum member's index" + +- n: "→ → → → →
`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the quorum member's provider registration transaction as hex in RPC byte order" + +- n: "→ → →
`allMembers`" + t: "array" + p: "Required
(exactly 1)" + d: "Array containing the provider registration transaction hash for all quorum members" +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet quorum dkgstatus +{% endhighlight %} + +Result: +{% highlight json %} +{ + "proTxHash": "04d06d16b3eca2f104ef9749d0c1c17d183eb1b4fe3a16808fd70464f03bcd63", + "time": 1555172494, + "timeStr": "2019-04-13 16:21:34", + "session": { + "llmq_50_60": { + "llmqType": 1, + "quorumHash": "000000000122768294b19a5f6750094f6e9caa135c0826372d0538d4ceb910bc", + "quorumHeight": 79368, + "phase": 6, + "sentContributions": true, + "sentComplaint": true, + "sentJustification": false, + "sentPrematureCommitment": true, + "aborted": false, + "badMembers": 2, + "weComplain": 0, + "receivedContributions": 48, + "receivedComplaints": 44, + "receivedJustifications": 0, + "receivedPrematureCommitments": 44 + } + }, + "minableCommitments": { + "llmq_50_60": { + "version": 1, + "llmqType": 1, + "quorumHash": "000000000122768294b19a5f6750094f6e9caa135c0826372d0538d4ceb910bc", + "signersCount": 0, + "validMembersCount": 0, + "quorumPublicKey": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } +} +{% endhighlight %} + +{% endautocrossref %} + +*Example from Dash Core 0.14.0 (detail_level: 1)* + +{% highlight bash %} +dash-cli -testnet quorum dkgstatus 1 +{% endhighlight %} + +Result: +{% highlight json %} +{ + "proTxHash": "04d06d16b3eca2f104ef9749d0c1c17d183eb1b4fe3a16808fd70464f03bcd63", + "time": 1555172494, + "timeStr": "2019-04-13 16:21:34", + "session": { + "llmq_50_60": { + "llmqType": 1, + "quorumHash": "000000000122768294b19a5f6750094f6e9caa135c0826372d0538d4ceb910bc", + "quorumHeight": 79368, + "phase": 6, + "sentContributions": true, + "sentComplaint": true, + "sentJustification": false, + "sentPrematureCommitment": true, + "aborted": false, + "badMembers": [ + 35, + 42 + ], + "weComplain": [ + ], + "receivedContributions": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 36, + 37, + 38, + 39, + 40, + 41, + 43, + 44, + 45, + 46, + 47, + 48, + 49 + ], + "receivedComplaints": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 36, + 37, + 38, + 39, + 40, + 41, + 43, + 44, + 45, + 46, + 47, + 48, + 49 + ], + "receivedJustifications": [ + ], + "receivedPrematureCommitments": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 36, + 37, + 38, + 39, + 40, + 41, + 43, + 44, + 45, + 46, + 47, + 48, + 49 + ] + } + }, + "minableCommitments": { + "llmq_50_60": { + "version": 1, + "llmqType": 1, + "quorumHash": "000000000122768294b19a5f6750094f6e9caa135c0826372d0538d4ceb910bc", + "signersCount": 0, + "validMembersCount": 0, + "quorumPublicKey": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } +} +{% endhighlight %} + +*Example from Dash Core 0.14.0 (detail_level: 2)* + +{% highlight bash %} +dash-cli -testnet quorum dkgstatus 2 +{% endhighlight %} + +Result: +{% highlight json %} +{ + "proTxHash": "04d06d16b3eca2f104ef9749d0c1c17d183eb1b4fe3a16808fd70464f03bcd63", + "time": 1555172494, + "timeStr": "2019-04-13 16:21:34", + "session": { + "llmq_50_60": { + "llmqType": 1, + "quorumHash": "000000000122768294b19a5f6750094f6e9caa135c0826372d0538d4ceb910bc", + "quorumHeight": 79368, + "phase": 6, + "sentContributions": true, + "sentComplaint": true, + "sentJustification": false, + "sentPrematureCommitment": true, + "aborted": false, + "badMembers": [ + { + "memberIndex": 35, + "proTxHash": "c24aea30305d539887223fd923df775644b1d86db0aac8c654026e823b549cd7" + }, + { + "memberIndex": 42, + "proTxHash": "f0567069d4f2a2e536e46173a097b318daf03edef989f6875ca06f5c4d49abc9" + } + ], + "weComplain": [ + ], + "receivedContributions": [ + { + "memberIndex": 0, + "proTxHash": "a6670caf2842a4ae5cb4bb78b3c10343456922b500693f6da043af541d58d9cb" + }, + { + "memberIndex": 1, + "proTxHash": "77c0615fb5eb946f7f731a44eb36dc37ee77bf959e7205937d88186cacfbdc7e" + }, + { + "memberIndex": 2, + "proTxHash": "8070c631ce9ac8850d2e95d4ed7be70171ead22ccd7f4bc9c3aee0a227f323c9" + }, + { + "memberIndex": 3, + "proTxHash": "596be0851532a66037744afa694e4de6485f326f4638e704db93cc726866cda3" + }, + { + "memberIndex": 4, + "proTxHash": "51c11d287dfa85aef3eebb5420834c8e443e01d15c0b0a8e397d67e2e51aa239" + }, + { + "memberIndex": 5, + "proTxHash": "9f4f9f83ecbcd5739d7f1479ee14b508f2414d044a717acba0960566c4e6091d" + }, + { + "memberIndex": 6, + "proTxHash": "21c0923badd20f953360c586edfcbb1a830be83206e30b3f65765f7794f2a640" + }, + { + "memberIndex": 7, + "proTxHash": "cc36055f36345b85a2b8176e79feff0ff822c490691c7f8e8d3348b4b1a1d8ac" + }, + { + "memberIndex": 8, + "proTxHash": "4636ed7acbacbc76aba60aa7a1011688fe9ad5fd701d0bf8fc42a502ea3e6543" + }, + { + "memberIndex": 9, + "proTxHash": "32e5ad5cf9a06eb13e0f65cb7ecde1a93ef24995d07355fac2ff05ebd5b9ddbf" + }, + { + "memberIndex": 10, + "proTxHash": "0022afbe93054ca11ce9b67892661af4558597bacff0ab82bff05a2b4a89ca2d" + }, + { + "memberIndex": 11, + "proTxHash": "2523dc6e034911b9004862e87b4d23a32ed6198aec177915df7893f51cd645bd" + }, + { + "memberIndex": 12, + "proTxHash": "abe5d16432915b201cf6f11299a1abd62e5f69a2c4e8717694d1e42d96dbd580" + }, + { + "memberIndex": 13, + "proTxHash": "f443dd87ec7981e8630ae957f295d9d226d4bd3895f59dbd80b30137a92b3735" + }, + { + "memberIndex": 14, + "proTxHash": "6a5be5c068a0be432b7db0772b25094a59ce1f433dd2df0d410511ac641c3768" + }, + { + "memberIndex": 15, + "proTxHash": "84435c41688c8021a25a644e6b94c9f5159aff5658ee2e12f5cea5c714c21aa3" + }, + { + "memberIndex": 16, + "proTxHash": "2db238aa40837319ca13e27aae4333d1248475546be6cfad985a3785c0ac9bd6" + }, + { + "memberIndex": 17, + "proTxHash": "cefb7c69f75d9fbba21f648c6205bebf9b16325956404c70af03144c1135c7d7" + }, + { + "memberIndex": 18, + "proTxHash": "cc7041c869c7c1c0bae7c137f0cda708ad492bc89c4b8f7a40a353d90335febf" + }, + { + "memberIndex": 19, + "proTxHash": "24e642275f5d5f17f67db502d905153cfd83ffbd3d49c90196ec01200917fb31" + }, + { + "memberIndex": 20, + "proTxHash": "bc5c77926b0ccfcb742123a1edf2c27147888f694701df399982a862309921c8" + }, + { + "memberIndex": 21, + "proTxHash": "04d06d16b3eca2f104ef9749d0c1c17d183eb1b4fe3a16808fd70464f03bcd63" + }, + { + "memberIndex": 22, + "proTxHash": "11eabc1e72394af02bbe86815975d054816fe69006fdc64c6d7a06b585e5c311" + }, + { + "memberIndex": 23, + "proTxHash": "71cf5017c4c5f69db5c17a8cfb4c28ffc14ad1715dba2a83f0c30e534291f828" + }, + { + "memberIndex": 24, + "proTxHash": "d567ac9cc7437848210365a0225271ec26a6a6c7d852544a6e9cbd40756075b3" + }, + { + "memberIndex": 25, + "proTxHash": "16ef804605595f67a0e078f7ffbdd93ac55bcd22d9094cb8b61ef527c48f4c44" + }, + { + "memberIndex": 26, + "proTxHash": "f51b426420ac4c518ad07c2bb03e434389337b4e2977d39233114d5e8ef21f69" + }, + { + "memberIndex": 27, + "proTxHash": "2460848868c210d23c68460050f83f47a7ad00db2c47ad6f223a9b1eb04c8d54" + }, + { + "memberIndex": 28, + "proTxHash": "49d94e4c584929320cfe159faf4f6e398f1b2d1fdaa413c01345ce23870d2ca9" + }, + { + "memberIndex": 29, + "proTxHash": "e8b039ce3f1016b7caf781d1b0efbc11191860ec3b131fc49591402a260ba638" + }, + { + "memberIndex": 30, + "proTxHash": "5ab82a5348b5d4c126b0c172665d364352be37c96ce442e710d4a844a6f80bf9" + }, + { + "memberIndex": 31, + "proTxHash": "05b83104eea971582c803ded305109ecb734b582da93b8e301c6f00d6be6c496" + }, + { + "memberIndex": 32, + "proTxHash": "c98c6303af03f7f3b2673ceece962134088e5dcc3c69a0977069c6201b26dc9b" + }, + { + "memberIndex": 33, + "proTxHash": "f933d592d677f3409274646ddea2ffaaca77dfd4ceab7c54037a04e05fc7ee8b" + }, + { + "memberIndex": 34, + "proTxHash": "5d40e68f65e7263d91e114b644ff7f8c9c376db63550d5ef9bc4228870c4f053" + }, + { + "memberIndex": 36, + "proTxHash": "a36edfac56f7f1b0f58aa793115fbd53d792315857033fb32a862507a3f060ff" + }, + { + "memberIndex": 37, + "proTxHash": "c9d43a69bd9effdaed579edc901c5d848711481047c9cc76bad8232d8f329dcd" + }, + { + "memberIndex": 38, + "proTxHash": "d82152084615c73d79f3eb8b0ec6a61e6d0f94c4cdcf26f773f0e42b72176f6f" + }, + { + "memberIndex": 39, + "proTxHash": "869f7f2054a6ed4241967afb74c3b1a07701d2772b368eb0bbfd2e3365adf6f3" + }, + { + "memberIndex": 40, + "proTxHash": "5f1a70a350d21f673d93fae45a50c0362947366e46c96bade51b7933f0cada3e" + }, + { + "memberIndex": 41, + "proTxHash": "024608d03beb6a6065f14a29a837c68ae449ac1e17056819366ca0b72b6dd81f" + }, + { + "memberIndex": 43, + "proTxHash": "254bcd3b28d696ce9d468cd521e6be3f7eb01da32d8bf9fdf34868baaf09d9e7" + }, + { + "memberIndex": 44, + "proTxHash": "0ae626ed4ee06c1f042b2eaa9669302a2e60a0df8137843b39de53f2c3e265aa" + }, + { + "memberIndex": 45, + "proTxHash": "cfa6f7b58c78f827c15e8f1b6a5a2a3a92140101719006d8226a363e2c0c8e5c" + }, + { + "memberIndex": 46, + "proTxHash": "03811a53a20289799f56227f576915492d2cede48522cd1b3f67c6c89cdacf83" + }, + { + "memberIndex": 47, + "proTxHash": "f989866b2fadb674a1ca63746ff8bb97232d6843c95f9e805b8bc2a5ae8e768d" + }, + { + "memberIndex": 48, + "proTxHash": "9de76b8291d00026ab0af86306023c7b90f8e9229dc04916fe1335bf5e11f15d" + }, + { + "memberIndex": 49, + "proTxHash": "e441bbb2f056d471ae9fad83b4dd0fa691a0574eb4a373a0e59d6108614ee07e" + } + ], + "receivedComplaints": [ + { + "memberIndex": 0, + "proTxHash": "a6670caf2842a4ae5cb4bb78b3c10343456922b500693f6da043af541d58d9cb" + }, + { + "memberIndex": 1, + "proTxHash": "77c0615fb5eb946f7f731a44eb36dc37ee77bf959e7205937d88186cacfbdc7e" + }, + { + "memberIndex": 2, + "proTxHash": "8070c631ce9ac8850d2e95d4ed7be70171ead22ccd7f4bc9c3aee0a227f323c9" + }, + { + "memberIndex": 3, + "proTxHash": "596be0851532a66037744afa694e4de6485f326f4638e704db93cc726866cda3" + }, + { + "memberIndex": 4, + "proTxHash": "51c11d287dfa85aef3eebb5420834c8e443e01d15c0b0a8e397d67e2e51aa239" + }, + { + "memberIndex": 5, + "proTxHash": "9f4f9f83ecbcd5739d7f1479ee14b508f2414d044a717acba0960566c4e6091d" + }, + { + "memberIndex": 6, + "proTxHash": "21c0923badd20f953360c586edfcbb1a830be83206e30b3f65765f7794f2a640" + }, + { + "memberIndex": 7, + "proTxHash": "cc36055f36345b85a2b8176e79feff0ff822c490691c7f8e8d3348b4b1a1d8ac" + }, + { + "memberIndex": 8, + "proTxHash": "4636ed7acbacbc76aba60aa7a1011688fe9ad5fd701d0bf8fc42a502ea3e6543" + }, + { + "memberIndex": 9, + "proTxHash": "32e5ad5cf9a06eb13e0f65cb7ecde1a93ef24995d07355fac2ff05ebd5b9ddbf" + }, + { + "memberIndex": 10, + "proTxHash": "0022afbe93054ca11ce9b67892661af4558597bacff0ab82bff05a2b4a89ca2d" + }, + { + "memberIndex": 11, + "proTxHash": "2523dc6e034911b9004862e87b4d23a32ed6198aec177915df7893f51cd645bd" + }, + { + "memberIndex": 12, + "proTxHash": "abe5d16432915b201cf6f11299a1abd62e5f69a2c4e8717694d1e42d96dbd580" + }, + { + "memberIndex": 14, + "proTxHash": "6a5be5c068a0be432b7db0772b25094a59ce1f433dd2df0d410511ac641c3768" + }, + { + "memberIndex": 15, + "proTxHash": "84435c41688c8021a25a644e6b94c9f5159aff5658ee2e12f5cea5c714c21aa3" + }, + { + "memberIndex": 16, + "proTxHash": "2db238aa40837319ca13e27aae4333d1248475546be6cfad985a3785c0ac9bd6" + }, + { + "memberIndex": 17, + "proTxHash": "cefb7c69f75d9fbba21f648c6205bebf9b16325956404c70af03144c1135c7d7" + }, + { + "memberIndex": 18, + "proTxHash": "cc7041c869c7c1c0bae7c137f0cda708ad492bc89c4b8f7a40a353d90335febf" + }, + { + "memberIndex": 19, + "proTxHash": "24e642275f5d5f17f67db502d905153cfd83ffbd3d49c90196ec01200917fb31" + }, + { + "memberIndex": 20, + "proTxHash": "bc5c77926b0ccfcb742123a1edf2c27147888f694701df399982a862309921c8" + }, + { + "memberIndex": 21, + "proTxHash": "04d06d16b3eca2f104ef9749d0c1c17d183eb1b4fe3a16808fd70464f03bcd63" + }, + { + "memberIndex": 24, + "proTxHash": "d567ac9cc7437848210365a0225271ec26a6a6c7d852544a6e9cbd40756075b3" + }, + { + "memberIndex": 25, + "proTxHash": "16ef804605595f67a0e078f7ffbdd93ac55bcd22d9094cb8b61ef527c48f4c44" + }, + { + "memberIndex": 26, + "proTxHash": "f51b426420ac4c518ad07c2bb03e434389337b4e2977d39233114d5e8ef21f69" + }, + { + "memberIndex": 27, + "proTxHash": "2460848868c210d23c68460050f83f47a7ad00db2c47ad6f223a9b1eb04c8d54" + }, + { + "memberIndex": 28, + "proTxHash": "49d94e4c584929320cfe159faf4f6e398f1b2d1fdaa413c01345ce23870d2ca9" + }, + { + "memberIndex": 29, + "proTxHash": "e8b039ce3f1016b7caf781d1b0efbc11191860ec3b131fc49591402a260ba638" + }, + { + "memberIndex": 30, + "proTxHash": "5ab82a5348b5d4c126b0c172665d364352be37c96ce442e710d4a844a6f80bf9" + }, + { + "memberIndex": 31, + "proTxHash": "05b83104eea971582c803ded305109ecb734b582da93b8e301c6f00d6be6c496" + }, + { + "memberIndex": 33, + "proTxHash": "f933d592d677f3409274646ddea2ffaaca77dfd4ceab7c54037a04e05fc7ee8b" + }, + { + "memberIndex": 34, + "proTxHash": "5d40e68f65e7263d91e114b644ff7f8c9c376db63550d5ef9bc4228870c4f053" + }, + { + "memberIndex": 36, + "proTxHash": "a36edfac56f7f1b0f58aa793115fbd53d792315857033fb32a862507a3f060ff" + }, + { + "memberIndex": 37, + "proTxHash": "c9d43a69bd9effdaed579edc901c5d848711481047c9cc76bad8232d8f329dcd" + }, + { + "memberIndex": 38, + "proTxHash": "d82152084615c73d79f3eb8b0ec6a61e6d0f94c4cdcf26f773f0e42b72176f6f" + }, + { + "memberIndex": 39, + "proTxHash": "869f7f2054a6ed4241967afb74c3b1a07701d2772b368eb0bbfd2e3365adf6f3" + }, + { + "memberIndex": 40, + "proTxHash": "5f1a70a350d21f673d93fae45a50c0362947366e46c96bade51b7933f0cada3e" + }, + { + "memberIndex": 41, + "proTxHash": "024608d03beb6a6065f14a29a837c68ae449ac1e17056819366ca0b72b6dd81f" + }, + { + "memberIndex": 43, + "proTxHash": "254bcd3b28d696ce9d468cd521e6be3f7eb01da32d8bf9fdf34868baaf09d9e7" + }, + { + "memberIndex": 44, + "proTxHash": "0ae626ed4ee06c1f042b2eaa9669302a2e60a0df8137843b39de53f2c3e265aa" + }, + { + "memberIndex": 45, + "proTxHash": "cfa6f7b58c78f827c15e8f1b6a5a2a3a92140101719006d8226a363e2c0c8e5c" + }, + { + "memberIndex": 46, + "proTxHash": "03811a53a20289799f56227f576915492d2cede48522cd1b3f67c6c89cdacf83" + }, + { + "memberIndex": 47, + "proTxHash": "f989866b2fadb674a1ca63746ff8bb97232d6843c95f9e805b8bc2a5ae8e768d" + }, + { + "memberIndex": 48, + "proTxHash": "9de76b8291d00026ab0af86306023c7b90f8e9229dc04916fe1335bf5e11f15d" + }, + { + "memberIndex": 49, + "proTxHash": "e441bbb2f056d471ae9fad83b4dd0fa691a0574eb4a373a0e59d6108614ee07e" + } + ], + "receivedJustifications": [ + ], + "receivedPrematureCommitments": [ + { + "memberIndex": 0, + "proTxHash": "a6670caf2842a4ae5cb4bb78b3c10343456922b500693f6da043af541d58d9cb" + }, + { + "memberIndex": 1, + "proTxHash": "77c0615fb5eb946f7f731a44eb36dc37ee77bf959e7205937d88186cacfbdc7e" + }, + { + "memberIndex": 2, + "proTxHash": "8070c631ce9ac8850d2e95d4ed7be70171ead22ccd7f4bc9c3aee0a227f323c9" + }, + { + "memberIndex": 3, + "proTxHash": "596be0851532a66037744afa694e4de6485f326f4638e704db93cc726866cda3" + }, + { + "memberIndex": 4, + "proTxHash": "51c11d287dfa85aef3eebb5420834c8e443e01d15c0b0a8e397d67e2e51aa239" + }, + { + "memberIndex": 5, + "proTxHash": "9f4f9f83ecbcd5739d7f1479ee14b508f2414d044a717acba0960566c4e6091d" + }, + { + "memberIndex": 6, + "proTxHash": "21c0923badd20f953360c586edfcbb1a830be83206e30b3f65765f7794f2a640" + }, + { + "memberIndex": 7, + "proTxHash": "cc36055f36345b85a2b8176e79feff0ff822c490691c7f8e8d3348b4b1a1d8ac" + }, + { + "memberIndex": 8, + "proTxHash": "4636ed7acbacbc76aba60aa7a1011688fe9ad5fd701d0bf8fc42a502ea3e6543" + }, + { + "memberIndex": 9, + "proTxHash": "32e5ad5cf9a06eb13e0f65cb7ecde1a93ef24995d07355fac2ff05ebd5b9ddbf" + }, + { + "memberIndex": 10, + "proTxHash": "0022afbe93054ca11ce9b67892661af4558597bacff0ab82bff05a2b4a89ca2d" + }, + { + "memberIndex": 11, + "proTxHash": "2523dc6e034911b9004862e87b4d23a32ed6198aec177915df7893f51cd645bd" + }, + { + "memberIndex": 12, + "proTxHash": "abe5d16432915b201cf6f11299a1abd62e5f69a2c4e8717694d1e42d96dbd580" + }, + { + "memberIndex": 14, + "proTxHash": "6a5be5c068a0be432b7db0772b25094a59ce1f433dd2df0d410511ac641c3768" + }, + { + "memberIndex": 15, + "proTxHash": "84435c41688c8021a25a644e6b94c9f5159aff5658ee2e12f5cea5c714c21aa3" + }, + { + "memberIndex": 16, + "proTxHash": "2db238aa40837319ca13e27aae4333d1248475546be6cfad985a3785c0ac9bd6" + }, + { + "memberIndex": 17, + "proTxHash": "cefb7c69f75d9fbba21f648c6205bebf9b16325956404c70af03144c1135c7d7" + }, + { + "memberIndex": 18, + "proTxHash": "cc7041c869c7c1c0bae7c137f0cda708ad492bc89c4b8f7a40a353d90335febf" + }, + { + "memberIndex": 19, + "proTxHash": "24e642275f5d5f17f67db502d905153cfd83ffbd3d49c90196ec01200917fb31" + }, + { + "memberIndex": 20, + "proTxHash": "bc5c77926b0ccfcb742123a1edf2c27147888f694701df399982a862309921c8" + }, + { + "memberIndex": 21, + "proTxHash": "04d06d16b3eca2f104ef9749d0c1c17d183eb1b4fe3a16808fd70464f03bcd63" + }, + { + "memberIndex": 24, + "proTxHash": "d567ac9cc7437848210365a0225271ec26a6a6c7d852544a6e9cbd40756075b3" + }, + { + "memberIndex": 25, + "proTxHash": "16ef804605595f67a0e078f7ffbdd93ac55bcd22d9094cb8b61ef527c48f4c44" + }, + { + "memberIndex": 26, + "proTxHash": "f51b426420ac4c518ad07c2bb03e434389337b4e2977d39233114d5e8ef21f69" + }, + { + "memberIndex": 27, + "proTxHash": "2460848868c210d23c68460050f83f47a7ad00db2c47ad6f223a9b1eb04c8d54" + }, + { + "memberIndex": 28, + "proTxHash": "49d94e4c584929320cfe159faf4f6e398f1b2d1fdaa413c01345ce23870d2ca9" + }, + { + "memberIndex": 29, + "proTxHash": "e8b039ce3f1016b7caf781d1b0efbc11191860ec3b131fc49591402a260ba638" + }, + { + "memberIndex": 30, + "proTxHash": "5ab82a5348b5d4c126b0c172665d364352be37c96ce442e710d4a844a6f80bf9" + }, + { + "memberIndex": 31, + "proTxHash": "05b83104eea971582c803ded305109ecb734b582da93b8e301c6f00d6be6c496" + }, + { + "memberIndex": 33, + "proTxHash": "f933d592d677f3409274646ddea2ffaaca77dfd4ceab7c54037a04e05fc7ee8b" + }, + { + "memberIndex": 34, + "proTxHash": "5d40e68f65e7263d91e114b644ff7f8c9c376db63550d5ef9bc4228870c4f053" + }, + { + "memberIndex": 36, + "proTxHash": "a36edfac56f7f1b0f58aa793115fbd53d792315857033fb32a862507a3f060ff" + }, + { + "memberIndex": 37, + "proTxHash": "c9d43a69bd9effdaed579edc901c5d848711481047c9cc76bad8232d8f329dcd" + }, + { + "memberIndex": 38, + "proTxHash": "d82152084615c73d79f3eb8b0ec6a61e6d0f94c4cdcf26f773f0e42b72176f6f" + }, + { + "memberIndex": 39, + "proTxHash": "869f7f2054a6ed4241967afb74c3b1a07701d2772b368eb0bbfd2e3365adf6f3" + }, + { + "memberIndex": 40, + "proTxHash": "5f1a70a350d21f673d93fae45a50c0362947366e46c96bade51b7933f0cada3e" + }, + { + "memberIndex": 41, + "proTxHash": "024608d03beb6a6065f14a29a837c68ae449ac1e17056819366ca0b72b6dd81f" + }, + { + "memberIndex": 43, + "proTxHash": "254bcd3b28d696ce9d468cd521e6be3f7eb01da32d8bf9fdf34868baaf09d9e7" + }, + { + "memberIndex": 44, + "proTxHash": "0ae626ed4ee06c1f042b2eaa9669302a2e60a0df8137843b39de53f2c3e265aa" + }, + { + "memberIndex": 45, + "proTxHash": "cfa6f7b58c78f827c15e8f1b6a5a2a3a92140101719006d8226a363e2c0c8e5c" + }, + { + "memberIndex": 46, + "proTxHash": "03811a53a20289799f56227f576915492d2cede48522cd1b3f67c6c89cdacf83" + }, + { + "memberIndex": 47, + "proTxHash": "f989866b2fadb674a1ca63746ff8bb97232d6843c95f9e805b8bc2a5ae8e768d" + }, + { + "memberIndex": 48, + "proTxHash": "9de76b8291d00026ab0af86306023c7b90f8e9229dc04916fe1335bf5e11f15d" + }, + { + "memberIndex": 49, + "proTxHash": "e441bbb2f056d471ae9fad83b4dd0fa691a0574eb4a373a0e59d6108614ee07e" + } + ], + "allMembers": [ + "a6670caf2842a4ae5cb4bb78b3c10343456922b500693f6da043af541d58d9cb", + "77c0615fb5eb946f7f731a44eb36dc37ee77bf959e7205937d88186cacfbdc7e", + "8070c631ce9ac8850d2e95d4ed7be70171ead22ccd7f4bc9c3aee0a227f323c9", + "596be0851532a66037744afa694e4de6485f326f4638e704db93cc726866cda3", + "51c11d287dfa85aef3eebb5420834c8e443e01d15c0b0a8e397d67e2e51aa239", + "9f4f9f83ecbcd5739d7f1479ee14b508f2414d044a717acba0960566c4e6091d", + "21c0923badd20f953360c586edfcbb1a830be83206e30b3f65765f7794f2a640", + "cc36055f36345b85a2b8176e79feff0ff822c490691c7f8e8d3348b4b1a1d8ac", + "4636ed7acbacbc76aba60aa7a1011688fe9ad5fd701d0bf8fc42a502ea3e6543", + "32e5ad5cf9a06eb13e0f65cb7ecde1a93ef24995d07355fac2ff05ebd5b9ddbf", + "0022afbe93054ca11ce9b67892661af4558597bacff0ab82bff05a2b4a89ca2d", + "2523dc6e034911b9004862e87b4d23a32ed6198aec177915df7893f51cd645bd", + "abe5d16432915b201cf6f11299a1abd62e5f69a2c4e8717694d1e42d96dbd580", + "f443dd87ec7981e8630ae957f295d9d226d4bd3895f59dbd80b30137a92b3735", + "6a5be5c068a0be432b7db0772b25094a59ce1f433dd2df0d410511ac641c3768", + "84435c41688c8021a25a644e6b94c9f5159aff5658ee2e12f5cea5c714c21aa3", + "2db238aa40837319ca13e27aae4333d1248475546be6cfad985a3785c0ac9bd6", + "cefb7c69f75d9fbba21f648c6205bebf9b16325956404c70af03144c1135c7d7", + "cc7041c869c7c1c0bae7c137f0cda708ad492bc89c4b8f7a40a353d90335febf", + "24e642275f5d5f17f67db502d905153cfd83ffbd3d49c90196ec01200917fb31", + "bc5c77926b0ccfcb742123a1edf2c27147888f694701df399982a862309921c8", + "04d06d16b3eca2f104ef9749d0c1c17d183eb1b4fe3a16808fd70464f03bcd63", + "11eabc1e72394af02bbe86815975d054816fe69006fdc64c6d7a06b585e5c311", + "71cf5017c4c5f69db5c17a8cfb4c28ffc14ad1715dba2a83f0c30e534291f828", + "d567ac9cc7437848210365a0225271ec26a6a6c7d852544a6e9cbd40756075b3", + "16ef804605595f67a0e078f7ffbdd93ac55bcd22d9094cb8b61ef527c48f4c44", + "f51b426420ac4c518ad07c2bb03e434389337b4e2977d39233114d5e8ef21f69", + "2460848868c210d23c68460050f83f47a7ad00db2c47ad6f223a9b1eb04c8d54", + "49d94e4c584929320cfe159faf4f6e398f1b2d1fdaa413c01345ce23870d2ca9", + "e8b039ce3f1016b7caf781d1b0efbc11191860ec3b131fc49591402a260ba638", + "5ab82a5348b5d4c126b0c172665d364352be37c96ce442e710d4a844a6f80bf9", + "05b83104eea971582c803ded305109ecb734b582da93b8e301c6f00d6be6c496", + "c98c6303af03f7f3b2673ceece962134088e5dcc3c69a0977069c6201b26dc9b", + "f933d592d677f3409274646ddea2ffaaca77dfd4ceab7c54037a04e05fc7ee8b", + "5d40e68f65e7263d91e114b644ff7f8c9c376db63550d5ef9bc4228870c4f053", + "c24aea30305d539887223fd923df775644b1d86db0aac8c654026e823b549cd7", + "a36edfac56f7f1b0f58aa793115fbd53d792315857033fb32a862507a3f060ff", + "c9d43a69bd9effdaed579edc901c5d848711481047c9cc76bad8232d8f329dcd", + "d82152084615c73d79f3eb8b0ec6a61e6d0f94c4cdcf26f773f0e42b72176f6f", + "869f7f2054a6ed4241967afb74c3b1a07701d2772b368eb0bbfd2e3365adf6f3", + "5f1a70a350d21f673d93fae45a50c0362947366e46c96bade51b7933f0cada3e", + "024608d03beb6a6065f14a29a837c68ae449ac1e17056819366ca0b72b6dd81f", + "f0567069d4f2a2e536e46173a097b318daf03edef989f6875ca06f5c4d49abc9", + "254bcd3b28d696ce9d468cd521e6be3f7eb01da32d8bf9fdf34868baaf09d9e7", + "0ae626ed4ee06c1f042b2eaa9669302a2e60a0df8137843b39de53f2c3e265aa", + "cfa6f7b58c78f827c15e8f1b6a5a2a3a92140101719006d8226a363e2c0c8e5c", + "03811a53a20289799f56227f576915492d2cede48522cd1b3f67c6c89cdacf83", + "f989866b2fadb674a1ca63746ff8bb97232d6843c95f9e805b8bc2a5ae8e768d", + "9de76b8291d00026ab0af86306023c7b90f8e9229dc04916fe1335bf5e11f15d", + "e441bbb2f056d471ae9fad83b4dd0fa691a0574eb4a373a0e59d6108614ee07e" + ] + } + }, + "minableCommitments": { + "llmq_50_60": { + "version": 1, + "llmqType": 1, + "quorumHash": "000000000122768294b19a5f6750094f6e9caa135c0826372d0538d4ceb910bc", + "signersCount": 0, + "validMembersCount": 0, + "quorumPublicKey": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + } +} +{% endhighlight %} + +###### Quorum Sign + + +{% autocrossref %} + +The `quorum sign` RPC requests threshold-signing for a message. + +![Warning icon](/img/icons/icon_warning.svg) Note: Used for RegTest testing only. + +*Parameter #1---LLMQ Type* + +{% itemplate ntpd1 %} +- n: "`llmqType`" + t: "number" + p: "Required
(exactly 1)" + d: "[Type of quorum](https://github.com/dashpay/dips/blob/master/dip-0006.md#current-llmq-types):
`1` - LLMQ_50_60
`2` - LLMQ_400_60
`3` - LLMQ_400_85" +{% enditemplate %} + +*Parameter #2---id* + +{% itemplate ntpd1 %} +- n: "`id`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Signing request ID" +{% enditemplate %} + +*Parameter #3---message hash* + +{% itemplate ntpd1 %} +- n: "`msgHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Hash of the message to be signed" +{% enditemplate %} + +*Result---status* + +{% itemplate ntpd1 %} +- n: "result" + t: "bool" + p: "Required
(exactly 1)" + d: "True or false depending on success" + +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet quorum sign 1 \ + "abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234" \ + "51c11d287dfa85aef3eebb5420834c8e443e01d15c0b0a8e397d67e2e51aa239" +{% endhighlight %} + +Result: +{% highlight json %} +false +{% endhighlight %} + +{% endautocrossref %} + +###### Quorum GetRecSig + + +{% autocrossref %} + +The `quorum getrecsig` RPC checks gets the recovered signature for a previous threshold-signing message request. + +*Parameter #1---LLMQ Type* + +{% itemplate ntpd1 %} +- n: "`llmqType`" + t: "number" + p: "Required
(exactly 1)" + d: "[Type of quorum](https://github.com/dashpay/dips/blob/master/dip-0006.md#current-llmq-types):
`1` - LLMQ_50_60
`2` - LLMQ_400_60
`3` - LLMQ_400_85" +{% enditemplate %} + +*Parameter #2---id* + +{% itemplate ntpd1 %} +- n: "`id`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Signing request ID" +{% enditemplate %} + +*Parameter #3---message hash* + +{% itemplate ntpd1 %} +- n: "`msgHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Hash of the message to be signed" +{% enditemplate %} + +*Result---recovered signature* + +{% itemplate ntpd1 %} +- n: "result" + t: "bool" + p: "Required
(exactly 1)" + d: "Recovered signature details" + +- n: "→
`llmqType`" + t: "number" + p: "Required
(exactly 1)" + d: "[Type of quorum](https://github.com/dashpay/dips/blob/master/dip-0006.md#current-llmq-types):
`1` - LLMQ_50_60
`2` - LLMQ_400_60
`3` - LLMQ_400_85" + +- n: "→
`quorumHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The block hash of the quorum" + +- n: "→
`id`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The signing session ID" + +- n: "→
`msgHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The message hash" + +- n: "→
`sig`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The recovered signature" + +- n: "→
`hash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the recovered signature" +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet quorum getrecsig 1 \ + "e980ebf295b42f24b03321ffb255818753b2b211e8c46b61c0b6fde91242d12f" \ + "907087d4720850e639b7b5cc41d7a6d020e5a50debb3bc3974f0cb3d7d378ea4" +{% endhighlight %} + +Result: +{% highlight json %} +{ + "llmqType": 1, + "quorumHash": "00000000008344da08e4d262773ea545472fbf625f78b3ebfe5fc067c33b1d22", + "id": "e980ebf295b42f24b03321ffb255818753b2b211e8c46b61c0b6fde91242d12f", + "msgHash": "907087d4720850e639b7b5cc41d7a6d020e5a50debb3bc3974f0cb3d7d378ea4", + "sig": "1365171c408d686af2ca8f5fae91cdf9cf0b5eec60b0b161b9288a1c68e2cd68f225495a787415c924c5953a6282d131178aa6baf4c2673d19549fc627740cf71d295f8a38b9970525a7f248d54a548e16da285b5c1f3ec0740ad40edbcc8615", + "hash": "d9b7f7904746fbb3eeaeec36fadc79b351f6a854cd22ee9e607592aee972fcb2" +} +{% endhighlight %} + +{% endautocrossref %} + +###### Quorum HasRecSig + + +{% autocrossref %} + +The `quorum hasrecsig` RPC checks for a recovered signature for a previous threshold-signing message request. + +![Warning icon](/img/icons/icon_warning.svg) Note: Used for RegTest testing only. + +*Parameter #1---LLMQ Type* + +{% itemplate ntpd1 %} +- n: "`llmqType`" + t: "number" + p: "Required
(exactly 1)" + d: "[Type of quorum](https://github.com/dashpay/dips/blob/master/dip-0006.md#current-llmq-types):
`1` - LLMQ_50_60
`2` - LLMQ_400_60
`3` - LLMQ_400_85" +{% enditemplate %} + +*Parameter #2---id* + +{% itemplate ntpd1 %} +- n: "`id`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Signing request ID" +{% enditemplate %} + +*Parameter #3---message hash* + +{% itemplate ntpd1 %} +- n: "`msgHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Hash of the message to be signed" +{% enditemplate %} + +*Result---status* + +{% itemplate ntpd1 %} +- n: "result" + t: "bool" + p: "Required
(exactly 1)" + d: "True or false depending on success" + +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet quorum hasrecsig 1 \ + "e980ebf295b42f24b03321ffb255818753b2b211e8c46b61c0b6fde91242d12f" \ + "907087d4720850e639b7b5cc41d7a6d020e5a50debb3bc3974f0cb3d7d378ea4" +{% endhighlight %} + +Result: +{% highlight json %} +true +{% endhighlight %} + +{% endautocrossref %} + +###### Quorum IsConflicting + + +{% autocrossref %} + +The `quorum isconflicting` RPC checks if there is a conflict for a threshold-signing message request. + +![Warning icon](/img/icons/icon_warning.svg) Note: Used for RegTest testing only. + +*Parameter #1---LLMQ Type* + +{% itemplate ntpd1 %} +- n: "`llmqType`" + t: "number" + p: "Required
(exactly 1)" + d: "[Type of quorum](https://github.com/dashpay/dips/blob/master/dip-0006.md#current-llmq-types):
`1` - LLMQ_50_60
`2` - LLMQ_400_60
`3` - LLMQ_400_85" +{% enditemplate %} + +*Parameter #2---id* + +{% itemplate ntpd1 %} +- n: "`id`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Signing request ID" +{% enditemplate %} + +*Parameter #3---message hash* + +{% itemplate ntpd1 %} +- n: "`msgHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Hash of the message to be signed" +{% enditemplate %} + +*Result---status* + +{% itemplate ntpd1 %} +- n: "result" + t: "bool" + p: "Required
(exactly 1)" + d: "True or false depending on success" + +{% enditemplate %} + +*Example from Dash Core 0.14.0* + +{% highlight bash %} +dash-cli -testnet quorum isconflicting 1 \ + "e980ebf295b42f24b03321ffb255818753b2b211e8c46b61c0b6fde91242d12f" \ + "907087d4720850e639b7b5cc41d7a6d020e5a50debb3bc3974f0cb3d7d378ea4" +{% endhighlight %} + +Result: +{% highlight json %} +false +{% endhighlight %} + +{% endautocrossref %} + + +###### Quorum MemberOf + + +{% autocrossref %} + +The `quorum` RPC checks which quorums the given masternode is a member of. + +*Parameter #1---proTxHash* + +{% itemplate ntpd1 %} +- n: "proTxHash" + t: "string" + p: "Required
(exactly 1)" + d: "ProTxHash of the masternode." +{% enditemplate %} + +*Parameter #2---scanQuorumsCount* + +{% itemplate ntpd1 %} +- n: "scanQuorumsCount" + t: "number" + p: "Optional" + d: "Number of quorums to scan for. If not specified, the active quorum count for each specific quorum type is used." +{% enditemplate %} + +*Result---list of quorums the masternode is a member of* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "Array of objects" + p: "Required
(exactly 1)" + d: "Array containing info for quorum's the masternode belongs to" + +- n: "→
Quorum" + t: "object" + p: "Required
(0 or more)" + d: "An object describing quorum details" + +- n: "→ →
`height`" + t: "number" + p: "Required
(exactly 1)" + d: "Block height of the quorum" + +- n: "→ →
`type`" + t: "string" + p: "Required
(exactly 1)" + d: "[Type of quorum](https://github.com/dashpay/dips/blob/master/dip-0006.md#current-llmq-types)" + +- n: "→ →
`quorumHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the quorum" + +- n: "→ →
`minedBlock`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the block that established the quorum" + +- n: "→ →
`quorumPublicKey`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "Quorum public key" + +- n: "→ →
`isValidMember`" + t: "bool" + p: "Required
(exactly 1)" + d: "Indicates if the member is valid" + +- n: "→ →
`memberIndex`" + t: "number" + p: "Required
(exactly 1)" + d: "Index of the member within the quorum" +{% enditemplate %} + +*Example from Dash Core 0.14.1* + +{% highlight bash %} +dash-cli -testnet quorum memberof 1 \ + 39c07d2c9c6d0ead56f52726b63c15e295cb5c3ecf7fe1fefcfb23b2e3cfed1f 1 +{% endhighlight %} + +Result: +{% highlight json %} +[ + { + "height": 72000, + "type": "llmq_400_60", + "quorumHash": "0000000007697fd69a799bfa26576a177e817bc0e45b9fcfbf48b362b05aeff2", + "minedBlock": "00000000014d910dca80944b52aa3f522d5604254043b8354d641912aace4343", + "quorumPublicKey": "03a3fbbe99d80a9be8fc59fd4fe43dfbeba9119b688e97493664716cdf15ae47fad70fea7cb93f20fba10d689f9e3c02", + "isValidMember": true, + "memberIndex": 80 + } +] +{% endhighlight %} + +*See also: none* + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/sendfrom.md b/_includes/devdoc/dash-core/rpcs/rpcs/sendfrom.md index dc922693..08b9bfa4 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/sendfrom.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/sendfrom.md @@ -55,9 +55,9 @@ Core. Use the RPCs listed in the See Also subsection below instead. {{INCLUDE_SPEND_CONFIRMATIONS}} -*Parameter #5---whether to add 5 confirmations to transactions locked via InstantSend* +*Parameter #5---whether to add the balance from transactions locked via InstantSend* -{{INCLUDE_ADD_LOCK_CONFIRMATIONS_PARAMETER}} +{{INCLUDE_ADD_LOCKED_PARAMETER}} *Parameter #6---a comment* diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/sendmany.md b/_includes/devdoc/dash-core/rpcs/rpcs/sendmany.md index ebe4f37a..d89c03df 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/sendmany.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/sendmany.md @@ -47,8 +47,8 @@ The `sendmany` RPC {{summary_sendMany}} {{INCLUDE_SPEND_CONFIRMATIONS}} -*Parameter #4--whether to add 5 confirmations to transactions locked via InstantSend* -{{INCLUDE_ADD_LOCK_CONFIRMATIONS_PARAMETER}} +*Parameter #4--whether to add the balance from transactions locked via InstantSend* +{{INCLUDE_ADD_LOCKED_PARAMETER}} *Parameter #5---a comment* @@ -80,7 +80,7 @@ The `sendmany` RPC {{summary_sendMany}} - n: "Use InstantSend" t: "bool" p: "Optional
(0 or 1)" - d: "If set to `true`, send this transaction as InstantSend (default: false)." + d: "*Deprecated and ignored since Dash Core 0.14.1*" {% enditemplate %} @@ -94,6 +94,26 @@ The `sendmany` RPC {{summary_sendMany}} {% enditemplate %} +*Parameter #9---confirmation target* + +{% itemplate ntpd1 %} +- n: "`conf_target`" + t: "number (int)" + p: "Optional
(0 or 1)" + d: "Confirmation target (in blocks)" + +{% enditemplate %} + +*Parameter #10---fee estimate mode* + +{% itemplate ntpd1 %} +- n: "`estimate_mode`" + t: "string" + p: "Optional
(0 or 1)" + d: " The fee estimate mode, must be one of:
`UNSET`
`ECONOMICAL`
`CONSERVATIVE`
Default: `UNSET`" + +{% enditemplate %} + *Result---a TXID of the sent transaction* {% itemplate ntpd1 %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/sendrawtransaction.md b/_includes/devdoc/dash-core/rpcs/rpcs/sendrawtransaction.md index 64ac2701..ec461e31 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/sendrawtransaction.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/sendrawtransaction.md @@ -39,7 +39,7 @@ The `sendrawtransaction` RPC {{summary_sendRawTransaction}} - n: "Use InstantSend" t: "bool" p: "Optional
(0 or 1)" - d: "Set to `true` to send as an InstantSend transaction. Set to `false` (the default) to send as a normal transaction" + d: "*Depcrecated and ignored since Dash Core 0.14.1*" {% enditemplate %} @@ -76,6 +76,7 @@ Result: *See also* +* [CombineRawTransaction][rpc combinerawtransaction]: {{summary_combineRawTransaction}} * [CreateRawTransaction][rpc createrawtransaction]: {{summary_createRawTransaction}} * [DecodeRawTransaction][rpc decoderawtransaction]: {{summary_decodeRawTransaction}} * [SignRawTransaction][rpc signrawtransaction]: {{summary_signRawTransaction}} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/sendtoaddress.md b/_includes/devdoc/dash-core/rpcs/rpcs/sendtoaddress.md index 80e2aac7..ff696ef6 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/sendtoaddress.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/sendtoaddress.md @@ -74,7 +74,7 @@ The `sendtoaddress` RPC {{summary_sendToAddress}} - n: "Use InstantSend" t: "bool" p: "Optional
(0 or 1)" - d: "If set to `true`, send this transaction as InstantSend (default: false)." + d: "*Deprecated and ignored since Dash Core 0.14.1*" {% enditemplate %} @@ -88,6 +88,26 @@ The `sendtoaddress` RPC {{summary_sendToAddress}} {% enditemplate %} +*Parameter #8---confirmation target* + +{% itemplate ntpd1 %} +- n: "`conf_target`" + t: "number (int)" + p: "Optional
(0 or 1)" + d: "Confirmation target (in blocks)" + +{% enditemplate %} + +*Parameter #9---fee estimate mode* + +{% itemplate ntpd1 %} +- n: "`estimate_mode`" + t: "string" + p: "Optional
(0 or 1)" + d: " The fee estimate mode, must be one of:
`UNSET`
`ECONOMICAL`
`CONSERVATIVE`
Default: `UNSET`" + +{% enditemplate %} + *Result---a TXID of the sent transaction* {% itemplate ntpd1 %} @@ -164,7 +184,6 @@ ba4bbe29fa06b67d6f3f3a73e381627e66abe22e217ce329aefad41ea72c3922 *See also* -* [InstantSendToAddress][rpc instantsendtoaddress]: {{summary_instantSendToAddress}} * [SendFrom][rpc sendfrom]: {{summary_sendFrom}} * [SendMany][rpc sendmany]: {{summary_sendMany}} * [Move][rpc move]: {{summary_move}} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/sentinelping.md b/_includes/devdoc/dash-core/rpcs/rpcs/sentinelping.md index e38400ed..e0f7bc42 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/sentinelping.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/sentinelping.md @@ -7,10 +7,12 @@ http://opensource.org/licenses/MIT. ##### SentinelPing {% include helpers/subhead-links.md %} -{% assign summary_sentinelPing="sends a Sentinel Ping to the network." %} +{% assign summary_sentinelPing="was removed in Dash Core 0.14.0." %} {% autocrossref %} +{{WARNING}} **_Removed in Dash Core 0.14.0._** + The `sentinelping` RPC {{summary_sentinelPing}} *Parameter #1---sentinel version* diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/setbip69enabled.md b/_includes/devdoc/dash-core/rpcs/rpcs/setbip69enabled.md deleted file mode 100644 index c6dd21c5..00000000 --- a/_includes/devdoc/dash-core/rpcs/rpcs/setbip69enabled.md +++ /dev/null @@ -1,48 +0,0 @@ -{% comment %} -This file is licensed under the MIT License (MIT) available on -http://opensource.org/licenses/MIT. -{% endcomment %} -{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/setbip69enabled.md" %} - -##### SetBIP69Enabled -{% include helpers/subhead-links.md %} - -{% assign summary_setBIP69Enabled="enables or disables BIP69 input/output sorting (regtest network only)" %} - - - -{% autocrossref %} - -The `setbip69enabled` RPC {{summary_setBIP69Enabled}} - -*Parameter #1---enable/disable BIP69 sorting (regtest only)* - -{% itemplate ntpd1 %} -- n: "`enable`" - t: "boolean" - p: "Required
(exactly 1)" - d: "Set to true to turn on BIP69 sorting, false to turn off." - -{% enditemplate %} - -*Result---`null` or error on failure* - -{% itemplate ntpd1 %} -- n: "`result`" - t: "null" - p: "Required
(exactly 1)" - d: "JSON `null`. The JSON-RPC error field will be set only if you entered an invalid parameter" - -{% enditemplate %} - -*Example from Dash Core 0.12.3* - -{% highlight bash %} -dash-cli -testnet setbip69enabled true -{% endhighlight %} - -Result (no output from `dash-cli` because result is set to `null`). - -*See also: none* - -{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/setprivatesendamount.md b/_includes/devdoc/dash-core/rpcs/rpcs/setprivatesendamount.md new file mode 100644 index 00000000..49c4e318 --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/setprivatesendamount.md @@ -0,0 +1,42 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/setprivatesendamount.md" %} + +##### SetPrivateSendAmount +{% include helpers/subhead-links.md %} + +{% assign summary_setPrivateSendAmount="sets the amount of DASH to be mixed with PrivateSend" %} + + + +{% autocrossref %} + +The `setprivatesendamount` RPC {{summary_setPrivateSendAmount}} + +*Parameter #1---amount to mix* + +{% itemplate ntpd1 %} +- n: "Amount" + t: "int" + p: "Required
(exactly 1)" + d: "The number of DASH to mix (minimum: 2, maximum: 21,000,000)" + +{% enditemplate %} + +*Result---`null` on success* + +*Example from Dash Core 0.13.0* + +{% highlight bash %} +dash-cli -testnet setprivatesendamount 2000 +{% endhighlight %} + +(Success: no result displayed.) + +*See also:* + +* [SetPrivateSendRounds][rpc setprivatesendrounds]: {{summary_setPrivateSendRounds}} + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/setprivatesendrounds.md b/_includes/devdoc/dash-core/rpcs/rpcs/setprivatesendrounds.md new file mode 100644 index 00000000..7e18bd8b --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/setprivatesendrounds.md @@ -0,0 +1,42 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/setprivatesendrounds.md" %} + +##### SetPrivateSendRounds +{% include helpers/subhead-links.md %} + +{% assign summary_setPrivateSendRounds="sets the number of PrivateSend mixing rounds to use" %} + + + +{% autocrossref %} + +The `setprivatesendrounds` RPC {{summary_setPrivateSendRounds}} + +*Parameter #1---number of mixing rounds to use* + +{% itemplate ntpd1 %} +- n: "Rounds" + t: "int" + p: "Required
(exactly 1)" + d: "The number of mixing rounds to use (minimum: 1, maximum: 16)" + +{% enditemplate %} + +*Result---`null` on success* + +*Example from Dash Core 0.13.0* + +{% highlight bash %} +dash-cli -testnet setprivatesendrounds 4 +{% endhighlight %} + +(Success: no result displayed.) + +*See also:* + +* [SetPrivateSendAmount][rpc setprivatesendamount]: {{summary_setPrivateSendAmount}} + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/signrawtransaction.md b/_includes/devdoc/dash-core/rpcs/rpcs/signrawtransaction.md index 1fabd99a..91c2046c 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/signrawtransaction.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/signrawtransaction.md @@ -4,6 +4,8 @@ http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/signrawtransaction.md" %} + + ##### SignRawTransaction {% include helpers/subhead-links.md %} @@ -56,6 +58,10 @@ The `signrawtransaction` RPC {{summary_signRawTransaction}} p: "Optional
(0 or 1)" d: "If the pubkey script was a script hash, this must be the corresponding redeem script" +- n: "→ →
`amount`" + t: "numeric" + p: "Required
(exactly 1)" + d: "The amount of Dash spent" {% enditemplate %} *Parameter #3---private keys for signing* @@ -126,6 +132,7 @@ Result: *See also* +* [CombineRawTransaction][rpc combinerawtransaction]: {{summary_combineRawTransaction}} * [CreateRawTransaction][rpc createrawtransaction]: {{summary_createRawTransaction}} * [DecodeRawTransaction][rpc decoderawtransaction]: {{summary_decodeRawTransaction}} * [SendRawTransaction][rpc sendrawtransaction]: {{summary_sendRawTransaction}} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/spork.md b/_includes/devdoc/dash-core/rpcs/rpcs/spork.md index 385f6e96..28b57d66 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/spork.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/spork.md @@ -44,7 +44,7 @@ To display the status of sporks, use the `show` or `active` syntax. {% enditemplate %} -*Example from Dash Core 0.12.3* +*Example from Dash Core 0.14.1* {% highlight bash %} dash-cli -testnet spork show @@ -55,13 +55,13 @@ Result: { "SPORK_2_INSTANTSEND_ENABLED": 0, "SPORK_3_INSTANTSEND_BLOCK_FILTERING": 0, - "SPORK_5_INSTANTSEND_MAX_VALUE": 3000, "SPORK_6_NEW_SIGS": 4000000000, - "SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT": 0, "SPORK_9_SUPERBLOCKS_ENABLED": 0, - "SPORK_10_MASTERNODE_PAY_UPDATED_NODES": 0, - "SPORK_12_RECONSIDER_BLOCKS": 0, - "SPORK_14_REQUIRE_SENTINEL_FLAG": 0 + "SPORK_15_DETERMINISTIC_MNS_ENABLED": 1047200, + "SPORK_16_INSTANTSEND_AUTOLOCKS": 0, + "SPORK_17_QUORUM_DKG_ENABLED": 0, + "SPORK_19_CHAINLOCKS_ENABLED": 0, + "SPORK_20_INSTANTSEND_LLMQ_BASED": 0 } {% endhighlight %} @@ -82,7 +82,7 @@ Result: {% enditemplate %} -*Example from Dash Core 0.12.3* +*Example from Dash Core 0.14.0* {% highlight bash %} dash-cli -testnet spork active @@ -93,13 +93,13 @@ Result: { "SPORK_2_INSTANTSEND_ENABLED": true, "SPORK_3_INSTANTSEND_BLOCK_FILTERING": true, - "SPORK_5_INSTANTSEND_MAX_VALUE": true, "SPORK_6_NEW_SIGS": false, - "SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT": true, "SPORK_9_SUPERBLOCKS_ENABLED": true, - "SPORK_10_MASTERNODE_PAY_UPDATED_NODES": true, - "SPORK_12_RECONSIDER_BLOCKS": true, - "SPORK_14_REQUIRE_SENTINEL_FLAG": true + "SPORK_15_DETERMINISTIC_MNS_ENABLED": true, + "SPORK_16_INSTANTSEND_AUTOLOCKS": true, + "SPORK_17_QUORUM_DKG_ENABLED": true, + "SPORK_19_CHAINLOCKS_ENABLED": true, + "SPORK_20_INSTANTSEND_LLMQ_BASED": true } {% endhighlight %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/submitblock.md b/_includes/devdoc/dash-core/rpcs/rpcs/submitblock.md index 66d1f188..9cc98d13 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/submitblock.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/submitblock.md @@ -3,6 +3,7 @@ This file is licensed under the MIT License (MIT) available on http://opensource.org/licenses/MIT. {% endcomment %} {% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/submitblock.md" %} + ##### SubmitBlock {% include helpers/subhead-links.md %} @@ -23,13 +24,13 @@ The `submitblock` RPC {{summary_submitBlock}} {% enditemplate %} -*Parameter #2---additional parameters* +*Parameter #2---dummy value* {% itemplate ntpd1 %} -- n: "Parameters" +- n: "`dummy`" t: "object" p: "Optional
(0 or 1)" - d: "A JSON object containing extra parameters. Not used directly by Dash Core and also not broadcast to the network. This is available for use by mining pools and other software. A common parameter is a `workid` string" + d: "A dummy value for compatibility with BIP22. This value is ignored." {% enditemplate %} @@ -43,9 +44,9 @@ The `submitblock` RPC {{summary_submitBlock}} {% enditemplate %} -*Example from Dash Core 0.12.2* +*Example from Dash Core 0.14.1* -Submit the following block with the workid, "test". +Submit the following block with the a dummy value, "test". {% highlight bash %} dash-cli -testnet submitblock 0100002032e3965d5fdd7a883209d516599337eb4cb82f\ @@ -64,7 +65,7 @@ dash-cli -testnet submitblock 0100002032e3965d5fdd7a883209d516599337eb4cb82f\ 96e3a36f3e815222cd1cb9586b3193c4a0de030477f621956d51feffffff02a00bd1000000\ 00001976a914d7b47d4b40a23c389f5a17754d7f60f511c7d0ec88ac316168821300000019\ 76a914c9190e507834b78a624d7578f1ad3819592ca1aa88ac771f0000 \ - '{ "workid": "test" }' + "test" {% endhighlight %} Result (the block above was already on a local block chain): diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/uptime.md b/_includes/devdoc/dash-core/rpcs/rpcs/uptime.md new file mode 100644 index 00000000..645ee209 --- /dev/null +++ b/_includes/devdoc/dash-core/rpcs/rpcs/uptime.md @@ -0,0 +1,42 @@ +{% comment %} +This file is licensed under the MIT License (MIT) available on +http://opensource.org/licenses/MIT. +{% endcomment %} +{% assign filename="_includes/devdoc/dash-core/rpcs/rpcs/uptime.md" %} + + +##### Uptime +{% include helpers/subhead-links.md %} + +{% assign summary_uptime="returns the total uptime of the server." %} + +{% autocrossref %} + +The `uptime` RPC {{summary_uptime}} + +*Parameters: none* + +*Result* + +{% itemplate ntpd1 %} +- n: "`result`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The number of seconds that the server has been running" + +{% enditemplate %} + +*Example from Dash Core 0.14.1* + +{% highlight bash %} +dash-cli -testnet uptime +{% endhighlight %} + +Result: +{% highlight text %} +5500 +{% endhighlight %} + +*See also: none* + +{% endautocrossref %} diff --git a/_includes/devdoc/dash-core/rpcs/rpcs/verifymessage.md b/_includes/devdoc/dash-core/rpcs/rpcs/verifymessage.md index 23404410..697df6a8 100644 --- a/_includes/devdoc/dash-core/rpcs/rpcs/verifymessage.md +++ b/_includes/devdoc/dash-core/rpcs/rpcs/verifymessage.md @@ -47,7 +47,7 @@ The `verifymessage` RPC {{summary_verifyMessage}} {% itemplate ntpd1 %} - n: "`result`" - t: "bool/null" + t: "boolean" p: "Required
(exactly 1)" d: "Set to `true` if the message was signed by a key corresponding to the provided P2PKH address; set to `false` if it was not signed by that key; set to JSON `null` if an error occurred" diff --git a/_includes/devdoc/example_intro.md b/_includes/devdoc/example_intro.md index 1cbd739b..2ed199d3 100644 --- a/_includes/devdoc/example_intro.md +++ b/_includes/devdoc/example_intro.md @@ -21,7 +21,7 @@ Once installed, you'll have access to three programs: `dashd`, * `dashd` is more useful for programming: it provides a full peer which you can interact with through RPCs to port 9998 (or 19998 - for testnet / 18332 for regtest). + for testnet / 19898 for regtest). * `dash-cli` allows you to send RPC commands to `dashd` from the command line. For example, `dash-cli help` diff --git a/_includes/devdoc/example_testing.md b/_includes/devdoc/example_testing.md index b0b18465..123ef361 100644 --- a/_includes/devdoc/example_testing.md +++ b/_includes/devdoc/example_testing.md @@ -35,9 +35,8 @@ check the faucets listed below. They are community supported and due to potentially frequent Testnet changes, one or more of them may be unavailable at a given time: -* [Testnet Faucet - Dash.org] * [Testnet Faucet - Masternode.io] -* [Testnet Faucet - Dashninja.pl] +* [Testnet Faucet - Crowdnode.io] Testnet is a public resource provided for free by members of the community, so please don't abuse it. diff --git a/_includes/devdoc/guide_block_chain.md b/_includes/devdoc/guide_block_chain.md index fde62437..9ce0640f 100644 --- a/_includes/devdoc/guide_block_chain.md +++ b/_includes/devdoc/guide_block_chain.md @@ -130,7 +130,7 @@ The ideal value is 3600 (one hour). This method of calculating difficulty (Dark Gravity Wave) was authored by Dash creator Evan Duffield to fix exploits possible with the previously used Kimoto Gravity Well difficulty readjustment algorithm. For additional detail, -reference this [Official Documentation Dark Gravity Wave page](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/1146926/Dark+Gravity+Wave). +reference this [Official Documentation Dark Gravity Wave page](https://docs.dash.org/en/latest/introduction/features.html#dark-gravity-wave). Because each block header must hash to a value below the target threshold, and because each block is linked to the block that diff --git a/_includes/devdoc/guide_dash_features.md b/_includes/devdoc/guide_dash_features.md index c612bdfe..d53022d1 100644 --- a/_includes/devdoc/guide_dash_features.md +++ b/_includes/devdoc/guide_dash_features.md @@ -15,8 +15,7 @@ Dash aims to be the most user-friendly and scalable payments-focused cryptocurrency in the world. The Dash network features instant transaction confirmation, double spend protection, anonymity equal to that of physical cash, a self-governing, self-funding model driven by incentivized full nodes and a -clear roadmap for on-chain scaling to up to 400MB blocks using custom-developed -open source hardware. +clear [roadmap](https://www.dash.org/roadmap/) for future development. While Dash is based on Bitcoin and compatible with many key components of the Bitcoin ecosystem, its two-tier network structure offers significant @@ -33,62 +32,90 @@ economy. {% autocrossref %} Dash Core's InstantSend feature provides a way to lock transaction inputs and -enable secure, instantaneous transactions. +enable secure, instantaneous transactions. The network automatically attempts to +upgrade any qualifying transaction to InstantSend without a need for the sending +wallet to explicitly request it. -The following video provides an overview with a good introduction to the details -including the InstantSend vulnerability that was fixed in Dash Core 0.12.2. -Some specific points in the video are listed here for quick reference: +* To qualify for InstantSend, transaction inputs must either: + * Be locked by InstantSend + * Be in a block that has a ChainLock + * Have at least the number confirmations (block depth) indicated by the table below - - 2:00 - InstantSend restrictions - - 5:00 - Masternode quorum creation - - 6:00 - Input locking - - 7:45 - Quorum score calculation / Requirement for block confirmations - - 9:00 - Description of Dash Core pre-0.12.2 InstantSend vulnerability - - 13:00 - Description of vulnerability fix / Post Dash Core 0.12.2 operation + | **Network** | **Confirmations Required** | + |---------|--------------| + | Mainnet | 6 Blocks | + | Testnet / Regtest / Devnet | 2 Blocks | -{% endautocrossref %} +The introduction of Long-Living Masternode Quorums in Dash Core 0.14 provided +a foundation to scale InstantSend. The transaction input locking process (and +resulting network traffic) now occurs only within the quorum. This minimizes +network congestion since only the `islock` message produced by the locking +process is relayed to the entire Dash network. This message contains all the +information necessary to verify a successful transaction lock. - +Sporks 2 (`SPORK_2_INSTANTSEND_ENABLED`) and 20 (`SPORK_20_INSTANTSEND_LLMQ_BASED`) +are used to manage InstantSend. Spork 2 enables or disables the entire +InstantSend feature. Spork 20 was used to support the transition to LLMQ-based +InstantSend and is currently retained for backward compatibility. It will be +deprecated in a future release. -{% autocrossref %} +Note: A transaction will __not__ be included in the block template (from `getblocktemplate`) unless it: + + 1. Has been locked, or + 2. Has been in the mempool for >=10 minutes (`WAIT_FOR_ISLOCK_TIMEOUT`) + +A miner may still include any transaction, but blocks containing only locked +transactions (or ones older than the timeout) should achieve a ChainLock faster. +This is desirable to miners since it prevents any reorgs that might orphan their +block. *InstantSend Data Flow* | **InstantSend Client** | **Direction** | **Peers** | **Description** | -| `inv` message (ix) | → | | Client sends inventory for transaction lock request -| | ← | `getdata` message (ix) | Peer responds with request for transaction lock request -| `ix` message | → | | Client sends InstantSend transaction lock request -| | ← | `inv` message (txlvote) | Masternodes in the [quorum](#quorum-selection) respond with votes -| `getdata` message (txlvote) | → | | Client requests vote -| | ← | `txlvote` message | Peer responds with vote +| `tx` message | → | | Client sends InstantSend transaction +| **LLMQ Signing Sessions** | | | Quorums internally process locking | +| | | | Quorum(s) responsible for the transaction's inputs lock the inputs via LLMQ signing sessions +| | | | Once all inputs are locked, the quorum responsible for the overall transaction creates the transaction lock (`islock`) via an LLMQ signing session +| **LLMQ Results** | | | Quorum results broadcast to the network | +| | ← | `inv` message (islock) | Quorum responds with lock inventory +| `getdata` message (islock) | → | | Client requests lock message +| | ← | `islock` message | Quorum responds with lock message -Once a sufficient number of votes approve the transaction lock, the InstantSend -transaction is approved and shows 5 confirmations (`DEFAULT_INSTANTSEND_DEPTH`). - -NOTE: The 5 "pseudo-confirmations" are shown to convey confidence that the -transaction is secure from double-spending and DO NOT indicate the transaction -has already been confirmed to a block depth of 5 in the blockchain. - -If an InstantSend transaction is a valid transaction but does not receive a -transaction lock, it reverts to being a standard transaction. - -There are a number of limitations on InstantSend transactions: - -* The lock request will timeout 15 seconds after the first vote is seen (`INSTANTSEND_LOCK_TIMEOUT_SECONDS`) -* The lock request will fail if it has not been locked after 60 seconds (`INSTANTSEND_FAILED_TIMEOUT_SECONDS`) -* A minimum fee (0.0001 Dash) is required since the transaction involves the masternodes in addition to miners. This fee was most -recently decreased by [DIP-0001](https://github.com/dashpay/dips/blob/master/dip-0001.md). -* To be used in an InstantSend transaction, an input must have at least the number confirmations (block depth) indicated by the table below - -| **Network** | **Confirmations Required** | -|---------|--------------| -| Mainnet | 6 Blocks | -| Testnet | 2 Blocks | -| Regtest | 2 Blocks | -| Devnet | 2 Blocks | +Once a transaction lock is approved, the `instantlock` field of various RPCs +is set to `true` (e.g. the `getmempoolentry` RPC). {% endautocrossref %} +### ChainLocks +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +Dash's ChainLock feature leverages [LLMQ Signing Requests/Sessions](#llmq-signing-session) +to reduce uncertainty when receiving funds and remove the possibility of 51% +mining attacks. + +For each block, an LLMQ of a few hundred masternodes (300-400) is selected and each +participating member signs the first block that it sees extending the active +chain at the current height. If enough members (at least 240) see the same block +as the first block, they will be able to create a `clsig` message and propagate +it to all nodes in the network. + +If a valid `clsig` message is received by a node, it must reject all blocks (and +any descendants) at the same height that do not match the block specified in the +`clsig` message. This makes the decision on the active chain quick, easy and +unambiguous. It also makes reorganizations below this block impossible. + +When LLMQ-based InstantSend is enabled, a ChainLock is only attempted once all +transactions in the block are locked via InstantSend. If a block contains +unlocked transactions, retroactive InstantSend locks are established prior to +a ChainLock. + +Please read [DIP8 ChainLocks](https://github.com/dashpay/dips/blob/master/dip-0008.md) +for additional details. + + +{% endautocrossref %} ### PrivateSend {% include helpers/subhead-links.md %} @@ -97,7 +124,7 @@ recently decreased by [DIP-0001](https://github.com/dashpay/dips/blob/master/dip Dash Core's PrivateSend feature provides a way to improve privacy by performing coin-mixing without relinquishing custodial access. For additional details, -reference this [Official Documentation PrivateSend page](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/1146924/PrivateSend). +reference this [Official Documentation PrivateSend page](https://docs.dash.org/en/latest/introduction/features.html#privatesend). The following video provides an overview with a good introduction to the details: @@ -127,27 +154,28 @@ sending the actual denomination. The table below lists the bit, its associated integer value used in P2P messages, and the actual Dash value. | **Bit** | **Denom. (Integer)** | **Denomination (DASH)** | -| 0 | 1 | 10.0001 | -| 1 | 2 | 01.00001 | -| 2 | 4 | 00.100001 | -| 3 | 8 | 00.0100001 | +| 0 | 1 | 10.0001 | +| 1 | 2 | 01.00001 | +| 2 | 4 | 00.100001 | +| 3 | 8 | 00.0100001 | +| 4 | 16 | 00.00100001 | -The denominations are structured to allow converting between denominations -directly without requiring additional inputs or creating change (for example, -1 x 10.0001 = 10 x 1.00001, 1 x 0.100001 = 10 x 0.0100001, etc.). +Protocol version 70213 added a 5th denomination (0.001 DASH). {% endautocrossref %} -[Example Testnet denomination creation transaction](https://testnet-insight.dashevo.org/insight/tx/702e77d19dcb0fbfe7d7daa5543bcfeacec0f552c49e398b27fb8141ae52d3e2) +[Example Testnet denomination creation transaction](https://testnet-insight.dashevo.org/insight/tx/f0174fc87d68a18617c2990df4d9455c0459c601d2d6473934357a66f9b8b70a) {% autocrossref %} **Creating Collaterals** PrivateSend collaterals are used to pay mixing fees, but are kept separate from -the denominations to maximize privacy. The minimum collateral fee is 0.001 DASH for -all mixing sessions regardless of denomination. In Dash Core, collaterals are -created with enough value to pay 4 collateral fees (4 x 0.001 DASH). ([Dash Core Reference](https://github.com/dashpay/dash/blob/e596762ca22d703a79c6880a9d3edb1c7c972fd3/src/privatesend.h#L313)) +the denominations to maximize privacy. Since protocol version 70213, the minimum +collateral fee is 1/10 of the smallest denomination for all mixing sessions +regardless of denomination. +In Dash Core, collaterals are created with enough value to pay 4 collateral fees +(4 x 0.001 DASH). ([Dash Core Reference](https://github.com/dashpay/dash/blob/262454791c4b4f783b2533d1b16b757a71eb5f7d/src/privatesend.h#L413)) In protocol version 70208, collateral inputs can be anything from 2x the minimum collateral amount to the maximum collateral amount (currently defined as @@ -156,9 +184,9 @@ input from 1x the minimum collateral amount to the maximum collateral amount. {% endautocrossref %} -[Example Testnet collateral creation transaction](https://testnet-insight.dashevo.org/insight/tx/c2fc4af6a9940bf33446f3dddf6892c3dac4351fd0add89157666ca1019454ca) +[Example Testnet collateral creation transaction](https://testnet-insight.dashevo.org/insight/tx/8f9b15973983876f7ce4eb2c32b09690dfb0432d2caf6c6df516196a8d17689f) -[Example Testnet collateral payment transaction](https://testnet-insight.dashevo.org/insight/tx/70404808f1871e600cc8d30ad1eaf2bab63906dd1f3ae4a799b7182e1689721b) +[Example Testnet collateral payment transaction](https://testnet-insight.dashevo.org/insight/tx/de51e6f7c5ef75aad0dbb0a808ef4873d7ef6d67b25f3a658d5a241db4f3eeeb) #### PrivateSend Mixing @@ -196,34 +224,40 @@ mixing pool. _**Step 0 - Pool Selection**_ * Existing mixing pool information is derived from the Queue messages seen by the client - * Dash Core attempts to join an existing mixing pool 2/3 of the time although this is not a requirement that alternative implementations would be required to follow ([Dash Core Reference](https://github.com/dashpay/dash/blob/e596762ca22d703a79c6880a9d3edb1c7c972fd3/src/privatesend-client.cpp#L817-#L826)) + * Dash Core attempts to join an existing mixing pool and only requests creation of a new one if that fails, although this is not a requirement that alternative implementations would be required to follow _**Step 1 - Pool Request**_ * The `dsa` message contains a collateral transaction * This transaction uses a collateral input created in the [Wallet Preparation](#privatesend-wallet-preparation) phase * The collateral is a signed transaction that pays the collateral back to a client address minus a fee of 0.001 DASH - * As of protocol version 70209, the `dsa` message indicates how many inputs will be provided to the pool when Spork 6 is active _**Step 3 - Queue**_ * A masternode broadcasts `dsq` messages when it starts a new queue. These message are relayed by all peers. - * As of protocol version 70209, when Spork 6 is active the `dsq` message indicates how many inputs must be provided to participate in the pool. - * Once the masternode has received valid `dsa` messages from 3 clients (`nPoolMaxTransactions`), it sends a `dsq` message with the ready bit set ([Dash Core Reference](https://github.com/dashpay/dash/blob/e596762ca22d703a79c6880a9d3edb1c7c972fd3/src/chainparams.cpp#L173)) - * Clients must respond to the Queue ready within 30 seconds or risk forfeiting the collateral they provided in the `dsa` message (Step 1) ([Dash Core Reference](https://github.com/dashpay/dash/blob/e596762ca22d703a79c6880a9d3edb1c7c972fd3/src/privatesend.h#L22)) + * As of protocol version 70214, mixing sessions have a variable number of participants defined by the range `nPoolMinParticipants` (3) to `nPoolMaxParticipants` (5). Prior protocol version mixing sessions always contained exactly 3 participants + * Once the masternode has received valid `dsa` messages from the appropriate number of clients (`nSessionMaxParticipants`), it sends a `dsq` message with the ready bit set + * Clients must respond to the Queue ready within 30 seconds or risk forfeiting the collateral they provided in the `dsa` message (Step 1) ([Dash Core Reference](https://github.com/dashpay/dash/blob/e9f7142ed01c0d7b53ef8b5f6f3f6375a68ef422/src/privatesend.h#L23)) _**Step 4 - Inputs**_ * The collateral transaction can be the same in the `dsi` message as the one in the `dsa` message (Step 1) as long as it has not been spent - * Each client can provide up to 9 (`PRIVATESEND_ENTRY_MAX_SIZE`) inputs (and an equal number of outputs) to be mixed ([Dash Core Reference](https://github.com/dashpay/dash/blob/e596762ca22d703a79c6880a9d3edb1c7c972fd3/src/privatesend.h#L28)) + * Each client can provide up to 9 (`PRIVATESEND_ENTRY_MAX_SIZE`) inputs (and an equal number of outputs) to be mixed ([Dash Core Reference](https://github.com/dashpay/dash/blob/e9f7142ed01c0d7b53ef8b5f6f3f6375a68ef422/src/privatesend.h#L29)) * This is the only message in the PrivateSend process that contains enough information to link a wallet's PrivateSend inputs with its outputs * This message is sent directly between a client and the mixing masternode (not relayed across the Dash network) so no other clients see it _**Step 6 - Final Transaction (unsigned)**_ * Once the masternode has received valid `dsi` messages from all clients, it creates the final transaction and sends a `dsf` message - * Inputs/outputs are ordered deterministically as defined by [BIP-69](https://github.com/quantumexplorer/bips/blob/master/bip-0069.mediawiki#Abstract) to avoid leaking any data ([Dash Core Reference](https://github.com/dashpay/dash/blob/e596762ca22d703a79c6880a9d3edb1c7c972fd3/src/privatesend-server.cpp#L321-#L322)) - * Clients must sign their inputs to the Final Transaction within 15 seconds or risk forfeiting the collateral they provided in the `dsi` message (Step 4) ([Dash Core Reference](https://github.com/dashpay/dash/blob/e596762ca22d703a79c6880a9d3edb1c7c972fd3/src/privatesend.h#L23)) + * Inputs/outputs are ordered deterministically as defined by [BIP-69](https://github.com/dashevo/bips/blob/master/bip-0069.mediawiki#Abstract) to avoid leaking any data ([Dash Core Reference](https://github.com/dashpay/dash/blob/e596762ca22d703a79c6880a9d3edb1c7c972fd3/src/privatesend-server.cpp#L321-#L322)) + * Clients must sign their inputs to the Final Transaction within 15 seconds or risk forfeiting the collateral they provided in the `dsi` message (Step 4) ([Dash Core Reference](https://github.com/dashpay/dash/blob/e9f7142ed01c0d7b53ef8b5f6f3f6375a68ef422/src/privatesend.h#L24)) + + _**Step 10 - Final Transaction broadcast**_ + + * Prior to protocol version 70213, masternodes could only send a single + un-mined `dstx` message at a time. As of protocol version 70213, up to 5 + (`MASTERNODE_MAX_MIXING_TXES`) un-mined `dstx` messages per masternode are + allowed. _**General**_ @@ -269,22 +303,15 @@ value of only 0.00000546 DASH as shown by the calculation below. {% autocrossref %} -Masternode payment uses a verifiable process to determine which masternode is -paid in each block. When a new block is processed, a quorum of -`MNPAYMENTS_SIGNATURES_TOTAL` (10) masternodes vote on the next masternode -payee. The quorum is calculated deterministically based on the distance between -masternode's hash and the block's proof of work. +Since DIP3 (introduced in Dash Core 0.13.0), masternode reward payments are based +on the deterministic masternode list information found on-chain in each block. +This results in a transparent, deterministic process that operates using the +[algorithm described in DIP3](https://github.com/dashpay/dips/blob/master/dip-0003.md#masternode-rewards). -Each member of the quorum issues a 'mnw' message that is relayed to the -network. The payee is selected from a subset of masternodes made up of 10% -of eligible nodes that have been waiting the longest since their last payment. -The winner is then determined based on a number of parameters including the -distance between the its hash and the block's proof of work. For additional -detail, reference this [Official Documentation Payment Logic page](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/8880184/Payment+Logic). - -Nodes receiving a `mnw` message verify the validity of the message before -relaying it to their peers. If the message is invalid, the sending node may be -treated as misbehaving and have its ban score increased. +On-chain masternode lists reduce the complexity of reward payments, make +payments much more predictable, and also allow masternode payments to be +enforced for all blocks (enforcement for superblocks was not possible in the +previous system). {% endautocrossref %} @@ -301,38 +328,31 @@ several conditions that initiate a start/restart the sync process: * A failure occurred during the last sync attempt (after a 1 minute cooldown before sync restarts) * Issuing a `mnsync reset` RPC command +{% endautocrossref %} + #### Initial Masternode Sync {% include helpers/subhead-links.md %} +{% autocrossref %} + +The deterministic masternode lists introduced by DIP3 eliminated several steps +of the sync process related to the masternode list and masternode payments. +Since that information is now available on-chain, P2P messages related to those +steps were deprecated. + This diagram shows the order in which P2P messages are sent to perform masternode synchronization initially after startup. -![Masternode Sync (Initial)](/img/dev/en-masternode-sync-initial.svg) +![Masternode Sync (Initial)](/img/dev/en-masternode-sync-initial-dip3.svg) The following table details the data flow of P2P messages exchanged during -initial masternode synchronization. +initial masternode synchronization after the activation of DIP3 and Spork 15. | **Syncing Node Message** | **Direction** | **Masternode Response** | **Description** | | **1. Sporks** | | | | | `getsporks` message | → | | Syncing node requests sporks | | ← | `spork` message(s) | -| **2. Masternode List** | | | Sync Masternode list from other connected clients | -| `dseg` message | → | | Syncing node requests masternode list -| | ← | `ssc` message | Number of entries in masternode list (MASTERNODE_SYNC_LIST)

Only sent if requesting entire list -| | ← | `inv` message(s) (mnb) | MSG_MASTERNODE_ANNOUNCE -| | ← | `inv` message(s) (mnp) | MSG_MASTERNODE_PING -| `getdata` message(s) (mnb) | → | | (Optional) -| `getdata` message(s) (mnp) | → | | (Optional) -| | ← | `mnb` message(s) | (If requested) Masternode announce message -| | ← | `mnp` message(s) | (If requested) Masternode ping message -| **3. Masternode payments** | | | Ask node for all payment votes it has (new nodes will only return votes for future payments) | -| `mnget` message | → | | Syncing node requests masternode payment sync -| | ← | `ssc` message | Number of entries in masternode payment list -| | ← | `inv` message(s) (mnw) | MSG_MASTERNODE_PAYMENT_VOTE -| `getdata` message(s) (mnw) | → | | (Optional) -| | ← | `mnw` message(s) | (If requested) Masternode payment vote message -| **4. Governance** | | | See [Governance sync](#governance) | - +| **2. Governance** | | | See [Governance sync](#governance) | *Masternode Sync Status* @@ -343,12 +363,11 @@ are used in both `ssc` messages and the `mnsync` RPC. | -1 | `MASTERNODE_SYNC_FAILED` | Synchronization failed | | 0 | `MASTERNODE_SYNC_INITIAL` | Synchronization just started, was reset recently, or is still in IBD | | 1 | `MASTERNODE_SYNC_WAITING` | Synchronization pending - waiting after initial to check for more headers/blocks | -| 2 | `MASTERNODE_SYNC_LIST` | Synchronizing masternode list | -| 3 | `MASTERNODE_SYNC_MNW` | Synchronizing masternode payments | +| 2 | `MASTERNODE_SYNC_LIST` | ![Warning icon](/img/icons/icon_warning.svg) _Deprecated following activation of DIP3 and Spork 15_

Synchronizing masternode list | +| 3 | `MASTERNODE_SYNC_MNW` | ![Warning icon](/img/icons/icon_warning.svg) _Deprecated following activation of DIP3 and Spork 15_

Synchronizing masternode payments | | 4 | `MASTERNODE_SYNC_GOVERNANCE` | Synchronizing governance objects | | 999 | `MASTERNODE_SYNC_FINISHED` | Synchronization finished | - #### Ongoing Masternode Sync {% include helpers/subhead-links.md %} @@ -359,33 +378,6 @@ payments, and governance objects synchronized between masternodes. ![Masternode Sync (Ongoing)](/img/dev/en-masternode-sync-ongoing.svg) -**Recurring Ping** - -Each masternode issues a ping (`mnp` message) periodically to notify the network -that it is still online. Masternodes that do not issue a ping for 3 hours will -be put into the `MASTERNODE_NEW_START_REQUIRED` state and will need to issue a -masternode announce (`mnb` message). - -**Masternode List** - -After the initial masternode list has been received, it is kept current by a -combination of the periodic `mnp` messages received from other masternodes, -the `mnb` messages sent by masternodes as they come online, and `mnv` messages -to verify that other masternodes are valid. - -Also, `dseg` messages can be sent to request masternode info when messages are -received that have been signed by an unrecognized masternode (most masternode/governance -messages include a `vin` value that can be used to verify the masternode's -unspent 1000 Dash). - -Unsynchronized peers may send a `dseg` message to request the entire masternode list. - -**Masternode Payment** - -After the initial masternode payment synchronization, payment information is -kept current via the `mnw` messages relayed on the network. Unsynchronized peers -may send a `mnget` message to request masternode payment sync. - **Governance** After the initial governance synchronization, governance information is kept @@ -397,23 +389,18 @@ sync. {% include helpers/subhead-links.md %} The following tables detail the timing of various functions used to keep the -masternodes in sync with each other. This information is derived from -`ThreadCheckPrivateSend` in `src/privatesend.cpp`. +masternodes in sync with each other. This information is derived from the +scheduler section of `AppInitMain` in `src/init.cpp`. | **Period (seconds)** | **Action** | **Description** | -| 6 | MN Sync | Synchronizes sporks, masternode list, masternode payments, and governance objects | +| 6 | MN Sync | Synchronizes sporks, masternode list, masternode payments, and governance objects (masternode-sync.cpp) | The following actions only run when the masternode sync is past `MASTERNODE_SYNC_WAITING` status. | **Period (seconds)** | **Action** | **Description** | -| 1 | MN Check | Check the state of each masternode that is still funded and not banned. The action occurs once per second, but individual masternodes are only checked at most every 5 seconds (only a subset of masternodes are checked each time it runs) | -| 60 | Process MN Connections | Disconnects some masternodes | -| 60 | MN Check/Remove | Remove spent masternodes and check the state of inactive ones | -| 60 | MN Payment Check/Remove | Remove old masternode payment votes/blocks | -| 60 | InstantSend Check/Remove | Remove expired/orphaned/invalid InstantSend candidates and votes | -| 300 | Full verification | Verify masternodes via direct requests (`mnv` messages - note time constraints in the Developer Reference section) | -| 300 | Maintenance | Check/remove/reprocess governance objects | -| 600 | Manage State | Sends masternode pings (`mnp` message). Also sends initial masternode broadcast (`mnb` message) for local masternodes. | +| 60 | Process MN Connections | Disconnects some masternodes (masternodeman.cpp) | +| 60 | InstantSend Check/Remove | Remove expired/orphaned/invalid InstantSend candidates and votes (instantx.cpp) | +| 300 | Maintenance | Check/remove/reprocess governance objects (governance.cpp) | {% endautocrossref %} @@ -451,13 +438,21 @@ requested. Frequent requests will result in the node being banned. Masternodes respond to the `govsync` message with several items: -* First, the Masternode sends one `ssc` message (Sync Status Count) for `govobj` -objects and one for `govobjvote` objects. These messages indicate how many -inventory items will be sent. +For Object Sync: -* Second, the Masternode sends `inv` messages for the `govobj` and `govobjvote` +* First, the Masternode sends a `ssc` message (Sync Status Count) for `govobj` +objects. This message indicates how many inventory items will be sent. + +* Second, the Masternode sends an `inv` message for the `govobj` and `govobjvote` objects. +For Vote Sync: + +* First, the Masternode sends a `ssc` message (Sync Status Count) for `govobjvote` +objects. This message indicates how many inventory items will be sent. + +* Second, the Masternode sends an `inv` message for the `govobjvote` object(s). + Once the syncing node receives the counts and inventories, it may request any `govobj` and `govobjvote` objects from the masternode via a `getdata` message. @@ -468,19 +463,14 @@ Once the syncing node receives the counts and inventories, it may request any | **Initial request** | | | **Requests all governance objects (without votes)** | | `govsync` message | → | | Syncing node initiates governance sync (hash set to all zeros) | | ← | `ssc` message (govobj) | Number of governance objects (0 or more) -| | ← | `ssc` message (govobjvote)| Number of governance object votes *(0 since votes are only returned if a specific hash is provided with the `govsync` message)* | | ← | `inv` message (govobj) | Governance object inventories | `getdata` message (govobj) | → | | (Optional) Syncing node requests govobj | | ← | `govobj` message | (If requested) Governance object | | | | | | **Follow up requests** | | | **Requests governance object (with votes)** | | `govsync` message | → | | Syncing node requests governance sync for a specific governance object -| | ← | `ssc` message (govobj) | Number of governance objects (1) | | ← | `ssc` message (govobjvote)| Number of governance object votes (0 or more) -| | ← | `inv` message (govobj) | Governance object inventory | | ← | `inv` message (govobjvote)| Governance object vote inventories -| `getdata` message (govobj) | → | | (Optional) Syncing node requests govobj -| | ← | `govobj` message | (If requested) Governance object | `getdata` message (govobjvote) | → | | (Optional) Syncing node requests govobjvote | | ← | `govobjvote` message | (If requested) Governance object vote @@ -495,8 +485,8 @@ the future. This will allow the integration between Evolution and Dash Core to proceed more smoothly and enable new governance object additions with minimal impact to Dash Core. -Sentinel runs periodically and performs four main tasks as described below: -governance sync, ping, governance object pruning, and superblock management. +Sentinel runs periodically and performs three main tasks as described below: +governance sync, governance object pruning, and superblock management. The governance object data is stored in a SQLite database. ##### Sentinel Sync @@ -506,15 +496,6 @@ Sentinel issues a `gobject list` RPC command and updates its database with the results returned from dashd. When objects are removed from the network, they are purged from the Sentinel database. -##### Sentinel Ping -{% include helpers/subhead-links.md %} - -In Dash Core 12.2, use of the `watchdog` governance object type was replaced -by integrating sentinel information into the masternode ping (`mnp` message) -via [Pull Request #1491](https://github.com/dashpay/dash/pull/1491). -Sentinel calls the `sentinelping` RPC which updates the masternode info to -prevent it from entering a `MASTERNODE_WATCHDOG_EXPIRED` state. - ##### Sentinel Prune {% include helpers/subhead-links.md %} @@ -530,21 +511,431 @@ voted to delete them. Sentinel manages superblock creation, voting, and submission to dashd for network propagation. +Beginning ~3 days (1662 blocks) prior to a superblock, Sentinel selects one +masternode per block to rank proposals. This ranking is used to determine +what a candidate superblock (or "superblock trigger") should contain. Based on +the results, it creates and broadcasts a new superblock trigger if a matching +one was not found. + +All masternodes vote for existing superblock triggers. Each masternode casts +only 1 superblock trigger "Yes" vote per superblock cycle. It will vote "No" +for any other triggers it receives. + +Note: This means that proposal votes submitted _after_ superblock trigger +creation begins will _not_ be counted by some masternodes (those that have +already voted on a superblock trigger). + +At the superblock height, the trigger with the most "Yes" votes is paid out by +that block's miner. + +##### Sentinel Ping +{% include helpers/subhead-links.md %} + +![Warning icon](/img/icons/icon_warning.svg) NOTE: Deprecated by [Dash Core v0.14](https://github.com/dashpay/sentinel/pull/64) + +In Dash Core 12.2, use of the `watchdog` governance object type was replaced +by integrating sentinel information into the masternode ping (`mnp` message) +via [Pull Request #1491](https://github.com/dashpay/dash/pull/1491). + +From Dash Core 0.12.2 through Dash Core 0.13, Sentinel used the `sentinelping` RPC +to update the masternode info and prevent it from entering a `MASTERNODE_WATCHDOG_EXPIRED` state. + {% endautocrossref %} -### Quorum Selection +### Masternode Quorums +{% include helpers/subhead-links.md %} + +Dash's masternode quorums are used to facilitate the operation of masternode provided +features in a decentralized, deterministic way. The original quorums (used +largely for InstantSend and masternode payments) were ephemeral and used for a +single purpose (e.g. voting on one specific InstantSend transaction). + +Dash Core 0.14 (protocol version 70214) introduced the Long Living Masternode +Quorums (LLMQ) that are described in detail by [DIP6](https://github.com/dashpay/dips/blob/master/dip-0006.md). +These LLMQs are deterministic subsets of the global deterministic masternode +list that are formed via a distributed key generation (DKG) protocol and remain +active for a long periods of time (e.g. hours to days). + +The main task of LLMQs is to perform threshold signing of consensus-related +messages (e.g. ChainLocks). + +##### LLMQ Creation (DKG) + + +{% autocrossref %} + +The following table details the data flow of P2P messages exchanged during +the distributed key generation (DKG) protocol used to establish an LLMQ. + +NOTE: With the exception of the final step (`qfcommit` message broadcast), the message +exchanges happen only between masternodes participating in the DKG process via +the Intra-Quorum communication process described in the DIP. + +*Quorum DKG Data Flow* + +| **Masternode** | **Direction** | **Peers** | **Description** | +| **[Initialization Phase](https://github.com/dashpay/dips/blob/master/dip-0006.md#1-initialization-phase)**| | | **Deterministically evaluate if quorum participation necessary** | +| | | | Each quorum participant establishes connections to a set of quorum participants [as described in DIP6](https://github.com/dashpay/dips/blob/master/dip-0006.md#building-the-set-of-deterministic-connections) | +| **[Contribution Phase](https://github.com/dashpay/dips/blob/master/dip-0006.md#2-contribution-phase)** | | | **Send quorum contributions (intra-quorum communication)** | +|`inv` message (qcontrib) | → | | Masternode sends inventory for its quorum contribution _to other masternodes in the quorum_ +| | ← | `getdata` message (qcontrib) | Peer(s) respond with request for quorum contribution +| `qcontrib` message | → | | Masternode sends the requested quorum contribution +| **[Complaining Phase](https://github.com/dashpay/dips/blob/master/dip-0006.md#3-complaining-phase)** | | | **Send complaints for any peers with invalid or missing contributions (intra-quorum communication)** | +|`inv` message (qcomplaint) | → | | Masternode sends inventory for any complaints _to other masternodes in the quorum_ +| | ← | `getdata` message (qcomplaint) | Peer(s) respond with request for quorum complaints +| `qcomplaint` message | → | | Masternode sends the requested complaints +| **[Justification Phase](https://github.com/dashpay/dips/blob/master/dip-0006.md#4-justification-phase)** | | | **Send justification responses for any complaints against own contributions (intra-quorum communication)** | +|`inv` message (qjustify) | → | | Masternode sends inventory for any justifications _to other masternodes in the quorum_ +| | ← | `getdata` message (qjustify) | Peer(s) respond with request for quorum justifications +| `qjustify` message | → | | Masternode sends the requested justifications +| **[Commitment Phase](https://github.com/dashpay/dips/blob/master/dip-0006.md#5-commitment-phase)** | | | **Send premature commitment containing the quorum public key (intra-quorum communication)** | +|`inv` message (qpcommit) | → | | Masternode sends inventory for its premature commitment _to other masternodes in the quorum_ +| | ← | `getdata` message (qpcommit) | Peer(s) respond with request for quorum premature commitment +| `qpcommit` message | → | | Masternode sends the requested premature commitment +| **[Finalization Phase](https://github.com/dashpay/dips/blob/master/dip-0006.md#6-finalization-phase)** | | | **Send final commitment containing the quorum public key** | +|`inv` message (qfcommit) | → | | Masternode sends inventory for its premature commitment **to all peers** +| | ← | `getdata` message (qfcommit) | Peer(s) respond with request for quorum final commitment +| `qfcommit` message | → | | Masternode sends the requested final commitment + +{% endautocrossref %} + + +##### LLMQ Signing Session + + +{% autocrossref %} + +The following table details the data flow of P2P messages exchanged during +an LLMQ signing session. These sessions take advantage of BLS threshold signatures +to enable quorums to sign arbitrary messages. For example, Dash Core 0.14 uses +this capability to create the quorum signature found in the `clsig` message that +enables ChainLocks. + +Please read [DIP7 LLMQ Signing Requests / Sessions](https://github.com/dashpay/dips/blob/master/dip-0007.md) +for additional details. + +*LLMQ Signing Session Data Flow* + +| **Masternode** | **Direction** | **Peers** | **Description** | +| **[Siging Request Phase](https://github.com/dashpay/dips/blob/master/dip-0007.md#signing-request)** | | | Request quorum signing of a message (e.g. InstantSend transaction input) (intra-quorum communication) | +| `qsigsesann` message | → | | Masternode sends a signing session announcement _to other masternodes in the quorum_ +| **[Share Propagation Phase](https://github.com/dashpay/dips/blob/master/dip-0007.md#propagating-signature-shares)** | | | Members exchange signature shares within the quorum (intra-quorum communication) | +| `qsigsinv` message | → | | Masternode sends one or more quorum signature share inventories _to other masternodes in the quorum_
_May occur multiple times in this phase_ +| | ← | `qgetsigs` message (qcontrib) | Peer(s) respond with request for signature shares
_May occur multiple times in this phase_ +| `qbsigs` message | → | | Masternode sends the requested batched signature share(s)
_May occur multiple times in this phase_ +| **[Threshold Signature Recovery Phase](https://github.com/dashpay/dips/blob/master/dip-0007.md#recovered-threshold-signatures)** | | | A recovered signature is created by a quorum member once valid signature shares from at least the threshold number of members have been received | +| `qsigrec` message | → | | Masternode sends the quorum recovered signature **to all peers** (except those that have asked to be excluded via a `qsendrecsigs` message) + +Note the following timeouts defined by Dash Core related to signing sessions: + +| Parameter | Timeout, sec | Description | +| `SESSION_NEW_SHARES_TIMEOUT` | 60 | Time to wait for new shares | +| `SIG_SHARE_REQUEST_TIMEOUT` | 5 | Time to wait for a requested share before requesting from a different node | +| `SESSION_TOTAL_TIMEOUT` | 300 | Time to wait for session to complete | + +{% endautocrossref %} + +#### Quorum Selection {% include helpers/subhead-links.md %} {% autocrossref %} -Dash quorums are used to facilitate the operation of masternode provided -features in a decentralized, deterministic way. - | Quorum Type | Members | Consensus | Description | | ----------- | ------- | --------- | ----------- | -| InstantSend | 10 | Majority | A set of 10 masternodes are selected for _each_ input of the InstantSend transaction. A majority (6+) of them must agree to lock the input. If all inputs in the transaction can be locked, it becomes a successful InstantSend. +| Classic
(non-LLMQ) InstantSend | 10 | Majority | A set of 10 masternodes are selected for _each_ input of the InstantSend transaction. A majority (6+) of them must agree to lock the input. If all inputs in the transaction can be locked, it becomes a successful InstantSend. | MN Payments | 10 | Majority | A set of 10 masternodes are selected for each block. A majority (6+) of them must agree on the masternode payee for the next block. -| MN Broadcast | 10 | Majority | If a majority (6+) of nodes agree, a new `mnb` message is not required. +| MN Broadcast | 10 | Majority | _Deprecated by DIP3 (deterministic masternode list) in Dash Core 0.13._

If a majority (6+) of nodes agree, a new `mnb` message is not required. + +{% endautocrossref %} + +### Proof of Service +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +The Proof of Service (PoSe) scoring system helps incentivize masternodes to +provide network services. Masternodes that neglect to participate receive an +increased PoSe score which eventually results in them being excluded from +masternode payment eligibility. + +The current PoSe scoring system is based on participation in the LLMQ DKG +process. This scoring system will expand over time to incorporate additional +service requirements in support of the future Dash Platform (Evolution) +functionality. + +| Service | Percent of Score | Requirement | +| ----------- | ---- | ------------------- | +| LLMQ DKG | 100% | Participate in the DKG process used to establish LLMQs. Requires exchanging messages with other quorum members. | + +**PoSe Score Calculation** + +As shown in the following table, the PoSe Score always decreases by 1 per block +as long as a masternode has not been banned. Once banned, the masternode can +only be restored by sending a Provider Update Service (ProUpServTx) special +transaction. + +| PoSe Parameter | Value | Example Value | +|-|-|-| +| Maximum PoSe Score | Number of registered masternodes | 5000 | +| PoSe Score Increases | Maximum PoSe Score * 2/3 | 3333 | +| PoSe Score Decreases | 1 (per block) | Always `1` | + +The current PoSe scoring algorithm increases the PoSe score by 66% of the +maximum score for each failed DKG session. Depending on timing, this allows for +no more than 2 failures for a masternode within a payment cycle (i.e a +number of blocks equal to the number of registered masternodes). + +For example, using the values from above with 5000 masternodes: + +- In the first 5000 block cycle, two DKG failures occur without the PoSe score exceeding the maximum. This happens since a sufficient number of blocks are mined prior to the second failure to drop the PoSe score below the threshold (`< 5000 - 3333`) that would result in banning. + +- In the second 5000 block cycle, the second DKG failure occurs too close to the first and results in the PoSe score exceeding the maximum limit. This results in the masternode receiving a PoSe Ban. + +| Payment Cycle | Block Number | Event | Score Change | PoSe Score | Masternode Status | +|-|-|-|-|-|-| +| 1 | 1 | DKG Failure (1) | +3333 | 3333 | Valid | +| 1 | 1734 | 1733 Blocks Mined | -1733 | 1600 | Valid | +| 1 | 1734 | DKG Failure (2) | +3333 | 4933 | Valid | +| 1 | 5000 | 3266 Blocks Mined | -3266 | 1667 | Valid | +| | | End of Payment Cycle 1| | | | +| 2 | 5500 | 500 Blocks Mined | -500 | 1167 | Valid | +| 2 | 5500 | DKG Failure (3) | +3333 | 4500 | Valid | +| 2 | 7000 | 1500 Blocks Mined | -1500 | 3000 | Valid | +| 2 | 7000 | DKG Failure (4) | +3333 | 6333 | PoSe Banned | +| 2 | 10000 | End of Payment Cycle 2 | - | 6333 | PoSe Banned | + +{% endautocrossref %} + +### Historical Reference + + +![Warning icon](/img/icons/icon_warning.svg) **The following information is +deprecated and for historical reference only. It describes features that have +been redesigned and no longer operate as described below.** + +#### InstantSend (original) +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +![Warning icon](/img/icons/icon_warning.svg) **Please see [here for details of the current InstantSend design](#instantsend).** + +Dash Core's InstantSend feature provides a way to lock transaction inputs and +enable secure, instantaneous transactions. Since Dash Core 0.13.0, any qualifying +transaction is automatically upgraded to InstantSend by the network without a +need for the sending wallet to explicitly request it. For these simple +transactions (those containing 4 or fewer inputs), the previous requirement for +a special InstantSend transaction fee was also removed. The criteria for +determining eligibility can be found in the lists of limitations below. + +The following video provides an overview with a good introduction to the details +including the InstantSend vulnerability that was fixed in Dash Core 0.12.2. +Some specific points in the video are listed here for quick reference: + + - 2:00 - InstantSend restrictions + - 5:00 - Masternode quorum creation + - 6:00 - Input locking + - 7:45 - Quorum score calculation / Requirement for block confirmations + - 9:00 - Description of Dash Core pre-0.12.2 InstantSend vulnerability + - 13:00 - Description of vulnerability fix / Post Dash Core 0.12.2 operation + +{% endautocrossref %} + + + +{% autocrossref %} + +*InstantSend Data Flow* + +| **InstantSend Client** | **Direction** | **Peers** | **Description** | +| `inv` message (ix) | → | | Client sends inventory for transaction lock request +| | ← | `getdata` message (ix) | Peer responds with request for transaction lock request +| `ix` message | → | | Client sends InstantSend transaction lock request +| | ← | `inv` message (txlvote) | Masternodes in the [quorum](#quorum-selection) respond with votes +| `getdata` message (txlvote) | → | | Client requests vote +| | ← | `txlvote` message | Peer responds with vote + +Once an InstantSend lock has been requested, the `instantsend` field of various +RPCs (e.g. the `getmempoolentry` RPC) is set to `true`. Then, if a sufficient +number of votes approve the transaction lock, the InstantSend transaction is approved +the `instantlock` field of the RPC is set to `true`. + +If an InstantSend transaction is a valid transaction but does not receive a +transaction lock, it reverts to being a standard transaction. + +There are a number of limitations on InstantSend transactions: + +* The lock request will timeout 15 seconds after the first vote is seen (`INSTANTSEND_LOCK_TIMEOUT_SECONDS`) +* The lock request will fail if it has not been locked after 60 seconds (`INSTANTSEND_FAILED_TIMEOUT_SECONDS`) +* A “per-input” fee of 0.0001 DASH per input is required for non-simple transactions (inputs >=5) since they place a higher load on the masternodes. This fee was most +recently decreased by [DIP-0001](https://github.com/dashpay/dips/blob/master/dip-0001.md). +* To be used in an InstantSend transaction, an input must have at least the number confirmations (block depth) indicated by the table below + +| **Network** | **Confirmations Required** | +|---------|--------------| +| Mainnet | 6 Blocks | +| Testnet | 2 Blocks | +| Regtest | 2 Blocks | +| Devnet | 2 Blocks | + +There are some further limitations on Automatic InstantSend transactions: + +* DIP3 must be active +* Spork 16 must be enabled +* Mempool usage must be lower than 10% (`AUTO_IX_MEMPOOL_THRESHOLD`). As of Dash Core 0.13.0, this corresponds to a mempool size of 30 MB (`DEFAULT_MAX_MEMPOOL_SIZE` = 300 MB). + +**Historical Note** + +Prior to Dash Core 0.13.0, `instantsend` and `instantlock` values were not +available via RPC. At that time, the InstantSend system worked as described below. + +Once a sufficient number of votes approved the transaction lock, the InstantSend +transaction was approved and showed 5 confirmations (`DEFAULT_INSTANTSEND_DEPTH`). + +NOTE: The 5 "pseudo-confirmations" were shown to convey confidence that the +transaction was secure from double-spending and DID NOT indicate the transaction +had already been confirmed to a block depth of 5 in the blockchain. + +{% endautocrossref %} + + +#### Masternode Payment (original) +{% include helpers/subhead-links.md %} + +![Warning icon](/img/icons/icon_warning.svg) **The following information is for +historical reference only. It describes the masternode payment process that was +used prior to the deterministic masternode list update in Dash Core v0.13 that +implemented DIP3.** + +Please see [here for details of the current system](#masternode-payment) + +{% autocrossref %} + +Prior to DIP3, the masternode payment process operated as described below. + +Masternode payment uses a verifiable process to determine which masternode is +paid in each block. When a new block is processed, a quorum of +`MNPAYMENTS_SIGNATURES_TOTAL` (10) masternodes vote on the next masternode +payee. The quorum is calculated deterministically based on the distance between +masternode's hash and the block's proof of work. + +Each member of the quorum issues a 'mnw' message that is relayed to the +network. The payee is selected from a subset of masternodes made up of 10% +of eligible nodes that have been waiting the longest since their last payment. +The winner is then determined based on a number of parameters including the +distance between the its hash and the block's proof of work. For additional +detail, reference this [Official Documentation Payment Logic page](https://docs.dash.org/en/0.12.3/masternodes/understanding.html#payment-logic). + +Nodes receiving a `mnw` message verify the validity of the message before +relaying it to their peers. If the message is invalid, the sending node may be +treated as misbehaving and have its ban score increased. + +{% endautocrossref %} + + +#### Masternode Sync (original) + + +![Warning icon](/img/icons/icon_warning.svg) **The following information is for +historical reference only. It describes the masternode sync process that was +used prior to the deterministic masternode list update in Dash Core v0.13 that +implemented DIP3.** + +Please see [here for details of the current system](#masternode-sync) + +##### Initial Sync + + +{% autocrossref %} + +This diagram shows the order in which P2P messages are sent to perform +masternode synchronization initially after startup. + +![Masternode Sync (Initial)](/img/dev/en-masternode-sync-initial.svg) + +The following table details the data flow of P2P messages exchanged during +initial masternode synchronization before the activation of DIP3 and Spork 15. + +| **Syncing Node Message** | **Direction** | **Masternode Response** | **Description** | +| **1. Sporks** | | | | +| `getsporks` message | → | | Syncing node requests sporks +| | ← | `spork` message(s) | +| **2. Masternode List** | | | Sync Masternode list from other connected clients | +| `dseg` message | → | | Syncing node requests masternode list +| | ← | `ssc` message | Number of entries in masternode list (MASTERNODE_SYNC_LIST)

Only sent if requesting entire list +| | ← | `inv` message(s) (mnb) | MSG_MASTERNODE_ANNOUNCE +| | ← | `inv` message(s) (mnp) | MSG_MASTERNODE_PING +| `getdata` message(s) (mnb) | → | | (Optional) +| `getdata` message(s) (mnp) | → | | (Optional) +| | ← | `mnb` message(s) | (If requested) Masternode announce message +| | ← | `mnp` message(s) | (If requested) Masternode ping message +| **3. Masternode payments** | | | Ask node for all payment votes it has (new nodes will only return votes for future payments) | +| `mnget` message | → | | Syncing node requests masternode payment sync +| | ← | `ssc` message | Number of entries in masternode payment list +| | ← | `inv` message(s) (mnw) | MSG_MASTERNODE_PAYMENT_VOTE +| `getdata` message(s) (mnw) | → | | (Optional) +| | ← | `mnw` message(s) | (If requested) Masternode payment vote message +| **4. Governance** | | | See [Governance sync](#governance) | + + +##### Ongoing Sync +{% include helpers/subhead-links.md %} + +Once a masternode completes an initial full sync, continuing synchronization is +maintained by the exchange of P2P messages with other nodes. This diagram shows +an overview of the messages exchanged to keep the masternode list, masternode +payments, and governance objects synchronized between masternodes. + +![Masternode Sync (Ongoing)](/img/dev/en-masternode-sync-ongoing.svg) + +**Recurring Ping** + +![Warning icon](/img/icons/icon_warning.svg) NOTE: Deprecated following +activation of DIP3. + +Each masternode issues a ping (`mnp` message) periodically to notify the network +that it is still online. Masternodes that do not issue a ping for 3 hours will +be put into the `MASTERNODE_NEW_START_REQUIRED` state and will need to issue a +masternode announce (`mnb` message). + +**Masternode List** + +![Warning icon](/img/icons/icon_warning.svg) NOTE: Deprecated following +activation of DIP3. + +After the initial masternode list has been received, it is kept current by a +combination of the periodic `mnp` messages received from other masternodes, +the `mnb` messages sent by masternodes as they come online, and `mnv` messages +to verify that other masternodes are valid. + +Also, `dseg` messages can be sent to request masternode info when messages are +received that have been signed by an unrecognized masternode (most masternode/governance +messages include a `vin` value that can be used to verify the masternode's +unspent 1000 Dash). + +Unsynchronized peers may send a `dseg` message to request the entire masternode list. + +**Masternode Payment** + +![Warning icon](/img/icons/icon_warning.svg) NOTE: Deprecated following +activation of DIP3. + +After the initial masternode payment synchronization, payment information is +kept current via the `mnw` messages relayed on the network. Unsynchronized peers +may send a `mnget` message to request masternode payment sync. + +##### Sync Schedule +{% include helpers/subhead-links.md %} + +Prior to the deterministic masternode system introduced by DIP3 in Dash Core 0.13, +the following additional sync actions were also required. + +| **Period (seconds)** | **Action** | **Description** | +| 1 | MN Check | ![Warning icon](/img/icons/icon_warning.svg) _Deprecated following activation of DIP3 and Spork 15_

Check the state of each masternode that is still funded and not banned. The action occurs once per second, but individual masternodes are only checked at most every 5 seconds (only a subset of masternodes are checked each time it runs) (masternodeman.cpp) | +| 60 | MN Check/Remove | ![Warning icon](/img/icons/icon_warning.svg) _Deprecated following activation of DIP3 and Spork 15_

Remove spent masternodes and check the state of inactive ones (masternodeman.cpp) | +| 60 | MN Payment Check/Remove | ![Warning icon](/img/icons/icon_warning.svg) _Deprecated following activation of DIP3 and Spork 15_

Remove old masternode payment votes/blocks (masternode-payments.cpp) | +| 300 | Full verification | ![Warning icon](/img/icons/icon_warning.svg) _Deprecated following activation of DIP3 and Spork 15_

Verify masternodes via direct requests (`mnv` messages - note time constraints in the Developer Reference section) (masternodeman.cpp) | +| 600 | Manage State | ![Warning icon](/img/icons/icon_warning.svg) _Deprecated following activation of DIP3 and Spork 15_

Sends masternode pings (`mnp` message). Also sends initial masternode broadcast (`mnb` message) for local masternodes. (activemasternode.cpp) | {% endautocrossref %} diff --git a/_includes/devdoc/guide_p2p_network.md b/_includes/devdoc/guide_p2p_network.md index 7ef46a5d..4248181c 100644 --- a/_includes/devdoc/guide_p2p_network.md +++ b/_includes/devdoc/guide_p2p_network.md @@ -587,60 +587,52 @@ information. If a peer gets a banscore above the `-banscore=` threshold | Type | Misbehavior | Ban Score | Description | | ---- | ----------- | --------- | ----------- | +| Net | GetBlockTxn Index Error | **100** | Peer relayed a `getblocktxn` message with out-of-bound indices | Net | Bloom Filter Service | **100** | Bloom filter message received from peer that has bloom filter commands disabled by default (protocol version > 70201) (`filterload` message, `filteradd` message, or `filterclear` message) +| Net | Block Rejected | 1 | Peer rejected the block it requested from us | Net | Duplicate Version | 1 | Duplicate `version` message received +| Net | Wrong Devnet | **100** | Peer responded with the wrong devnet version (`version` message) +| Net | Wrong Devnet | 1 | Peer connected using the wrong devnet version (`version` message) | Net | No Version | 1 | Received a message prior to receiving a `version` message +| Net | No Verack | 1 | After sending `version` message, received a message other than a `verack` message back first | Net | Address List Size | 20 | More than 1000 addresses received (`addr` message) -| Net | Inventory List | 20 | More than 50000 inventories received (`inv` message) -| Net | Get Data Size | 20 | More than 50000 inventories requested (`getdata` message) +| Net | Inventory List | 20 | More than `MAX_INV_SZ` (50000) inventories received (`inv` message) +| Net | Get Data Size | 20 | More than `MAX_INV_SZ` (50000) inventories requested (`getdata` message) | Net | Orphan Transaction | **Varies** | Peer relayed an invalid orphan transaction. Ban score varies from 0-100 based on the specific reason (values set by `AcceptToMemoryPoolWorker()`) | Net | Bad Transaction | **Varies** | Transaction rejected from the mempool -| Net | Header List Size | 20 | More than 2000 headers received (`headers` message) +| Net | Invalid Header | **Varies** | Invalid block header received from peer (`cmpctblock` message) +| Net | Invalid CompactBlock | **100** | Invalid compact block /non-matching block transactions received from peer (`cmpctblock` message) +| Net | Header List Size | 20 | More than `MAX_HEADERS_RESULTS` (2000) headers received (`headers` message) | Net | Header List Sequence | 20 | Non-continous headers sequence received (`headers` message) -| Net | Invalid Block | Varies | Invalid block header received from peer -| Net | Invalid/Expired Alert | 10 | Invalid or expired alert received (`alert` message) +| Net | Invalid Block | **Varies** | Invalid block header received from peer | Net | Bloom Filter Size | **100** | Maximum script element size (520) exceeded (`filterload` message or `filteradd` message) -| Masternode Manager | Invalid Broadcast | **Varies** | Timestamp in past (1), public key issue (**100**), signature issue (**100**), or collateral doesn't match vin (33) (`mnb` message) -| Masternode Manager | Invalid Ping | **Varies** | Signature too far in future (1), bad ping signature (33) -| Masternode Manager | List Sync | 34 | Requesting a sync of the entire masternode list too frequently (`dseg` message) -| Masternode Manager | Verify | 20 | Peer requested a verification too recently (`mnv` message) -| Masternode Manager | Unrequested Verify | 20 | Peer provided unrequested verification (`mnv` message) -| Masternode Manager | Verify Nonce | 20 | Masternode verification contains the wrong nonce (`mnv` message) -| Masternode Manager | Verify Block Height| 20 | Masternode verification contains the wrong block height (`mnv` message) -| Masternode Manager | Duplicate Verify | 20 | Peer provided a duplicate verification (`mnv` message) -| Masternode Manager | Invalid Masternode | 20 | No masternode found for the provided address (`mnv` message) -| Masternode Manager | Invalid Verify | **100** | Masternode "verified" itself (`mnv` message) +| Net | MN List Diff | 1 | Failed to get masternode list diff (`getmnlistd` message) +| Net | Unrequested MN List Diff | **100** | Peer provided an unrequested masternode list diff (`mnlistdiff` message) +| InstantSend | Invalid Lock Message | **100** | Invalid TXID or inputs in lock message (`islock` message) +| InstantSend | Verify Error | 20 | Peer relayed a message that failed to verify +| LLMQ ChainLock | Invalid | 10 | Invalid ChainLock message (`clsig` message) +| LLMQ Commitment | Null QcTx | **100** | Peer relayed a block with a null commitment +| LLMQ Commitment | Invalid LLMQ Type | **100** | Peer relayed a block containing an invalid LLMQ Type +| LLMQ Commitment | Invalid Height | **100** | Peer relayed a block that is not the first block in the DKG interval +| LLMQ Commitment | Invalid Commitment | **100** | Peer relayed a block with an invalid quorum commitment +| LLMQ DKG | Empty Message | **100** | Peer relayed a message with no payload +| LLMQ DKG | Invalid LLMQ Type | **100** | Peer relayed a message for an incorrect LLMQ Type +| LLMQ DKG | Invalid Message | **100** | Peer relayed a message that could not be deserialized +| LLMQ DKG | Preverify Failed | **100** | Peer relayed a message that could not be pre-verified +| LLMQ DKG | Signature | **100** | Peer relayed a message with an invalid signature +| LLMQ DKG | Full Verify Failed | **100** | Peer relayed a message that failed full verification +| LLMQ Signing | Too Many Messages | **100** | Maximum message count exceed in `qsigsesann` message, `qsigsinv` message, `qgetsigs` message, or `qbsigs` message +| LLMQ Signing | Signature | **100** | Peer relayed a message with an invalid recovered signature or signature share +| Masternode Authentication | Duplicate Message | **100** | Only 1 message allowed (`mnauth` message) +| Masternode Authentication | Signature | **100** | Peer relayed a message with an invalid signature (`mnauth` message) +| Masternode Authentication | Invalid MN | 10 | Peer not in the valid masternode list (`mnauth` message) | Governance | Sync | 20 | Requesting a governance sync too frequently (`govsync` message with empty hash) | Governance | Invalid Object | 20 | Peer relayed an invalid governance object (`govobj` message) | Governance | Invalid Vote | 20 | Peer relayed an invalid/invalid old vote(`govobjvote` message) | Governance | Unsupported Vote Signal | 20 | Vote signal outside the accepted range (see `govobjvote` message) -| Masternode Payment | Sync | 20 | Requesting a masternode payment sync too frequently (`mnget` message) -| Masternode Payment | Vote Signature | 20 | Invalid signature on payment vote (`mnw` message) -| Masternode Payment | Non-quorum Vote | 20 | Payment vote from masternode not in the quorum. Rule activates with DIP1 (`mnw` message) +| PrivateSend | Signature | 10 | Peer relayed a message with an invalid signature (`dsq` message) +| Spork | Invalid Time | **100** | Peer relayed a spork with a timestamp too far in the future (`spork` message) | Spork | Signature | **100** | Peer relayed a spork with an invalid signature (`spork` message) -{% endautocrossref %} - -### Alerts -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -*Removed in Bitcoin Core 0.13.0. Retained in Dash Core (see [PR1326](https://github.com/dashpay/dash/pull/1326)).* - -In case of a bug or attack, the Dash Core developers can issue an alert via the -Dash network. Alerts will be displayed by the Dash Core UI. Users can also -check the error field of the `getinfo` RPC results to get currently active -alerts for their specific version of Dash Core or use the `-alertnotify` command -line parameter to specify a custom command to execute when an alert is received. - -These messages are aggressively broadcast using the `alert` message, being sent -to each peer upon connect for the duration of the alert. These messages are -signed by a specific ECDSA private key that only a small number of developers -control. - -**Resource:** More details about the structure of `alert` messages and a -complete list of message types can be found in the [P2P reference section][section P2P reference]. - {% endautocrossref %} diff --git a/_includes/devdoc/guide_transactions.md b/_includes/devdoc/guide_transactions.md index db7e9cd4..d9f74257 100644 --- a/_includes/devdoc/guide_transactions.md +++ b/_includes/devdoc/guide_transactions.md @@ -456,6 +456,29 @@ number of data pushes, provided the total byte limit is not exceeded. There must still only be a single null data output and it must still pay exactly 0 duffs. +**Note:** Since the null data output must include opcodes, the limit for data +is less than 83 bytes. A typical OP_RETURN is limited to 80 bytes +due to the following 3 required bytes: + + * OP_RETURN (0x6a) + * OP_PUSHDATA1 (0x4c) + * Data Size (e.g. 0x50 for 80 bytes) + + +The following annotated hexdump shows an example OP_RETURN output: + +{% highlight bash %} +6a ......................................... OP_RETURN Opcode +4c ......................................... OP_PUSHDATA1 Opcode +50 ......................................... Bytes to push: 80 + +48656c6c6f2066726f6d207468657068657a203 +a2d29205468697320697320746865206d617869 +6d756d2074657874206c656e67746820616c6c6 +f77656420666f7220616e204f505f5245545552 +4e2e ....................................... Data +{% endhighlight %} + The `-datacarriersize` Dash Core configuration option allows you to set the maximum number of bytes in null data outputs that you will relay or mine. @@ -648,18 +671,12 @@ Dash miner, as explained in the [block chain section][section block chain], and so it is ultimately up to each miner to choose the minimum transaction fee they will accept. -There is also a concept of so-called "[high-priority transactions][/en/glossary/high-priority-transaction]{:#term-high-priority-transactions}{:.term}" -which spend duffs that have not moved for a long time. - -These "priority" transaction can be often exempt from the normal fee -requirements. As of Dash Core 0.12.2, 10 KB of each block are reserved for these -high-priority transactions. After the priority area, all transactions are -prioritized based on their fee per byte, with higher-paying transactions being -added in sequence until all of the available space is filled. +All transactions are prioritized based on their fee per byte, with higher-paying +transactions being added in sequence until all of the available space is filled. -As of Dash Core 0.12.2.x, a [minimum fee][/en/glossary/minimum-relay-fee]{:#term-minimum-fee}{:.term}(1,000 duffs following [DIP1][] activation) is required to -broadcast a non-priority transaction across the network. Any transaction paying +As of Dash Core 0.12.2.x, a [minimum fee][/en/glossary/minimum-relay-fee]{:#term-minimum-fee}{:.term} (1,000 duffs following [DIP1][] activation) is required to +broadcast a transaction across the network. Any transaction paying only the minimum fee should be prepared to wait a long time before there's enough spare space in a block to include it. @@ -727,7 +744,7 @@ So, for both privacy and security, we encourage you to build your applications to avoid public key reuse and, when possible, to discourage users from reusing addresses. If your application needs to provide a fixed URI to which payments should be sent, please use `dash:` URIs as defined -by [BIP21](https://github.com/QuantumExplorer/bips/blob/master/bip-0021.mediawiki#general-format). +by [BIP21](https://github.com/dashevo/bips/blob/master/bip-0021.mediawiki#general-format). {% endautocrossref %} @@ -756,6 +773,14 @@ be added to the block chain immediately. But it does become a problem when the output from a transaction is spent before that transaction is added to the block chain. +Dash Core 12.3 implemented [BIP-147: Dealing with dummy stack element malleability](https://github.com/bitcoin/bips/blob/master/bip-0147.mediawiki) +which fixes a design flaw in OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY that +caused them to consume an extra stack element ("dummy element") after signature +validation. Previously, the dummy element was not inspected in any manner, and could be +replaced by any value without invalidating the script. BIP147 removed this +malleability vector by forcing the dummy element to be an empty byte array and +rejecting anything else. + -in-dash-9536868ca861) +by one of the Dash Core developers. + {% endautocrossref %} diff --git a/_includes/devdoc/ref_bips.md b/_includes/devdoc/ref_bips.md index c3bedc71..8441afab 100644 --- a/_includes/devdoc/ref_bips.md +++ b/_includes/devdoc/ref_bips.md @@ -48,7 +48,7 @@ column indicates if any changes were made. Dash-specific BIP information derived from Dash developer -[QuantumExplorer's BIP repository](https://github.com/QuantumExplorer/bips/blob/master/README.mediawiki). +[Dash's BIP repository](https://github.com/dashevo/bips/blob/master/README.mediawiki). {% include layout/base/bip-table.html %} diff --git a/_includes/devdoc/ref_p2p_networking.md b/_includes/devdoc/ref_p2p_networking.md index 3f4afbcb..e18b551e 100644 --- a/_includes/devdoc/ref_p2p_networking.md +++ b/_includes/devdoc/ref_p2p_networking.md @@ -38,8 +38,8 @@ The following constants and defaults are taken from Dash Core's |---------|--------------|-----------------------------------------------|--------------- | Mainnet | 9999 | 0xBD6B0CBF | 0xBF0C6BBD | 0x1e0ffff0 | Testnet | 19999 | 0xFFCAE2CE | 0xCEE2CAFF | 0x1e0ffff0 -| Regtest | 19994 | 0xDCB7C1FC | 0xFCC1B7DC | 0x207fffff -| Devnet | User-defined | 0xCEFFCAE2 | 0xE2CAFFCE | 0x207fffff +| Regtest | 19899 | 0xDCB7C1FC | 0xFCC1B7DC | 0x207fffff +| Devnet | User-defined (default 19799) | 0xCEFFCAE2 | 0xE2CAFFCE | 0x207fffff Note: the testnet start string and nBits above are for testnet3. @@ -66,10 +66,13 @@ with the most recent versions listed first. (If you know of a protocol version that implemented a major change but which is not listed here, please [open an issue][docs issue].) -As of Dash Core 0.12.3.0, the most recent protocol version is 70210. +As of Dash Core 0.14.0, the most recent protocol version is 70215. | Version | Initial Release | Major Changes |---------|------------------------------------|-------------- +| 70215 | Dash Core 0.14.0.1
(May 2019) | • None (Governance bugfix only) +| 70214 | Dash Core 0.14.0.0
(May 2019) | • Long-living Masternode Quorums
• ChainLocks
• PrivateSend improvements
• Experimental LLMQ InstantSend
• Bitcoin Core 0.15 backports +| 70213 | Dash Core 0.13.0.x
(Jan 2019) | • Special Transactions
• Deterministic Masternode List
• Coinbase Special Transaction
• Automatic InstantSend | 70210 | Dash Core 0.12.3.x
(July 2018) | • Named Devnets
• New signature format / Spork 6 addition
• Bitcoin Core 0.13/0.14 backports
• [BIP90][]: Buried deployments
• [BIP147][]: NULLYDUMMY enforcement
• [BIP152][] Compact Blocks
• Transaction version increased to 2
• Zero fee transactions removed
• Pruning in Lite Mode | 70208 | Dash Core 0.12.2.x
(Nov 2017) | • [DIP1][] (2MB blocks)
• Fee reduction (10x)
• InstantSend fix
• PrivateSend improvements
• _Experimental_ HD wallet
• Local Masternode support removed | 70206 | Dash Core 0.12.1.x
(Mar 2017) | • Switch to Bitcoin Core 0.12.1
• BIP-0065 (CheckLockTimeVerify)
• BIP-0112 (CheckSequenceVerify) @@ -156,24 +159,39 @@ The currently-available type identifiers are: | 1 | [`MSG_TX`][msg_tx]{:#term-msg_tx}{:.term} | The hash is a TXID. | 2 | [`MSG_BLOCK`][msg_block]{:#term-msg_block}{:.term} | The hash is of a block header. | 3 | [`MSG_FILTERED_BLOCK`][msg_filtered_block]{:#term-msg_filtered_block}{:.term} | The hash is of a block header; identical to `MSG_BLOCK`. When used in a `getdata` message, this indicates the response should be a `merkleblock` message rather than a `block` message (but this only works if a bloom filter was previously configured). **Only for use in `getdata` messages.** -| 4 | [`MSG_TXLOCK_REQUEST`][msg_txlock_request]{:#term-msg_txlock_request}{:.term} | The hash is an Instant Send transaction lock request. -| 5 | [`MSG_TXLOCK_VOTE`][msg_txlock_vote]{:#term-msg_txlock_vote}{:.term} | The hash is an Instant Send transaction vote. +| 4 | [`MSG_LEGACY_TXLOCK_REQUEST`][msg_txlock_request]{:#term-msg_txlock_request}{:.term} | `MSG_TXLOCK_REQUEST` prior to Dash Core 0.14.1. The hash is an Instant Send transaction lock request. Transactions received this way are automatically converted to a standard `tx` message as of Dash Core 0.14.1. | 6 | [`MSG_SPORK`][msg_spork]{:#term-msg_spork}{:.term} | The hash is Spork ID. -| 7 | [`MSG_MASTERNODE_PAYMENT_VOTE`][msg_masternode_payment_vote]{:#term-msg_masternode_payment_vote}{:.term} | The hash is a Masternode Payment Vote. -| 8 | [`MSG_MASTERNODE_PAYMENT_BLOCK`][msg_masternode_payment_block]{:#term-msg_masternode_payment_block}{:.term} | The hash is a Masternode Payment Block. -| _8_ | _`MSG_MASTERNODE_SCANNING_ERROR`_ | Replaced by `MSG_MASTERNODE_PAYMENT_BLOCK` -| _9_ | _[`MSG_BUDGET_VOTE`][msg_budget_vote]{:#term-msg_budget_vote}{:.term}_ | Deprecated -| _10_ | _[`MSG_BUDGET_PROPOSAL`][msg_budget_proposal]{:#term-msg_budget_proposal}{:.term}_ | Deprecated -| _11_ | _[`MSG_BUDGET_FINALIZED`][msg_budget_finalized]{:#term-msg_budget_finalized}{:.term}_ | Deprecated -| _12_ | _[`MSG_BUDGET_FINALIZED_VOTE`][msg_budget_finalized_vote]{:#term-msg_budget_finalized_vote}{:.term}_ | Deprecated -| _13_ | _[`MSG_MASTERNODE_QUORUM`][msg_masternode_quorum]{:#term-msg_masternode_quorum}{:.term}_ | Not Implemented -| 14 | [`MSG_MASTERNODE_ANNOUNCE`][msg_masternode_announce]{:#term-msg_masternode_announce}{:.term} | The hash is a Masternode Broadcast. -| 15 | [`MSG_MASTERNODE_PING`][msg_masternode_ping]{:#term-msg_masternode_ping}{:.term} | The hash is a Masternode Ping. | 16 | [`MSG_DSTX`][msg_dstx]{:#term-msg_dstx}{:.term} | The hash is Private Send (Dark Send) Broadcast TX. | 17 | [`MSG_GOVERNANCE_OBJECT`][msg_governance_object]{:#term-msg_governance_object}{:.term} | The hash is a Governance Object. | 18 | [`MSG_GOVERNANCE_OBJECT_VOTE`][msg_governance_object_vote]{:#term-msg_governance_object_vote}{:.term} | The hash is a Governance Object Vote. -| 19 | [`MSG_MASTERNODE_VERIFY`][msg_masternode_verify]{:#term-msg_masternode_verify}{:.term} | The hash is a Masternode Verify. | 20 | [`MSG_CMPCT_BLOCK`][msg_cmpct_block]{:#term-msg_cmpct_block}{:.term} | The hash is of a block header; identical to `MSG_BLOCK`. When used in a `getdata` message, this indicates the response should be a `cmpctblock` message. **Only for use in `getdata` messages.** +| 21 | [`MSG_QUORUM_FINAL_COMMITMENT`][msg_quorum_final_commitment]{:#term-msg_quorum_final_commitment}{:.term} | The hash is a long-living masternode quorum final commitment.
_Added in 0.13.0_ +| 23 | [`MSG_QUORUM_CONTRIB`][msg_quorum_contrib]{:#term-msg_quorum_contrib}{:.term} | The hash is a long-living masternode quorum contribution.
_Added in 0.14.0_ +| 24 | [`MSG_QUORUM_COMPLAINT`][msg_quorum_complaint]{:#term-msg_quorum_complaint}{:.term} | The hash is a long-living masternode quorum complaint.
_Added in 0.14.0_ +| 25 | [`MSG_QUORUM_JUSTIFICATION`][msg_quorum_justification]{:#term-msg_quorum_justification}{:.term} | The hash is a long-living masternode quorum justification.
_Added in 0.14.0_ +| 26 | [`MSG_QUORUM_PREMATURE_COMMITMENT`][msg_quorum_premature_commitment]{:#term-msg_quorum_premature_commitment}{:.term} | The hash is a long-living masternode quorum premature commitment.
_Added in 0.14.0_ +| 28 | [`MSG_QUORUM_RECOVERED_SIG`][msg_quorum_recovered_sig]{:#term-msg_quorum_recovered_sig}{:.term} | The hash is a long-living masternode quorum recovered signature.
_Added in 0.14.0_ +| 29 | [`MSG_CLSIG`][msg_clsig]{:#term-msg_clsig}{:.term} | The hash is a ChainLock signature.
_Added in 0.14.0_ +| 30 | [`MSG_ISLOCK`][msg_islock]{:#term-msg_islock}{:.term} | The hash is an LLMQ-based InstantSend lock.
_Added in 0.14.0_ + +The deprecated type identifiers are: + +| Type Identifier | Name | Description +|-----------------|-------------------------------------------------------------------------------|--------------- +| 5 | [`MSG_TXLOCK_VOTE`][msg_txlock_vote]{:#term-msg_txlock_vote}{:.term} | **Deprecated in 0.14.1**

The hash is an Instant Send transaction vote. +| 7 | [`MSG_MASTERNODE_PAYMENT_VOTE`][msg_masternode_payment_vote]{:#term-msg_masternode_payment_vote}{:.term} | **Deprecated in 0.14.0**

The hash is a Masternode Payment Vote. +| 8 | [`MSG_MASTERNODE_PAYMENT_BLOCK`][msg_masternode_payment_block]{:#term-msg_masternode_payment_block}{:.term} | **Deprecated in 0.14.0**

The hash is a Masternode Payment Block. +| 8 | `MSG_MASTERNODE_SCANNING_ERROR` | Replaced by `MSG_MASTERNODE_PAYMENT_BLOCK` +| 9 | [`MSG_BUDGET_VOTE`][msg_budget_vote]{:#term-msg_budget_vote}{:.term} | Deprecated +| 10 | [`MSG_BUDGET_PROPOSAL`][msg_budget_proposal]{:#term-msg_budget_proposal}{:.term} | Deprecated +| 11 | [`MSG_BUDGET_FINALIZED`][msg_budget_finalized]{:#term-msg_budget_finalized}{:.term} | Deprecated +| 12 | [`MSG_BUDGET_FINALIZED_VOTE`][msg_budget_finalized_vote]{:#term-msg_budget_finalized_vote}{:.term} | Deprecated +| 13 | [`MSG_MASTERNODE_QUORUM`][msg_masternode_quorum]{:#term-msg_masternode_quorum}{:.term} | Not Implemented +| 14 | [`MSG_MASTERNODE_ANNOUNCE`][msg_masternode_announce]{:#term-msg_masternode_announce}{:.term} | **Deprecated in 0.14.0**

The hash is a Masternode Broadcast. +| 15 | [`MSG_MASTERNODE_PING`][msg_masternode_ping]{:#term-msg_masternode_ping}{:.term} | **Deprecated in 0.14.0**

The hash is a Masternode Ping. +| 19 | [`MSG_MASTERNODE_VERIFY`][msg_masternode_verify]{:#term-msg_masternode_verify}{:.term} | **Deprecated in 0.14.0**

The hash is a Masternode Verify. +| 22 | `MSG_QUORUM_DUMMY_COMMITMENT` | **Deprecated in 0.14.0**

Temporarily used on Testnet only. +| 27 | [`MSG_QUORUM_DEBUG_STATUS`][msg_quorum_debug_status]{:#term-msg_quorum_debug_status}{:.term} | **Deprecated in 0.14.0**

Temporarily used on Testnet only. Type identifier zero and type identifiers greater than twenty are reserved for future implementations. Dash Core ignores all inventories with @@ -542,6 +560,36 @@ to the `getheaders` message will include as many as 2,000 block headers. {% endautocrossref %} +#### GetMNListD +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70213* + +The `getmnlistd` message requests a `mnlistdiff` message that provides either: + + 1. A full masternode list (if `baseBlockHash` is all-zero) + 2. An update to a previously requested masternode list + +| Bytes | Name | Data type | Required | Description | +| ---------- | ----------- | --------- | -------- | -------- | +| 32 | baseBlockHash | uint256 | Required | Hash of a block the requester already has a valid masternode list of.
_Note: Can be all-zero to indicate that a full masternode list is requested._ +| 32 | blockHash | uint256 | Required | Hash of the block for which the masternode list diff is requested + +The following annotated hexdump shows a `getmnlistd` message. (The +message header has been omitted.) + +{% highlight text %} +000001ee5108348a2c59396da29dc576 +9b2a9bb303d7577aee9cd95136c49b9b ........... Base block hash + +0000030f51f12e7069a7aa5f1bc9085d +db3fe368976296fd3b6d73fdaf898cc0 ........... Block hash +{% endhighlight %} + +{% endautocrossref %} + #### Headers {% include helpers/subhead-links.md %} @@ -849,6 +897,120 @@ template near the beginning of this subsection. {% endautocrossref %} +#### MnListDiff +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70213* + +The `mnlistdiff` message is a reply to a `getmnlistd` message which +requested either a full masternode list or a diff for a range of blocks. + +| Bytes | Name | Data type | Required | Description | +| ---------- | ----------- | --------- | -------- | -------- | +| 32 | baseBlockHash | uint256 | Required | Hash of a block the requester already has a valid masternode list of. Can be all-zero to indicate that a full masternode list is requested. +| 32 | blockHash | uint256 | Required | Hash of the block for which the masternode list diff is requested +| 4 | totalTransactions | uint32_t | Required | Number of total transactions in `blockHash` +| 1-9 | merkleHashesCount | compactSize uint | Required | Number of Merkle hashes +| variable | merkleHashes | vector | Required | Merkle hashes in depth-first order +| 1-9 | merkleFlagsCount | compactSize uint | Required | Number of Merkle flag bytes +| variable | merkleFlags | vector | Required | Merkle flag bits, packed per 8 in a byte, least significant bit first +| variable | cbTx | CTransaction | Required | The fully serialized coinbase transaction of `blockHash` +| 1-9 | deletedMNsCount | compactSize uint | Required | Number of ProRegTx hashes which were deleted after baseBlockHash +| variable | deletedMNs | vector | Required | A list of ProRegTx hashes for masternode which were deleted after `baseBlockHash` +| variable | mnList | vector | Required | The list of Simplified Masternode List (SML) entries which were added or updated since `baseBlockHash` +| 1-9 | deletedQuorumsCount | compactSize uint | Required | *Added in protocol version 70214*

Number of LLMQs which were deleted from the active set after `baseBlockHash` | +| variable | deletedQuorums | (uint8_t+uint256)[] | Required | *Added in protocol version 70214*

A list of LLMQ type and quorum hashes for LLMQs which were deleted after `baseBlockHash` | +| 1-9 | newQuorumsCount | compactSize uint | Required | *Added in protocol version 70214*

Number of new LLMQs which were added to the active set since `baseBlockHash` | +| variable | newQuorums | qfcommit[] | Required | *Added in protocol version 70214*

The list of LLMQ commitments for the LLMQs which were added since `baseBlockHash` | + +Simplified Masternode List (SML) Entry + +| Bytes | Name | Data type | Description | +| ---------- | ----------- | -------- | -------- | +| 32 | proRegTxHash | uint256 | The hash of the ProRegTx that identifies the masternode +| 32 | confirmedHash | uint256 | The hash of the block at which the masternode got confirmed +| 16 | ipAddress | byte[] | IPv6 address in network byte order. Only IPv4 mapped addresses are allowed (to be extended in the future) +| 2 | port | uint_16 | Port (network byte order) +| 48 | pubKeyOperator | BLSPubKey | The operators public key +| 20 |keyIDVoting | CKeyID | The public key hash used for voting. +| 1 | isValid | bool | True if a masternode is not PoSe-banned + +The following annotated hexdump shows a `mnlistdiff` message. (The +message header has been omitted.) + +{% highlight text %} +000001ee5108348a2c59396da29dc576 +9b2a9bb303d7577aee9cd95136c49b9b ........... Base block hash + +0000030f51f12e7069a7aa5f1bc9085d +db3fe368976296fd3b6d73fdaf898cc0 ........... Block hash + +05000000 ................................... Transactions: 5 + +04 ......................................... Merkle hash count: 4 + +4488a599e5d61709664c32305befd58b +ef29e33bc6e718af0233f938557a57a9 ........... Merkle hash 1 +5c8119b7b136d94e477a0d2917d5f724 +5ff299cc6e31994f6236a8fb34fec88f ........... Merkle hash 2 +905efa3e6743c889823f00147d36d12f +d12ad401c19089f0affcabd423deef67 ........... Merkle hash 3 +3f3a7f84d7ad33214994b5aecf4c1e19 +2cb65b86750b1377e069073d1eba477a ........... Merkle hash 4 + +01 ......................................... Merkle flag count: 1 +0f ......................................... Flags: 0 0 0 0 1 1 1 1 + +[...]....................................... Coinbase Tx (Not shown) + +00 ......................................... Deleted masternodes: 0 + +02 ......................................... Masternode list entries: 2 + +00 ......................................... Deleted quorums: 0 + +00 ......................................... New quorums: 0 + +Masternode List +| Masternode 1 +| | 01040eb32f760490054543356cff4638 +| | 65633439dd073cffa570305eb086f70e ....... ProRegTx hash +| | +| | 000001ee5108348a2c59396da29dc576 +| | 9b2a9bb303d7577aee9cd95136c49b9b ....... Confirmed block hash +| | +| | 00000000000000000000000000000000 ....... IP Address: ::ffff:0.0.0.0 +| | 0000 ................................... Port: 0 +| | +| | 0000000000000000000000000000000000000000 +| | 0000000000000000000000000000000000000000 +| | 0000000000000000 ....................... Operator public key (BLS) +| | c2ae01fb4084cbc3bc31e7f59b36be228a320404 Voting pubkey hash (ECDSA) +| | +| | 0 ...................................... Valid (0 - No) +| +| Masternode 2 +| | f7737beb39779971e9bc59632243e13f +| | c5fc9ada93b69bf48c2d4c463296cd5a ....... ProRegTx hash +| | +| | 0000030f51f12e7069a7aa5f1bc9085d +| | db3fe368976296fd3b6d73fdaf898cc0 ....... Confirmed block hash +| | +| | 000000000000000000000000cf9af40d ....... IP Address: ::ffff:207.154.244.13 +| | 4e1f ................................... Port: 19999 +| | +| | 88d719278eef605d9c19037366910b59bc28d437 +| | de4a8db4d76fda6d6985dbdf10404fb9bb5cd0e8 +| | c22f4a914a6c5566 ....................... Operator public key (BLS) +| | 43ce12751c4ba45dcdfe2c16cefd61461e17a54d Voting pubkey hash (ECDSA) +| | +| | 1 ...................................... Valid (1 - Yes) +{% endhighlight %} + +{% endautocrossref %} + #### NotFound {% include helpers/subhead-links.md %} @@ -965,113 +1127,6 @@ d91f4854 ........................... Epoch time: 1414012889 {% endautocrossref %} -#### Alert -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -*Added in protocol version 311.* -*Removed by Bitcoin in protocol version 70013, but retained by Dash.* - -The `alert` message warns nodes of problems that may affect them or the -rest of the network. Each `alert` message is signed using a key controlled -by respected community members, mostly Dash Core developers. - -To ensure all nodes can validate and forward `alert` messages, -encapsulation is used. Developers create an alert using the data -structure appropriate for the versions of the software they want to -notify; then they serialize that data and sign it. The serialized data -and its signature make up the outer `alert` message---allowing nodes -which don't understand the data structure to validate the signature and -relay the alert to nodes which do understand it. The nodes which -actually need the message can decode the serialized data to access the -inner `alert` message. - -The outer `alert` message has four fields: - -| Bytes | Name | Data Type | Description -|-------------|-----------------|------------------|------------- -| *Variable* | alert bytes | compactSize uint | The number of bytes in following alert field. -| *Variable* | alert | uchar | The serialized alert. See below for a description of the current alert format. -| *Variable* | signature bytes | compactSize uint | The number of bytes in the following signature field. -| *Variable* | signature | uchar | A DER-encoded ECDSA (secp256k1) signature of the alert signed with the developer's alert key. - -Although designed to be easily upgraded, the format of the inner -serialized alert has not changed since the `alert` message was first -introduced in protocol version 311. - -| Bytes | Name | Data Type | Description -|----------|-------------------|---------------------------|------------- -| 4 | version | int32_t | Alert format version. Version 1 from protocol version 311 through at least protocol version 70002. -| 8 | relayUntil | int64_t | The time beyond which nodes should stop relaying this alert. Unix epoch time format. -| 8 | expiration | int64_t | The time beyond which this alert is no longer in effect and should be ignored. Unix epoch time format. -| 4 | ID | int32_t | A unique ID number for this alert. -| 4 | cancel | int32_t | All alerts with an ID number less than or equal to this number should be canceled: deleted and not accepted in the future. -| *Varies* | setCancel count | compactSize uint | The number of IDs in the following setCancel field. May be zero. -| *Varies* | setCancel | int32_t | Alert IDs which should be canceled. Each alert ID is a separate int32_t number. -| 4 | minVer | int32_t | This alert only applies to protocol versions greater than or equal to this version. Nodes running other protocol versions should still relay it. -| 4 | maxVer | int32_t | This alert only applies to protocol versions less than or equal to this version. Nodes running other protocol versions should still relay it. -| *Varies* | user\_agent count | compactSize uint | The number of user agent strings in the following setUser\_agent field. May be zero. -| *Varies* | setUser\_agent | compactSize uint + string | If this field is empty, it has no effect on the alert. If there is at least one entry is this field, this alert only applies to programs with a user agent that exactly matches one of the strings in this field. Each entry in this field is a compactSize uint followed by a string---the uint indicates how many bytes are in the following string. This field was originally called setSubVer; since BIP14, it applies to user agent strings as defined in the `version` message. -| 4 | priority | int32_t | Relative priority compared to other alerts. -| *Varies* | comment bytes | compactSize uint | The number of bytes in the following comment field. May be zero. -| *Varies* | comment | string | A comment on the alert that is not displayed. -| *Varies* | statusBar bytes | compactSize uint | The number of bytes in the following statusBar field. May be zero. -| *Varies* | statusBar | string | The alert message that is displayed to the user. -| *Varies* | reserved bytes | compactSize uint | The number of bytes in the following reserved field. May be zero. -| *Varies* | reserved | string | Reserved for future use. Originally called RPC Error. - -The annotated hexdump below shows an `alert` message. (The message -header has been omitted.) - - - -{% highlight text %} -73 ................................. Bytes in encapsulated alert: 115 -01000000 ........................... Version: 1 -3766404f00000000 ................... RelayUntil: 1329620535 -b305434f00000000 ................... Expiration: 1330917376 - -f2030000 ........................... ID: 1010 -f1030000 ........................... Cancel: 1009 -00 ................................. setCancel count: 0 - -10270000 ........................... MinVer: 10000 -48ee0000 ........................... MaxVer: 61000 -00 ................................. setUser_agent bytes: 0 -64000000 ........................... Priority: 100 - -00 ................................. Bytes In Comment String: 0 -46 ................................. Bytes in StatusBar String: 70 -53656520626974636f696e2e6f72672f -666562323020696620796f7520686176 -652074726f75626c6520636f6e6e6563 -74696e67206166746572203230204665 -627275617279 ....................... Status Bar String: "See [...]" -00 ................................. Bytes In Reserved String: 0 - -47 ................................. Bytes in signature: 71 -30450221008389df45f0703f39ec8c1c -c42c13810ffcae14995bb648340219e3 -53b63b53eb022009ec65e1c1aaeec1fd -334c6b684bde2b3f573060d5b70c3a46 -723326e4e8a4f1 ..................... Signature -{% endhighlight %} - -**Alert key compromise:** Dash Core's source code defines a -particular set of alert parameters that can be used to notify users that -the alert signing key has been compromised and that they should upgrade -to get a new alert public key. Once a signed alert containing those -parameters has been received, no other alerts can cancel or override it. -See the `ProcessAlert()` function in the Dash Core [alert.cpp][core -alert.cpp] source code for the parameters of this message. - -{% endautocrossref %} - - #### FilterAdd {% include helpers/subhead-links.md %} @@ -1298,6 +1353,9 @@ example, TXIDs will be in internal byte order). if the `BLOOM_UPDATE_P2PUBKEY_ONLY` flag was set. See the subsection below for details.) +As of Dash Core 0.14.0, elements in the extra payload section of DIP2-based +special transactions are also compared against bloom filters. + The following annotated hexdump of a transaction is from the [raw transaction format section][raw transaction format]; the elements which would be checked by the filter are emphasized in bold. Note that this @@ -1583,6 +1641,31 @@ header has been omitted.) {% endautocrossref %} + +#### SendDsq +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +The `senddsq` message is used to notify a peer whether or not to send `dsq` messages. +This allows clients that are not interested in PrivateSend mixing (e.g. mobile +wallet) to minimize data usage. + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 1 | fSendDSQueue | bool | 0 - Notify peer to not send any `dsq` messages
1 - Notify peer to send all `dsq` messages + +The following annotated hexdump shows a `senddsq` message. (The +message header has been omitted.) + +{% highlight text %} +01 ................................. PrivateSend participation: Enabled (1) +{% endhighlight %} + +{% endautocrossref %} + #### SendHeaders {% include helpers/subhead-links.md %} @@ -1624,16 +1707,22 @@ Sporks (per [`src/spork.h`][spork.h]) | ---------- | ---------- | ----------- | ----------- | | 10001 | 2 | `INSTANTSEND_ENABLED` | Turns on and off InstantSend network wide | 10002 | 3 | `INSTANTSEND_BLOCK_FILTERING` | Turns on and off InstantSend block filtering -| 10004 | 5 | `INSTANTSEND_MAX_VALUE` | Controls the max value for an InstantSend transaction (currently 2000 dash) | 10005 | 6 | `NEW_SIGS` | Turns on and off new signature format for Dash-specific messages -| 10007 | 8 | `MASTERNODE_PAYMENT_ENFORCEMENT` | Requires masternodes to be paid by miners when blocks are processed | 10008 | 9 | `SUPERBLOCKS_ENABLED` | Superblocks are enabled (10% of the block reward allocated to fund the dash treasury for funding approved proposals) -| 10009 | 10 | `MASTERNODE_PAY_UPDATED_NODES` | Only current protocol version masternode's will be paid (not older nodes) -| 10011 | 12 | `RECONSIDER_BLOCKS` | Forces reindex of a specified number of blocks to recover from unintentional network forks -| 10013 | 14 | `REQUIRE_SENTINEL_FLAG` | Only masternode's running sentinel will be paid +| 10014 | 15 | `DETERMINISTIC_MNS_ENABLED` | Deterministic masternode lists are enabled +| 10015 | 16 | `INSTANTSEND_AUTOLOCKS` | Automatic InstantSend for transactions with <=4 inputs (also eliminates the special InstantSend fee requirement for these transactions) +| 10016 | 17 | `SPORK_17_QUORUM_DKG_ENABLED` | Enable long-living masternode quorum (LLMQ) distributed key generation (DKG). When enabled, simple PoSe scoring and banning is active as well. +| 10018 | 19 | `SPORK_19_CHAINLOCKS_ENABLED` | Enable LLMQ-based ChainLocks. +| 10019 | 20 | `SPORK_20_INSTANTSEND_LLMQ_BASED` | Enable LLMQ-based InstantSend. | | | | | | | **Removed Sporks** | -| _10012_ | _13_ | _`OLD_SUPERBLOCK_FLAG`_ | _Removed in Dash Core 0.12.3. No network function since block 614820_ +| _10004_ | _5_ | _`INSTANTSEND_MAX_VALUE`_ | _Removed in Dash Core 0.14.1.
Controls the max value for an InstantSend transaction (currently 2000 dash)_ +| _10007_ | _8_ | _`MASTERNODE_PAYMENT_ENFORCEMENT`_ | _Removed in Dash Core 0.14.0.
Requires masternodes to be paid by miners when blocks are processed_ +| _10009_ | _10_ | _`MASTERNODE_PAY_UPDATED_NODES`_ | _Removed in Dash Core 0.14.0.
Only current protocol version masternode's will be paid (not older nodes)_ +| _10011_ | _12_ | _`RECONSIDER_BLOCKS`_ | _Removed in Dash Core 0.14.1.
Forces reindex of a specified number of blocks to recover from unintentional network forks_ +| _10012_ | _13_ | _`OLD_SUPERBLOCK_FLAG`_ | _Removed in Dash Core 0.12.3.
No network function since block 614820_ +| _10013_ | _14_ | _`REQUIRE_SENTINEL_FLAG`_ | _Removed in Dash Core 0.14.0.
Only masternode's running sentinel will be paid_ +| _10017_ | _18_ | _`QUORUM_DEBUG_ENABLED`_ | _Removed in Dash Core 0.14.0.

Temporarily used on Testnet only quorum debugging._ To verify `vchSig`, compare the hard-coded spork public key (`strSporkPubKey` from [`src/chainparams.cpp`][spork pubkey]) with the public key recovered from @@ -1695,6 +1784,11 @@ If a `version` message is accepted, the receiving node should send a before initializing its half of the connection by first sending a `version` message. +Protocol version 70214 added a masternode authentication (challenge/response) +system. Following the `verack` message, masternodes should send a `mnauth` message +that signs the `mnauth_challenge` with their BLS operator key. + + | Bytes | Name | Data Type | Required/Optional | Description |----------|-----------------------|------------------|------------------------------------------|------------- | 4 | version | int32_t | Required | The highest protocol version understood by the transmitting node. See the [protocol version section][section protocol versions]. @@ -1711,6 +1805,7 @@ before initializing its half of the connection by first sending a | *Varies* | user_agent | string | Required if user_agent bytes > 0 | *Renamed in protocol version 60000.*

User agent as defined by BIP14. Previously called subVer.

Dash Core limits the length to 256 characters. | 4 | start_height | int32_t | Required | The height of the transmitting node's best block chain or, in the case of an SPV client, best block header chain. | 1 | relay | bool | Optional | *Added in protocol version 70001 as described by BIP37.*

Transaction relay flag. If 0x00, no `inv` messages or `tx` messages announcing new transactions should be sent to this client until it sends a `filterload` message or `filterclear` message. If the relay field is not present or is set to 0x01, this node wants `inv` messages and `tx` messages announcing new transactions. +| 32 | mnauth_challenge | uint256 | Optional | *Added in protocol version 70214*

A challenge to be signed by the receiving masternode. The response is returned via a `mnauth` message following the `verack` message. The following service identifiers have been assigned. @@ -1727,9 +1822,9 @@ message header has been omitted and the actual IP addresses have been replaced with [RFC5737][] reserved IP addresses.) {% highlight text %} -3e120100 .................................... Protocol version: 70206 +46120100 .................................... Protocol version: 70214 0500000000000000 ............................ Services: NODE_NETWORK (1) + NODE_BLOOM (4) -bc8f5e5400000000 ............................ Epoch time: 1415483324 +9c10ad5c00000000 ............................ Epoch time: 1554845852 0100000000000000 ............................ Receiving node's services 00000000000000000000ffffc61b6409 ............ Receiving node's IPv6 address @@ -1741,11 +1836,14 @@ bc8f5e5400000000 ............................ Epoch time: 1415483324 128035cbc97953f8 ............................ Nonce -14 .......................................... Bytes in user agent string: 20 -2f4461736820436f72653a302e31322e312e352f..... User agent: /Satoshi:0.9.2.1/ +12 .......................................... Bytes in user agent string: 18 +2f4461736820436f72653a302e31322e312e352f..... User agent: /Dash Core:0.14.0/ -851f0b00 .................................... Start height: 728965 +851f0b00 .................................... Start height: 76944 01 .......................................... Relay flag: true + +5dbb5d1baade6a9afa34db708f72c0dd +b5bd82b3656493484556689640a91357 ............ Masternode Auth. Challenge {% endhighlight %} {% endautocrossref %} @@ -1767,58 +1865,96 @@ the Developer Guide [InstantSend section](developer-guide#instantsend + +{% highlight text %} +c1310100 ................................... Block Height: 78273 + +03bb286a877135fad3b33ea9cce9a525 +e5edc0879411afaff513b30100000000 ........... Block Hash + +12a3331fd8d0008804edaaf94c57b491 +d36f38f1993d06dfff71df9ec83da463 +dcd5497d105932e609016dac075f02df +1259951e3bcebfcc26afc904f6cd92df +7ff9b8c6c2ac9dcc9cb1a7dc7ec03bcc +005574710c3aabc2f8670959cf8bc9b5 ........... LLMQ BLS Signature +{% endhighlight %} {% endautocrossref %} - -#### txlvote +#### islock {% include helpers/subhead-links.md %} {% autocrossref %} -The `txlvote` message ([transaction lock vote][msg_txlock_vote]) -is sent by masternodes to indicate approval of a transaction lock request -`ix` message. +*Added in protocol version 70214 of Dash Core* -| Bytes | Name | Data type | Required | Description | -| ---------- | ----------- | --------- | -------- | -------- | -| 32 | txHash | uint256 | Required | TXID of the transaction to lock -| 36 | outPoint | outpoint | Required | The unspent outpoint to lock in this transaction -| 36 | outpointMasternode | outpoint | Required | The outpoint of the masternode which is signing the vote -| 66* | vchMasternodeSignature | char[] | Required | 66 bytes in most cases. Length (1 byte) + Signature (65 bytes) +The `islock` message is used to provide details of transactions that have been +locked by LLMQ-based InstantSend. The message includes the details of all +transaction inputs along with the transaction ID and the BLS signature of the +LLMQ that approved the transaction lock. -The following annotated hexdump shows a `txlvote` message. (The +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 1-9 | inputsSize | compactSize uint | Number of inputs | +| 36 * `inputsSize`| inputs | COutPoint | Outpoints used in the transaction | +| 32 | txid | uint256 | TXID of the locked transaction | +| 96 | sig | byte[] | LLMQ BLS Signature | + +The following annotated hexdump shows a `islock` message. (The message header has been omitted.) {% highlight text %} -3c121fb4a12b2f715e2f70a9fa282115 -be197dde14073959fb2a2b8e95a7418f ..... TXID +02 ......................................... Number of inputs: 2 -Outpoint to lock -| bb607995757c6a6efd6429215dcb3688 -| b252d34d835c81fed310fd905f487020 ... Outpoint TXID -| 01000000 ........................... Outpoint index number: 1 +Input 1 +| 05f24f65a9d98ff543ba61f7f0ce9448 +| 79632bf2517540a5bd8bde2fe8e94617 ......... Previous outpoint TXID +| 00000000 ................................. Previous outpoint index: 0 -Masternode Outpoint -| de9029c7e9b7eb7cd11f27ba670b2349 -| 0c3f0717b86ed949c316874589405cd2 ... Outpoint TXID -| 00000000 ........................... Outpoint index number: 0 +Input 2 +| 05f24f65a9d98ff543ba61f7f0ce9448 +| 79632bf2517540a5bd8bde2fe8e94617 ......... Previous outpoint TXID +| 01000000 ................................. Previous outpoint index: 1 -41 ................................... Signature length: 65 +e2e1c797576d8b13c83e929684b9aacd +553c20a34e2d11e38bdcaaf8e1de1680 ........... TXID -1ccc39ffb9c62111a8c82823d3ce61d2 -380db4e8f76ec238d568908f37558a90 -4e79566a53663de12ec2be1183c87d61 -250e8ebd57be171be1d4b5e89b69c263 -88 ................................... Masternode Signature +0f055c2064885d446f83d51b9bb09892 +7ea0375a0f6a3f3402abf158ece67e00 +81049b8a8f45d254b64574cef194ef31 +197e450fba1196d652f2e1421d3b80ae +f429c10eabd4ab9289e9a8f80f6989b7 +a11e5e7930deccc3e11a931fc9524f06 ........... LLMQ BLS Signature (96 bytes) {% endhighlight %} {% endautocrossref %} @@ -1857,13 +1993,12 @@ operates in two ways: 2. When sent to a masternode with a current mixing queue, it attempts to join the existing queue -Dash Core starts a new queue ~33% of the time and attempts to join an existing -queue the remainder of the time. +Dash Core attempts to join an existing queue first and only requests a new one +if no existing ones are available. | Bytes | Name | Data type | Required | Description | | ---------- | ----------- | --------- | -------- | -------- | | 4 | nDenom | int | Required | Denomination that will be exclusively used when submitting inputs into the pool -| 4 | nInputCount | int | Required | *Added in protocol version 70209. Only present when Spork 6 is active.*

Number of inputs required to join the queue | 216+ | txCollateral | `tx` message | Required | Collateral TX that will be charged if this client acts maliciously The following annotated hexdump shows a `dsa` message. (The message header has @@ -1873,8 +2008,6 @@ Spork 6 is active and protocol version => 70209. {% highlight text %} 02000000 ................................... Denomination: 1 Dash (2) -03000000 ................................... Inputs required: 3 - Collateral Transaction | Previous Output | | @@ -2196,11 +2329,10 @@ message. | Bytes | Name | Data type | Required | Description | | ---------- | ----------- | --------- | -------- | -------- | | 4 | nDenom | int | Required | Denomination allowed in this mixing session -| 4 | nInputCount | int | Required | *Added in protocol version 70209. Only present when Spork 6 is active.*

Number of inputs required to participate in this mixing session | 36 | masternodeOutPoint | outPoint | Required | The unspent outpoint of the masternode (holding 1000 DASH) which is hosting this session | 8 | nTime | int64_t | Required | Time this `dsq` message was created | 1 | fReady | bool | Required | Indicates if the mixing pool is ready to be executed -| 66* | vchSig | char[] | Required | Signature of this message by masternode verifiable via pubKeyMasternode (Length (1 byte) + Signature (65 bytes)) +| 97 | vchSig | char[] | Required | _ECDSA signature (65 bytes) prior to DIP3 activation_

BLS Signature of this message by masternode verifiable via pubKeyMasternode (Length (1 byte) + Signature (96 bytes)) Denominations (per [`src/privatesend.cpp`][privatesend denominations]) @@ -2210,32 +2342,32 @@ Denominations (per [`src/privatesend.cpp`][privatesend denominations]) | 2 | 1 Dash | 4 | 0.1 Dash | 8 | 0.01 Dash +| 16 | 0.001 Dash The following annotated hexdump shows a `dsq` message. (The message header has been omitted.) Note that the 'Required inputs' bytes will only be preset if Spork 6 is active and protocol version => 70209. {% highlight text %} -08000000 ............................. Denomination: 0.01 Dash (8) - -03000000 ............................. Required input(s): 3 +01000000 ............................. Denomination: 10 Dash (1) Masternode Outpoint -| aeed0e77c6db30a616507a37a129bc88 -| 1811f08afc51dd485d5322f36c1f04c5 ... Outpoint TXID -| 01000000 ........................... Outpoint index number: 1 +| a383a2489aedccfab4bb41368d1c8ee3 +| 10d9ee90cb3d181880ce4e0cdb36ecb7 +| 0f000000 ........................... Outpoint index number: 15 -1318a85900000000 ..................... Create Time: 2017-08-31 14:07:15 UTC +10b4235c00000000 ..................... Create Time: 2018-12-26 17:02:08 UTC 00 ................................... Ready: 0 -41 ................................... Signature length: 65 +60 ................................... Signature length: 96 -1bd74386ea4e111197f1b4b4660c1415 -13486745ca10ba0632426ed3a644d941 -047e43c988680904d4a4fcf551d8813c -ec12d47ae9b00e870db294cd66708ab7 -dc ................................... Masternode Signature +0409a1349869a02e90e6e1f6d92bf995 +27a72542fed987f6d2719596973d89e6 +74605a3585b1335650f1555f7576061d +110fb72b3308e378ac8e8fbebeeffdb4 +9b2a6562ad965bb3c3fd3f8e68483fdb +0d1401e2264071a74fc01d51e943ce9f ..... Masternode BLS Signature {% endhighlight %} {% endautocrossref %} @@ -2333,7 +2465,7 @@ The `dssu` message provides a mixing pool status update. | ---------- | ----------- | --------- | -------- | -------- | | 4 | nMsgSessionID | int | Required | Session ID | 4 | nMsgState | int | Required | Current state of mixing process -| 4 | nMsgEntriesCount | int | Required | Number of entries in the mixing pool +| 4 | nMsgEntriesCount | int | Required | _Deprecated in Dash Core 0.14.1_

Number of entries in the mixing pool | 4 | nMsgStatusUpdate | int | Required | Update state and/or signal if entry was accepted or not | 4 | nMsgMessageID | int | Required | ID of the typical masternode reply message @@ -2388,7 +2520,6 @@ message header has been omitted.) {% highlight text %} 86140c00 ............................. Session ID: 791686 02000000 ............................. State: POOL_STATE_ACCEPTING_ENTRIES (2) -03000000 ............................. Entries: 3 01000000 ............................. Status Update: STATUS_ACCEPTED (1) 13000000 ............................. Message ID: MSG_NOERR (0x13) {% endhighlight %} @@ -2408,7 +2539,7 @@ fees (to provide security in mixing). | ---------- | ----------- | --------- | -------- | -------- | | # | tx | `tx` message | Required | The transaction | 36 | masternodeOutPoint | outPoint | Required | The unspent outpoint of the masternode (holding 1000 DASH) which is signing the message -| 66 | vchSig | char[] | Required | Signature of this message by masternode verifiable via pubKeyMasternode (Length (1 byte) + Signature (65 bytes)) +| 97 | vchSig | char[] | Required | _ECDSA signature (65 bytes) prior to DIP3 activation_

BLS Signature of this message by masternode verifiable via pubKeyMasternode (Length (1 byte) + Signature (96 bytes)) | 8 | sigTime | int64_t | Require | Time this message was signed @@ -2417,9 +2548,10 @@ message header has been omitted.) {% highlight text %} Transaction Message -| 01000000 ................................. Version: 1 +| 0200 ....................................... Version: 2 +| 0000 ....................................... Type: 0 (Classical Tx) | -| 0b ......................................... Number of inputs: 11 +| 05 ......................................... Number of inputs: 5 | | Transaction input #1 | | @@ -2427,51 +2559,54 @@ Transaction Message | | 74ed8307a566731119b1782362af43ad ......... Outpoint TXID | | 05000000 ................................. Outpoint index number: 5 | | -| | 6a ....................................... Bytes in sig. script: 106 -| | 47304402204ed56f525ae6df707f9cbe -| | 55c78d82bbcc02daa1fb27b0bf54588a -| | 446dcc804102200c4e03c4a2b9a90aef -| | 9f01de7c28812a0e8b280e6c153b0bd8 -| | 26d2ff660102e18121028c96903b2709 -| | 7b331d55abd1f42d2ff6cc7c784ab839 -| | 7c232b73a34a149a348e ..................... Secp256k1 signature +| | 6b ....................................... Bytes in sig. script: 107 +| | 483045022100b1243fcba562a0f1d7c4 +| | cc3b320645dfa96c6412f368ccdbc1b7 +| | acb6b0aa1db502201606c81b0d79f52f +| | 47bcb071b64c37f72dd1378efa67a2de +| | dd86c44d393668fa812102d6ff581270 +| | 632f5e972b0418ee871867b5c04b6eae +| | 3458ad135ad8f1daaa4fc2 ................... Secp256k1 signature | | | | ffffffff ................................. Sequence number: UINT32_MAX | -| [...] ...................................... 10 more transaction inputs omitted +| [...] ...................................... 4 more transaction inputs omitted | | -| 0b ......................................... Number of outputs: 11 +| 05 ......................................... Number of outputs: 5 | | Transaction output #1 -| | e8e4f50500000000 ......................... Duffs (1.00001000 Dash) +| | 10f19a3b00000000 ......................... Duffs (10.0001000 Dash) | | | | 19 ....................................... Bytes in pubkey script: 25 | | | 76 ..................................... OP_DUP | | | a9 ..................................... OP_HASH160 | | | 14 ..................................... Push 20 bytes as data -| | | | 0febbeaa8818b2c2f80fb8c98f90bdae -| | | | 41fe5c26 ............................. PubKey hash +| | | | 3eb7ae776b096231de9eca42dd57a677 +| | | | d3b05452 ............................. PubKey hash | | | 88 ..................................... OP_EQUALVERIFY | | | ac ..................................... OP_CHECKSIG | -| [...] ...................................... 10 more transaction outputs omitted +| [...] ...................................... 4 more transaction outputs omitted | | | 00000000 ................................... locktime: 0 (a block height) Masternode Unspent Outpoint -| 387d522def2abfb9bdd15be899f074f3 -| 49b414cef078ec642e1d14b42996b9fc ......... Outpoint TXID -| 00000000 ................................. Outpoint index number: 0 +| ccfbe4e7c220264cb0a8bfa5e91c6957 +| 33c255384790e80e891a0d8f56a59d9e ......... Outpoint TXID +| 01000000 ................................. Outpoint index number: 1 -1b6fb8f90f0df6e502bc10aab9604e49 -2d14214e05331c9761c834d55c7536e3 -3369e5909479ea88116aad7ea64587d9 -59364326c97d7f249f7b9293e120a5b6 -1c ................................... Masternode Signature +60 ......................................... Signature length: 96 -ece5a95900000000 ..................... Signature Timestamp +94c8e427f448789f58cda17445e76c64 +d0efa7c089addcb378f9b8d04b72f499 +a4e8e616b5011886b9cffcce29e17fc1 +10ad8609c3ee1a3207b882e7ff58400f +42d6e6544108b349da2cc5e716a5f266 +4a2dc96b0f080effd5349f2ae06ac234 .......... Masternode Signature + +59b4235c00000000 .......................... Sig Time: 2018-12-26 17:03:21 UTC {% endhighlight %} {% endautocrossref %} @@ -2491,398 +2626,6 @@ and [Masternode Payment](developer-guide#masternode-payment) section {% endautocrossref %} -#### dseg -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -The `dseg` message requests either the entire masternode list or a specific -entry. To request the list of all masternodes, use an empty txIn (TXID of all -zeros and an index of 0xFFFFFFFF). To request information about a specific -masternode, use the unspent outpoint associated with that masternode. - -The response to a `dseg` message is an `mnb` message inventory and an -`mnp` message inventory for each requested masternode. Masternodes ignore this -request if they are not fully synced. - -| Bytes | Name | Data type | Required | Description | -| ---------- | ----------- | --------- | -------- | -------- | -| 36 | masternodeOutPoint | outPoint | Required | Request options:
`All Entries` - empty txIn
`Single Entry` - Masternode's unspent outpoint which is holding 1000 DASH - - -{% highlight text %} -Note: Dash Core only allows nodes to request the entire list every 3 hours. -Additional requests sent prior to then may result in the node being banned. -{% endhighlight %} - -The following annotated hexdump shows a `dseg` message requesting **all** -masternodes. (The message header has been omitted.) - -{% highlight text %} -Masternode Unspent Outpoint -| 00000000000000000000000000000000 -| 00000000000000000000000000000000 ......... Outpoint TXID -| ffffffff ................................. Outpoint index number: 0 -{% endhighlight %} - -The following annotated hexdump shows a `dseg` message requesting a specific -masternode. (The message header has been omitted.) - -{% highlight text %} -Masternode Unspent Outpoint -| 7fe33a2901aa654598ae0af572d4fbec -| ee97af2d0276f189d177dee5848ef3da ......... Outpoint TXID -| 00000000 ................................. Outpoint index number: 0 -{% endhighlight %} - -{% endautocrossref %} - -#### mnb -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -The `mnb` message is sent whenever a masternode comes online or a client is -syncing. The masternode will send this message which describes the masternode -entry and how to validate messages from it. - -| Bytes | Name | Data type | Required | Description | -| ---------- | ----------- | --------- | -------- | -------- | -| 36 | outPoint | outPoint | Required | The unspent outpoint of the masternode (holding 1000 DASH) which is signing the message -| # | addr | CService | Required | IPv4 address of the masternode -| 33-65 | pubKeyCollateralAddress | CPubKey | Required | CPubKey of the main 1000 DASH unspent outpoint. Length determined by if it is a compressed public key or not. -| 33-65 | pubKeyMasternode | CPubKey | Required | CPubKey of the secondary signing key (For all messaging other than the announce message). Length determined by if it is a compressed public key or not. -| 66 | sig | char[] | Required | Signature of this message verifiable via pubKeyMasternode (Length (1 byte) + Signature (65 bytes)) -| 8 | sigTime | int64_t | Required | Time which the signature was created -| 4 | nProtocolVersion | int | Required | The protocol version of the masternode -| # | lastPing | `mnp` message | Required | The last known ping of the masternode -| 8 | nLastDsq | int64_t | Deprecated | **Removed in Dash Core 0.12.3.0**

The last time the masternode sent a `dsq` message (for mixing) (DEPRECATED) - -The following annotated hexdump shows a `mnb` message. (The -message header has been omitted and the actual IP address has been replaced -with a RFC5737 reserved IP address.) - -{% highlight text %} -Masternode Unspent Outpoint -| 3fbc7d4a8f68ba6ecb02a8db34d1f5b6 -| 2dc105f0b5c3505243435cf815d02394 ......... Outpoint TXID -| 01000000 ................................. Outpoint index number: 1 - -Masternode Address -| 00000000000000000000ffffc0000233 ......... IP Address: ::ffff:192.0.2.51 -| 270f ..................................... Port: 9999 - -Collateral Public Key -| 21 ....................................... Key Size: 33 -| 02 ....................................... Key Type: 2 - Compressed (even) -| 02a47a6845936a4199e126d35399dd09 -| 97c1aaf89a3fe70d474c53f29624a43a5b ....... Public Key - -Masternode Public Key -| 41 ....................................... Key Size: 65 -| 04 ....................................... Key Type: 4 - Uncompressed -| 04da252243305d604cab90480880af4a -| b5cea3a934c91393452e9b7b4c97a87e -| 198bc809916ac2c27436a1db9c28d0aa -| bfefec4dc3c2193835fd9a56c31150c633 ....... Public Key - -Message Signature -| 41 ....................................... Bytes in signature: 65 -| 1fb80f9ba8c110835e4a7dd4c8deccd7 -| 89027663d00084d9a99ef579a9b5601f -| 40727b27e91aab2897a078f63976ae25 -| 3ff8f01e56862e953278f432530f6ee080 ....... Signature - -4728ef5800000000 ........................... Sig. Timestamp: 2017-04-13 07:27:03 UTC - -3e120100 ................................... Protocol Version: 70206 - -Masternode Ping Message -| Masternode Unspent Outpoint -| | 3fbc7d4a8f68ba6ecb02a8db34d1f5b6 -| | 2dc105f0b5c3505243435cf815d02394 ........ Outpoint TXID -| | 01000000 ................................ Outpoint index number: 1 -| -| 94fc0fad18b166c2fedf1a5dc0511372 -| 26c353d57e086737ff05000000000000 ......... Chaintip block hash -| -| 66c1a95900000000 ......................... Sig. Timestamp: 2017-10-01 21:21:58 UTC -| -| Masternode Signature -| | 41 ..................................... Bytes in signature: 65 -| | 1b3017c49a03e2d77083f3c92a8c2e4c -| | d815d068b6256498a719e3cb6a34f774 -| | ec6434cfcbb7a5a51704350a05903287 -| | eecc82e6b40ac2fcfa2df29ddaa6c4fc -| | b8 ..................................... Masternode Signature -{% endhighlight %} - -{% endautocrossref %} - -#### mnget -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -The `mnget` message requests masternode payment sync. The response to an -`mnget` message is `mnw` message inventories. Masternodes ignore this request if -they are not fully synced. - -{% highlight text %} -Note: Dash Core limits how frequently a masternode payment sync can be -requested. Frequent requests will result in the node being banned. -{% endhighlight %} - -There is no payload in a `mnget` message. See the [message header -section][section message header] for an example of a message without a payload. - -![Warning icon](/img/icons/icon_warning.svg) **The following information is provided for historical reference only.** - -In protocol versions <=70208, the `mnget` message has a payload consisting of an -integer value requesting a specific number of payment votes. In protocol versions ->70208, the `mnget` message has no payload. - -| Bytes | Name | Data type | Required | Description | -| ---------- | ----------- | --------- | -------- | -------- | -| 4 | nMnCount | int | Deprecated | _Deprecated in Dash Core 0.12.3_

Number of masternode payment votes to request - -The following annotated hexdump shows a pre-0.12.3 `mnget` message. (The -message header has been omitted.) - -{% highlight text %} -a8170000 ................................... Count: 6056 -{% endhighlight %} - -{% endautocrossref %} - -#### mnp -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -The `mnp` message is sent by masternodes every few minutes to ping the network -with a message that propagates across the whole network. Dash Core currently -uses a minimum masternode ping time of 10 minutes. - -| Bytes | Name | Data type | Required | Description | -| ---------- | ----------- | --------- | -------- | -------- | -| 36 | masternodeOutPoint | outPoint | Required | The unspent outpoint of the masternode (holding 1000 DASH) which is signing the message -| 32 | blockHash | uint256 | Required | Block hash from 12 blocks ago (current chaintip minus 12). This offset allows nodes to be slightly out of sync. -| 8 | sigTime | int64_t | Required | Time which the signature was created -| 66* | vchSig | char[] | Required | Signature of this message by masternode - verifiable via pubKeyMasternode (66 bytes in most cases. Length (1 byte) + Signature (65 bytes)) -| 1 | fSentinelIsCurrent | bool | Required | True if last sentinel ping was current -| 4 | nSentinelVersion | uint32_t | Required | The version of Sentinel running on the masternode which is signing the message -| 4 | nDaemonVersion | uint32_t | Required | The version of dashd on the masternode which is signing the message (i.e. CLIENT_VERSION) - -The following annotated hexdump shows a `mnp` message. (The -message header has been omitted.) - -{% highlight text %} -Masternode Unspent Outpoint -| ce12d7f32945c9544c5aeb0dcf131174 -| a6269b64b40f9461595e26689b573c58 ......... Outpoint TXID -| 00000000 ................................. Outpoint index number: 0 - -6c7da9d9eae78644a3406eac8ed0be3b -f15eb4bc369acc95b106f37400000000 ........... Chaintip block hash - -3c84025a00000000 ........................... Sig. Timestamp: 2017-11-08 04:12:44 UTC - -Masternode Signature -| 41 ....................................... Bytes in signature: 65 -| 1c7572842058a2075b8a996c3905e306 -| 27a581a0b0702842ac4088e6c1a61b22 -| 8e79a4d8aed0f413150f976045f256ef -| 2727e68a36622efcabfd60a554533b8c -| 6f ....................................... Masternode Signature - -01 ......................................... Sentinel Current: true -02000100 ................................... Sentinel Version (1.0.2) -ecd50100 ................................... Dashd Deamon Version (12.3.0) -{% endhighlight %} - -{% endautocrossref %} - -#### mnv -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -The `mnv` message is used by masternodes to verify each other. Several `mnv` -messages are exchanged in the process. This results in the IP address of -masternode 1 being validated as of the provided block height. - -| Bytes | Name | Data type | Required | Description | -| ---------- | ----------- | --------- | -------- | -------- | -| 36 | masternodeOutPoint1 | outPoint | Required | The unspent outpoint which is holding 1000 DASH for masternode 1 -| 36 | masternodeOutPoint2 | outPoint | Required | The unspent outpoint which is holding 1000 DASH for masternode 2 -| # | addr | CService | Required | IPv4 address and port of masternode 1 -| 4 | nonce | int | Required | Random nonce -| 4 | nBlockHeight | int | Required | Block height -| 66 | vchSig1 | char[] | Required*

Added in Step 2 | Signature of this message by masternode 1 - verifiable via pubKeyMasternode (Length (1 byte) + Signature (65 bytes))

-| 66 | vchSig2 | char[] | Required*

Added in Step 3 | Signature of this message by masternode 2 - verifiable via pubKeyMasternode (Length (1 byte) + Signature (65 bytes))

- -Initially, `vin1`, `vin2`, `vchSig1` and `vchSig2` are empty. They are -updated as the exchange of messages between the masternodes occurs as detailed -in the table below. - -*Masternode Verify Data Flow* - -| Step | **MN 2 (Verifier)** | **Direction** | **MN 1 (Being verified)** | **Description** | -| | **Verification request** | | | **`mnv` message with no signatures** | -| 1 | `mnv` message | → | | Contains `addr`, `nonce`, and `nBlockHeight`.
Sent by _SendVerifyRequest()_. -| 2 | | ← | `mnv` message | Add `vchSig1` (signature of the IP address + nonce + hash of the requested block).
Sent by _SendVerifyReply()_. -| 3 | `mnv` message | → | | Verify `vchSig1`

Add `masternodeOutPoint1`, `masternodeOutPoint2`, and `vchSig2` (signature of the IP address + nonce + hash of the requested block + `masternodeOutPoint1` + `masternodeOutPoint2`) and relay message to peers if valid.
Sent by _ProcessVerifyReply()_. - -Nodes receiving a relayed `mnv` message (one in which `masternodeOutPoint1`, `masternodeOutPoint2`, `vchSig1` -and `vchSig2` are already present) use it to update the PoSe ban score. If the -ban score reaches `MASTERNODE_POSE_BAN_MAX_SCORE` (5), the masternode will be -considered malicious and banned. If the received message is valid, nodes -receiving it will relay it on to their connected peers. - -{% highlight text %} -Important Notes: -* Dash Core limits how frequently a masternode verify request can be - requested. Frequent requests will result in the node being banned. - -* Only masternodes in the top `MAX_POSE_RANK` (10) can send an `mnv` request - (to no more than `MAX_POSE_CONNECTIONS` (10)). - -{% endhighlight %} - - -The following annotated hexdump shows a `mnv` message. This is an example of the -initial request (Step 1) so it does not contain any signatures. (The message -header has been omitted.) - -{% highlight text %} -Masternode 1 Unspent Outpoint (empty) -| 00000000000000000000000000000000 -| 00000000000000000000000000000000 ......... Outpoint TXID -| ffffffff ................................. Outpoint index number: 0 - -Masternode 2 Unspent Outpoint (empty) -| 00000000000000000000000000000000 -| 00000000000000000000000000000000 ......... Outpoint TXID -| ffffffff ................................. Outpoint index number: 0 - -00000000000000000000ffff2d20ed4c ........... IP Address: ::ffff:45.32.237.76 -4e1f ....................................... Port: 19999 -9d090000 ................................... Nonce: 2641 -ed5c0000 ................................... Block height: 23789 - -Masternode 1 Signature -| 00 ....................................... Bytes in signature: 0 -| .......................................... Signature: Empty - -Masternode 2 Signature -| 00 ....................................... Bytes in signature: 0 -| .......................................... Signature: Empty -{% endhighlight %} - - -The following annotated hexdump shows a `mnv` message. This is an example of the -initial response (Step 2) so it only contains the signature of masternode 1 (the -masternode being verified). (The message header has been omitted.) - -{% highlight text %} -Masternode 1 Unspent Outpoint (empty) -| 00000000000000000000000000000000 -| 00000000000000000000000000000000 ......... Outpoint TXID -| ffffffff ................................. Outpoint index number: 0 - -Masternode 2 Unspent Outpoint (empty) -| 00000000000000000000000000000000 -| 00000000000000000000000000000000 ......... Outpoint TXID -| ffffffff ................................. Outpoint index number: 0 - -00000000000000000000ffff2d20ed4c ........... IP Address: ::ffff:45.32.237.76 -4e1f ....................................... Port: 19999 -9d090000 ................................... Nonce: 2641 -ed5c0000 ................................... Block height: 23789 - -Masternode 1 Signature -| 41 ....................................... Bytes in signature: 65 -| 1bf5bd6e6eda0cd32aafb826c4066fa5 -| 4a53baa6f4211528e51716054b4df981 -| d97a77e633947bbbfafd6882324b76a0 -| 90c6e65c16ca1222db48f8558537c062 -| f6 ....................................... Signature - -Masternode 2 Signature -| 00 ....................................... Bytes in signature: 0 -| .......................................... Signature: Empty -{% endhighlight %} -{% endautocrossref %} - -#### mnw -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -The `mnw` message is used to pick the next winning masternode. When a new block -is found on the network, a masternode quorum will be determined and those 10 -selected masternodes will issue the masternode payment vote message. - -| Bytes | Name | Data type | Required | Description | -| ---------- | ----------- | --------- | -------- | -------- | -| 36 | masternodeOutPoint | outPoint | Required | The unspent outpoint of the masternode (holding 1000 DASH) which is signing the message -| 4 | nBlockHeight | int | Required | The blockheight which the payee should be paid -| ? | payeeAddress | CScript | Required | The address receiving payment -| 66* | vchSig | char[] | Required | Signature of the masternode which is signing the message (66 bytes in most cases. Length (1 byte) + Signature (65 bytes)) - -The following annotated hexdump shows a `mnw` message. (The -message header has been omitted.) - -{% highlight text %} -Masternode Unspent Outpoint -| 0c1b5c5846792b25b05eeea9586d8c34 -| ecb996c566bedb4ecf6a68fe8ffa9582 ......... Outpoint TXID -| 00000000 ................................. Outpoint index number: 0 - -fb4f0a00 ................................... Block pay height: 675835 - -Payee Address -| 19 ....................................... Address Length: 25 -| | 76 ..................................... OP_DUP -| | a9 ..................................... OP_HASH160 -| | 14 ..................................... Push 20 bytes as data -| | | 1767c363646be7d8e4475c0aa85ea454 -| | | 9fd102c4 ............................. Pubkey hash -| | 88 ..................................... OP_EQUALVERIFY -| | ac ..................................... OP_CHECKSIG - -Masternode Signature -| 41 ....................................... Bytes in signature: 65 -| 1c25da47190a83937fb5ef607235703a -| 7cdda155bf5a1ae6139929024750f899 -| a90a4f57cdf9d54c9d9603c1f31009f8 -| e257355b49c0484fb4c31bc412c73dd9 -| 20 ....................................... Signature -{% endhighlight %} - -{% endautocrossref %} - -#### mnwb -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -There is no message for `mnwb` (`inv` message only). - -The following annotated hexdump shows an `inv` message with a `mnwb` -inventory entry. (The message header has been omitted.) - -{% highlight text %} -01 ................................. Count: 1 - -08000000 ........................... Type: MSG_MASTERNODE_PAYMENT_BLOCK (8) -dd6cc6c11211793b239c2e311f1496e2 -2281b200b35233eaae465d2aa3c9d537 ... Hash: mnwb -{% endhighlight %} - -{% endautocrossref %} - #### ssc {% include helpers/subhead-links.md %} @@ -2902,8 +2645,8 @@ Sync Item IDs | ID | Description | Response To |------|--------------|--------------- -| 2 | MASTERNODE_SYNC_LIST | `dseg` message -| 3 | MASTERNODE_SYNC_MNW | `mnget` message +| 2 | MASTERNODE_SYNC_LIST | _Deprecated following activation of DIP3 in Dash Core 0.13.0_

`dseg` message +| 3 | MASTERNODE_SYNC_MNW | _Deprecated following activation of DIP3 in Dash Core 0.13.0_

`mnget` message | 10 | MASTERNODE_SYNC_GOVOBJ | `govsync` message | 11 | MASTERNODE_SYNC_GOVOBJ_VOTE | `govsync` message with non-zero hash @@ -2917,6 +2660,812 @@ bf110000 ................................... Count: 4543 {% endautocrossref %} +#### mnauth +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +The `mnauth` message is sent by a masternode immediately after sending a +`verack` message to authenticate that the sender is a masternode. It is only +sent when the sender is actually a masternode. + +The `mnauth` message signs a challenge that was previously sent via a +`version` message. The challenge is signed differently depending on +if the connection is inbound or outbound. + +This is primarily used as a DoS protection mechanism to allow persistent +connections between masternodes to remain open even if inbound connection limits +are reached. + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 32 | proRegTxHash | uint256 | Version of the message +| 96 | sig | byte[] | BLS signature, signed with the operator key of the masternode + +The following annotated hexdump shows a `mnauth` message. (The +message header has been omitted.) + +{% highlight text %} +63cd3bf06404d78f80163afeb4b13e18 +7dc1c1d04997ef04f1a2ecb3166dd004 ........... ProRegTx Hash + +12f2706bc75e9cb14a9ebf1d93d177d5 +f266ad2eddc49ad463810cb976a3e4bb +abffc96819c5030fd5a7601af9c8ee50 +0feb066b38a48af1a31b7242bd814bab +91e2a887f963904f33af851ddc9167d5 +66d6d3bd6c07e99091edd8867d0dd56e ........... Masternode BLS Signature (96 bytes) +{% endhighlight %} + +{% endautocrossref %} + + +### Quorum Messages +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +The following network messages enable the long-living masternode quorum (LLMQ) +features built in to Dash. + +{% endautocrossref %} + + +#### Distributed Key Generation +{% include helpers/subhead-links.md %} + +The following network messages enable the creation of long living masternode +quorums (LLMQs) as described in [DIP6](https://github.com/dashpay/dips/blob/master/dip-0006.md). + +With the exception of the `qfcommit` message, these messages are for intra-quorum +communication only and are not propagated on the Dash network. + +##### qcontrib +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +![Warning icon](/img/icons/icon_warning.svg) Note: This message is used for +intra-quorum communication and is only sent to the masternodes in the LLMQ and +nodes that are monitoring in Watch Mode for auditing/debugging purposes. + +The `qcontrib` message is used by each member of the DKG process to send key +contributions to all other members. + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 1 | llmqType | uint8_t | The type of LLMQ +| 32 | quorumHash | uint256 | The quorum identifier +| 32 | proTxHash | uint256 | The ProRegTx hash of the complaining member +| 1-9 | vvecSize | compactSize uint | The size of the verification vector +| 48 * `vvecSize` | vvec | BLSPubKey[] | The verification vector +| 48 | ephemeralPubKey | BLSPubKey | Ephemeral BLS public key used to encrypt secret key contributions +| 32 | iv | uint256 | Initialization vector +| 1-9 | skCount | compactSize uint | Number of encrypted secret key contributions +| (1 + 32) * (`skCount`) | skContributions | byte[] | Secret key contributions encrypted to recipient masternodes’ BLS public operator key.

Each contribution consists of:
- Size: 1 byte
- Secret Key: 32 bytes +| 96 | sig | byte[] | BLS signature, signed with the operator key of the contributing masternode + +More information can be found in the [Contribution phase section of DIP6](https://github.com/dashpay/dips/blob/master/dip-0006.md#2-contribution-phase). + + + +The following annotated hexdump shows a `qcontrib` message. (The +message header has been omitted.) + +{% highlight text %} +01 ........................................ LLMQ Type: 1 (LLMQ_50_60) + +cb9a1552340175a8232437eb8ceceaea +4b90a0f75caff20ee12d230b00000000 ........... Quorum Hash + +cd1c97c52ccf163ee5dc264d411efc90 +b07729cd34d9d2e7c7b3ca4b2a4e77cf ........... ProRegTx Hash + +1e ......................................... Verification Vector Size: 30 + +Verification Vector (Truncated) +| 8da71ba5030e28c6c4de5e0eb1660d0f +| a9fd21ef4fef700a556f10286c9c34fb +| beb36fffb5b2a552a40d6c8e27aac338 +| [...] +| 99d8649d226261162bcb5a11617d1732 +| 553b8358d85b1d9e12a88eb3e979fb7c +| e49b5a21a82a74e9d06233199cb73db4 ......... Verification Vector (1440 bytes) + +8d664929b596cdc8eb835d652944d61b +7fd21fd60ba0288af4f9e3a10658c8a8 +56467082c728e2037791166705ada03a ........... Ephemeral BLS Public Key + +93037a05b65adad6f5d44edc43500bff +71605f0e5f90ab92e3e0b46461c1c64d ........... IV Seed + +32 ......................................... Contribution count: 50 +Contributions +| Secret Key Contribution #1 +| | 20 ..................................... Contribution Size: 32 bytes +| | | 31f3e8e5b2cc2063ee7fd1dd469dca12 +| | | 4bdf506ee46fe825d5537aa3ce838225 ..... Encrypted Secret Key contribution +| +| Secret Key Contribution #2 +| | 20 ..................................... Contribution Size: 32 bytes +| | | a6b3ff696ffc5e0c0a9b444c515edc48 +| | | 5a9ccea0268c2a445fac5e24feda51a9 ..... Encrypted Secret Key contribution +| +| [...] .................................... 47 contributions omitted +| +| Secret Key Contribution #50 +| | 20 ..................................... Contribution Size: 32 bytes +| | | 25f54cff411a577db9a416a60067f512 +| | | 0750c77720207eb1484c90767b72faf8 ..... Encrypted Secret Key contribution + +81f1003546f6735849c5691af93d324d +3a719fc4bb6d719907de3bce9833228e +648d03cd80666d70600fa8c936d30046 +07bd444af3e494fb2a21273fcfa51986 +3c4e139c67d2ffe0df07ac27ae63a0c8 +e000da1aeda5f98ec9e64b801681bfc1 ........... BLS signature (Operator Key) +{% endhighlight %} + +{% endautocrossref %} + + +##### qcomplaint +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +![Warning icon](/img/icons/icon_warning.svg) Note: This message is used for +intra-quorum communication and is only sent to the masternodes in the LLMQ and +nodes that are monitoring in Watch Mode for auditing/debugging purposes. + +The `qcomplaint` message is used to notify other members in the DKG process of +any members that provided no contribution or an invalid secret key contribution. +The notifications are divided into 2 fields: + + - `badMembers` - Sets a bit for each member that failed to provide a contribution + - `complaints` - Sets a bit for each member that provided an invalid contribution + +If a threshold number of quorum participants indicate a masternode didn't contribute, +that masternode will be excluded from the quorum. Members that simply have a complaint +against them are given an opportunity to respond (via a `qjustify` message) to +attempt to prove to all participants that they did participate. + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 1 | llmqType | uint8_t | The type of LLMQ +| 32 | quorumHash | uint256 | The quorum identifier +| 32 | proTxHash | uint256 | The ProRegTx hash of the complaining member +| 1-9 | badBitSize | compactSize uint | Number of bits in the bad members bitvector +| (`badBitSize` + 7) / 8 | badMembers | byte[] | The bad members bitvector +| 1-9 | complaintsBitSize | compactSize uint | Number of bits in the complaints bitvector +| (`complaints`
`BitSize` + 7) / 8 | complaints | byte[] | The complaints bitvector +| 96 | sig | byte[] | BLS signature, signed with the operator key of the contributing masternode + +More information can be found in the [Complaining phase section of DIP6](https://github.com/dashpay/dips/blob/master/dip-0006.md#3-complaining-phase). + + + +The following annotated hexdump shows a `qcomplaint` message. (The +message header has been omitted.) + +{% highlight text %} +01 ......................................... LLMQ Type: 1 (LLMQ_50_60) + +b34b2bcb3430f403663e37be9c63c88e +4ca1f12c41846064cf960a0800000000 ........... Quorum Hash + +b375607540bd9c6e4a5452d8c7a6a626 +ec715222a0650321487843c79cac67d5 ........... ProRegTx hash + +32 ......................................... Bad member bitvector size: 50 +08800200004000 ............................. Bad members + +32 ......................................... Complaints bitvector size: 50 +00020080040000 ............................. Complaints + +0639b0e8ccb667c161207ddc03183d4e +bb632eeb60f29e351963032a673abd61 +3fb3e847dff78699481193cf385f0e08 +0fdf518e26ef1e258b724408b1ee9d70 +511696092b6c2ebfad5e24154a7f859f +0efe3fcb8d7042da624f7298876cc98e ........... BLS signature (Operator Key) +{% endhighlight %} + +{% endautocrossref %} + + +##### qjustify +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +![Warning icon](/img/icons/icon_warning.svg) Note: This message is used for +intra-quorum communication and is only sent to the masternodes in the LLMQ and +nodes that are monitoring in Watch Mode for auditing/debugging purposes. + +The `qjustify` message is used to respond to complaints. This provides a way for +nodes that have been complained about to offer proof of correct behavior. If +a valid justification is not provided, all other nodes mark it as a bad. If a +valid justification is provided, the complaining node is marked as bad instead +(since it submitted a bad complaint). + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 1 | llmqType | uint8_t | The type of LLMQ +| 32 | quorumHash | uint256 | The quorum identifier +| 32 | proTxHash | uint256 | The ProRegTx hash of the complaining member +| 1-9 | skContributions
Count | compactSize uint | Number of unencrypted secret key contributions +| 36 * `skContributions`
`Count` | skContribution | SKContribution | Member index and secret key contribution for members justifying complaints +| 96 | sig | byte[] | BLS signature, signed with the operator key of the contributing masternode + +An `SKContribution` consists of: + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 4 | skContributionMember | uint32_t | Index of the member for which justification is provided +| 32 | skContributions | byte[] | Unencrypted secret key contribution for the member contained in skContributionMember + +More information can be found in the [Justification phase section of DIP6](https://github.com/dashpay/dips/blob/master/dip-0006.md#4-justification-phase). + + + +The following annotated hexdump shows a `qjustify` message. (The +message header has been omitted.) + +{% highlight text %} +01 ......................................... LLMQ Type: 1 (LLMQ_50_60) + +b34b2bcb3430f403663e37be9c63c88e +4ca1f12c41846064cf960a0800000000 ........... Quorum Hash + +e7d909afba6848f3fdf98b2da31db07e +3fbee621d58c469dce96d6283bcd4b25 ........... ProRegTx hash + +05 ......................................... Contribution count: 5 + +Contribution #1 +| 16000000 ................................. Member Index: 22 +| +| 57b63ec5ae0a101f0d93bb60af70bf22 +| c21bd3a7705e1aecb9559d6b151d953f ......... Unencrypted secret key contribution + +Contribution #2 +| 17000000 ................................. Member Index: 22 +| +| 0ee1f0f0f2570589e81d2a4f8165b105 +| 28436a1a75cf3469fa81090f2d856150 ......... Unencrypted secret key contribution + +[...] ...................................... 3 more contributions omitted + +8d63d10e242ac97c6324e9a40d6e690e +4bb7fe0750b7d204f7e988a324720189 +68408d2d0621bbaba8380ad4aaf342ea +138ce9a59ed9ca82995c155609488dcc +5ac35f483b695a0624e5ab0745f7f9e2 +051edf1b3b1f0e1b1d55d185d25e0ed7 ........... BLS signature (Operator Key) +{% endhighlight %} + +{% endautocrossref %} + + +##### qpcommit +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +![Warning icon](/img/icons/icon_warning.svg) Note: This message is used for +intra-quorum communication and is only sent to the masternodes in the LLMQ and +nodes that are monitoring in Watch Mode for auditing/debugging purposes. + +The `qpcommit` message is used to exchange premature commitment messages for +verification and selection of the final commitment. + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 1 | llmqType | uint8_t | The type of LLMQ +| 32 | quorumHash | uint256 | The quorum identifier +| 32 | proTxHash | uint256 | The ProRegTx hash of the complaining member +| 1-9 | validMembersSize | compactSize uint | Bit size of the `validMembers` bitvector +| (`valid`
`MembersSize` + 7) / 8 | validMembers | byte[] | Bitset of valid members in this commitment +| 48 | quorumPublicKey | uint256 | The quorum public key +| 32 | quorumVvecHash | byte[] | The hash of the quorum verification vector +| 96 | quorumSig | BLSSig | Threshold signature, signed with the threshold signature share of the committing member +| 96 | sig | byte[] | BLS signature, signed with the operator key of the contributing masternode + +More information can be found in the [Commitment phase section of DIP6](https://github.com/dashpay/dips/blob/master/dip-0006.md#5-commitment-phase). + + + +The following annotated hexdump shows a `qpcommit` message. (The +message header has been omitted.) + +{% highlight text %} +01 ......................................... LLMQ Type: 1 (LLMQ_50_60) + +cb9a1552340175a8232437eb8ceceaea +4b90a0f75caff20ee12d230b00000000 ........... Quorum Hash + +59c38b8d6a0664411f92a6326e8ef070 +7ecf185405252854ddb477d89127a32d ........... ProRegTx hash + +32 ......................................... Valid member bitvector size: 50 +ffffffffffff03 ............................. Valid members + +102809b8649209a15fceb3984014eb39 +70ca9bd2464b2f84353a3353f4d612eb +7ca6daaf723170cdbdad40c5cf44f87b ........... Quorum BLS Public Key + +17431ce7dfecb9bba4ccba5921514d24 +fe267c61078bdfe29d90774a3b766ad5 ........... Quorum Verification Vector Hash + +94f7417e0ed56ada7116cf4f1e400748 +deb2e2040babd540f21925b2eec8d4df +75d3e0fc3323d083db76f66ce6128a13 +0f1b2c4725076dae2283bbecbf2e1230 +72cc9cec244337008bf82a670ab9e2ee +6220dd736a1a70c9ca87867ca55f8665 ........... BLS Threshold signature + +85723fe503bba8ac814eab0f28f1fd07 +49927528c01b635d11d3f2843ce3f7e1 +6223c7e9a9e1f70916159c965acae8bf +09d16dc85267ec4081907adc966eae69 +b6a5077267fdc61cdb192faffa27bed9 +2883559bab2ab81cef6253452622b30c ........... BLS signature (Operator Key) +{% endhighlight %} + +--> +{% endautocrossref %} + + +##### qfcommit +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +The `qfcommit` message is used to finalize a long-living masternode quorum setup +by aggregating the information necessary to mine the on-chain QcTx +special transaction. The message contains all the necessary information required +to validate the long-living masternode quorum's signing results. + +It is possible to receive multiple valide final commitments for the same DKG +session. These should only differ in the number of signers, which can be ignored +as long as there are at least `quorumThreshold` number of signers. The set of +valid members for these final commitments should always be the same, as each +member only creates a single premature commitment. This means that only one set +of valid members (and thus only one quorum verification vector and quorum public +key) can gain a majority. If the threshold is not reached, there will be no +valid final commitment. + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 2 | version | uint16_t | Version of the final commitment message +| 1 | llmqType | uint8_t | The type of LLMQ +| 32 | quorumHash | uint256 | The quorum identifier +| 1-9 | signersSize | compactSize uint | Bit size of the signers bitvector +| (bitSize + 7) / 8 | signers | byte[] | Bitset representing the aggregated signers of this final commitment +| 1-9 | validMembersSize | compactSize uint | Bit size of the `validMembers` bitvector +| (bitSize + 7) / 8 | validMembers | byte[] | Bitset of valid members in this commitment +| 48 | quorumPublicKey | BLSPubKey | The quorum public key +| 32 | quorumVvecHash | uint256 | The hash of the quorum verification vector +| 96 | quorumSig | byte[] | Recovered threshold signature +| 96 | sig | byte[] | Aggregated BLS signatures from all included commitments + +More information can be found in the [Finalization phase section of DIP6](https://github.com/dashpay/dips/blob/master/dip-0006.md#6-finalization-phase). + + + +The following annotated hexdump shows a `qfcommit` message. (The +message header has been omitted.) + +{% highlight text %} +0100 ....................................... Message Version: 1 +01 ......................................... LLMQ Type: 1 (LLMQ_50_60) + +cb9a1552340175a8232437eb8ceceaea +4b90a0f75caff20ee12d230b00000000 ........... Quorum Hash + +32 ......................................... Signer bitvector size: 50 +ffffffffffff03 ............................. Signers + +32 ......................................... Valid member bitvector size: 50 +ffffffffffff03 ............................. Valid members + +102809b8649209a15fceb3984014eb39 +70ca9bd2464b2f84353a3353f4d612eb +7ca6daaf723170cdbdad40c5cf44f87b ........... Quorum BLS Public Key + +17431ce7dfecb9bba4ccba5921514d24 +fe267c61078bdfe29d90774a3b766ad5 ........... Quorum Verification Vector Hash + +083388b91a2f8f7f4ea35469f25ee16a +21b3e03b02936675897f74424d6de748 +66b34dcc5861fd3f5f661ea1ed124a08 +0b165f21b1f2db18c4c37c82f8a8d350 +9a6f52a14c643dab71a4dced78ae9a42 +dc982e89a92606df537b8918881e9c95 ........... Quorum BLS Recovered Threshold Sig + +0d131c7062253671f9c8ebb39a9b0057 +d78dc67e236b55086cbb0624c7f4abcc +0a26557bfad3092bd38ded4e3cca6c43 +0dda2e73a99ca3d359631cb99a121c5e +92cea06ef4c03bb18ad9e90559104550 +c8a042dc51aa58a26c134405fc3234ff ........... Quorum Aggregate BLS Sig +{% endhighlight %} + +{% endautocrossref %} + + +#### Signing Sessions +{% include helpers/subhead-links.md %} + +The following network messages enable the long living masternode quorum (LLMQ) +message signing sessions described in [DIP7](https://github.com/dashpay/dips/blob/master/dip-0007.md). + +With the exception of the `qsendrecsigs` message and the `qsigrec` message, +these messages are for intra-quorum communication only and are not +propagated on the Dash network. + +##### qbsigs +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +![Warning icon](/img/icons/icon_warning.svg) Note: This message is used for +intra-quorum communication and is only sent to the masternodes in the LLMQ and +nodes that are monitoring in Watch Mode for auditing/debugging purposes. + +The `qbsigs` message is used to send batched signature shares in response to a +`qgetsigs` message. + +Note: The number of messages that can be sent in a batch is limited to 400 +(as defined by `MAX_MSGS_TOTAL_BATCHED_SIGS` in Dash Core). + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| Varies | batchCount | compactSize uint | Number of batched signature shares | +| Varies | msgs | CBatchedSigShares | Batches of signature shares | + +CBatchedSigShares: + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| Varies | sessionId | varint | Signing session ID | +| Varies | shareCount | compactSize uint | Number of shares | +| shareCount * 98 | sigShares | | Index (2 bytes) and BLS Signature share (96 bytes) | + +The following annotated hexdump shows a `qbsigs` message. (The +message header has been omitted.) + + + +{% highlight text %} +02 ......................................... Number of signature share batches: 2 + +Signature Share Batch 1 +| 84d843 ................................... Session ID +| +| 01 ....................................... Share count: 1 +| +| Share +| | 2100 ................................... Index +| +| | 0fbd0c0981b79544c3e80d1a2eed13fe +| | f08c731b0156654675209812f9b2b8f3 +| | ec23868d26890a0e85e5cec4ad0e2d46 +| | 01293cf7e41841fda5865063e7354f36 +| | e8a5c13d2c2d265a778f41e807b3cc63 +| | 81e202ecf923c62bbb69ecc713bdf86d ....... BLS Signature share + +Signature Share Batch 2 +| 84d844 ................................... Session ID +| +| 01 ....................................... Share Count: 1 +| +| Share +| | 2100 ................................... Index +| | +| | 9570d97e41b78045b51fba3d4f1ea38d +| | 7a0e007535ce6beb1e03eff163b421fd +| | b8125142a12f92aa82770de7bb038207 +| | 13ccc72dd6d9bf91ecc2835da54a0afb +| | 0c0fa5d7a214a020ca650ca202ddff29 +| | c3cac4033098297d2aaee098db5bfe2f ....... BLS Signature share +{% endhighlight %} + +{% endautocrossref %} + + +##### qgetsigs +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +![Warning icon](/img/icons/icon_warning.svg) Note: This message is used for +intra-quorum communication and is only sent to the masternodes in the LLMQ and +nodes that are monitoring in Watch Mode for auditing/debugging purposes. + +The `qgetsigs` message is used to request signature shares. The response to a +`qgetsigs` message is a `qbsigs` message. + +Note: The number of inventories in a `qgetsigs` message is limited to 200 +(as defined by `MAX_MSGS_CNT_QGETSIGSHARES` in Dash Core). + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| Varies | count | compactSize uint | Number of signature shares requested | +| Varies | sessionId | varint | Signing session ID +| Varies | invSize | compactSize uint | Inventory size +| Varies | inv | CAutoBitSet | Quorum signature inventory | + +The following annotated hexdump shows a `qgetsigs` message. (The +message header has been omitted.) + + + +{% highlight text %} +02 ......................................... Count: 2 + +Signature share request 1 +| 80db21 ................................... Session ID +| 32 ....................................... Inventory size: 50 +| 012900 ................................... Inventory + +Signature share request 2 +| 80db22 ................................... Session ID +| 32 ....................................... Inventory Size: 50 +| 012900 ................................... Inventory +{% endhighlight %} + +{% endautocrossref %} + + +##### qsendrecsigs +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +The `qsendrecsigs` message is used to notify a peer to send plain LLMQ recovered +signatures (inventory type `MSG_QUORUM_RECOVERED_SIG`). Otherwise the peer would +only announce/send the higher level messages produced when a recovered signature +is found (e.g. InstantSend `islock` messages or ChainLock `clsig` messages). + +Note: SPV nodes should not send this message as they are usually only interested +in the higher level messages. + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 1 | fSendRecSigs | bool | 0 - Notify peer to not send plain LLMQ recovered signatures
1 - Notify peer to send plain LLMQ recovered signatures (default for Dash Core nodes) + +The following annotated hexdump shows a `qsendrecsigs` message. (The +message header has been omitted.) + +{% highlight text %} +01 ................................. Request recovered signatures: Enabled (1) +{% endhighlight %} + +{% endautocrossref %} + + +##### qsigrec +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +The `qsigrec` message is used to provide recovered signatures and related quorum +details to nodes that have requested this information via the `qsendrecsigs` message. + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| 1 | llmqType | uint8_t | The type of LLMQ +| 32 | quorumHash | uint256 | The quorum hash +| 32 | id | uint256 | The signing request id +| 32 | msgHash | uint256 | The message hash +| 96 | sig | byte[] | The final recovered BLS threshold signature + +More information can be found in the [Recovered threshold signatures section of DIP7](https://github.com/dashpay/dips/blob/master/dip-0007.md#recovered-threshold-signatures). + +The following annotated hexdump shows a `qsigrec` message. (The +message header has been omitted.) + +Note: The following `qsigrec` message corresponds to the example `islock` message +hexdump. The message hash below corresponds to the `islock` TXID field +and the BLS signature matches the BLS signature of the `islock` example. + +{% highlight text %} +01 ......................................... LLMQ Type: 1 (LLMQ_50_60) + +7d0befca14fa9e594aa19deab138ef28 +23fe838c89ed9be6ddc63c0200000000 ........... Quorum Hash + +0f1937c60f35640d063eae8eb288af21 +a2ec0ec69b58b20c52f5d438eaabd54d ........... Signing Request ID + +e2e1c797576d8b13c83e929684b9aacd +553c20a34e2d11e38bdcaaf8e1de1680 ........... Message Hash + +0f055c2064885d446f83d51b9bb09892 +7ea0375a0f6a3f3402abf158ece67e00 +81049b8a8f45d254b64574cef194ef31 +197e450fba1196d652f2e1421d3b80ae +f429c10eabd4ab9289e9a8f80f6989b7 +a11e5e7930deccc3e11a931fc9524f06 ........... LLMQ BLS Signature (96 bytes) +{% endhighlight %} + +{% endautocrossref %} + + +##### qsigsesann +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +![Warning icon](/img/icons/icon_warning.svg) Note: This message is used for +intra-quorum communication and is only sent to the masternodes in the LLMQ and +nodes that are monitoring in Watch Mode for auditing/debugging purposes. + +The `qsigsesann` message is used to announce the sessionId for a signing +session. The sessionId will be used for all P2P messages related to that +session. + +Note: The maximum number of announcements in a `qsigsesann` message is limited to +100 (as defined by `MAX_MSGS_CNT_QSIGSESANN` in Dash Core). + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| Varies | count | compactSize uint | Number of session announcements | +| Varies | sessionId | varint | Signing session ID (must be less than the maximum uint32_t value) +| 1 | llmqType | uint8_t | The LLMQ type +| 32 | quorumHash | uint256 | The quorum identifier +| 32 | id | uint256 | The signing request id +| 32 | msgHash | uint256 | The message hash + +The following annotated hexdump shows a `qsigsesann` message. (The +message header has been omitted.) + + + +{% highlight text %} +02 ......................................... Count: 2 + +Session Announcement 1 +| 84d843 ................................... Session ID +| +| 01 ....................................... LLMQ Type: 1 (LLMQ_50_60) +| +| a34d3ae6b33cb1199c3e5e1cb5a2a55c +| 91e69bb5df2bf80ba1cb0a0d00000000 ......... Quorum Hash +| +| 89bbc2e5741a9f706e8d33dee4132037 +| 8c33511768c5e3d6cdb2a1b7b731360b ......... Signing request ID +| +| d2b41a19237e370b4b091545b203bc0c +| 02ca7e0d5daebf12bb24b13064ed4149 ......... Message Hash + +Session Announcement 2 +| 84d844 ................................... Session ID +| +| 01 ....................................... LLMQ Type: 1 (LLMQ_50_60) +| +| a34d3ae6b33cb1199c3e5e1cb5a2a55c +| 91e69bb5df2bf80ba1cb0a0d00000000 ......... Quorum Hash +| +| 54f73deb42a8ed9b72b9c0535a72f54d +| 5789bbe0dbea2e184c3089f9e8f65c3e ......... Signing request ID +| +| af2e5d730cd37cd911b92db117b4ab99 +| 90a3c0300ce39177d0d31be5b47c2361 ......... Message Hash +{% endhighlight %} + +{% endautocrossref %} + + +##### qsigsinv +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +![Warning icon](/img/icons/icon_warning.svg) Note: This message is used for +intra-quorum communication and is only sent to the masternodes in the LLMQ and +nodes that are monitoring in Watch Mode for auditing/debugging purposes. + +The `qsigsinv` message (quorum signature inventory) announces one or more quorum +signature share inventories known by the transmitting peer. + +Note: The maximum number of inventories in a `qsigsinv` message is limited to +200 (as defined by `MAX_MSGS_CNT_QSIGSHARESINV` in Dash Core). + + + +| Bytes | Name | Data type | Description | +| --- | --- | --- | --- | +| Varies | count | compactSize uint | Number of session announcements | +| Varies | sessionId | varint | Signing session ID (must be less than the maximum uint32_t value) | +| Varies | invSize | compactSize uint | Inventory size +| Varies | inv | CAutoBitSet | Quorum signature inventory | + +The following annotated hexdump shows a `qsigsinv` message. (The +message header has been omitted.) + + + +{% highlight text %} +02 ......................................... Count: 2 + +84d844 ..................................... Session ID +32 ......................................... Inventory size: 50 +011a040200 ................................. Inventory + +84d843 ..................................... Session ID +32 ......................................... Inventory size: 50 +011a0700 ................................... Inventory +{% endhighlight %} + +{% endautocrossref %} + + +#### Debugging +{% include helpers/subhead-links.md %} + +##### qwatch +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70214 of Dash Core* + +The `qwatch` message tells the receiving peer to relay LLMQ messages +(`qcontrib` messages, `qcomplaint` messages, `qjustify` messages, and +`qpcommit` messages). + +There is no payload in a `qwatch` message. See the [message header +section][section message header] for an example of a message without a payload. + +{% endautocrossref %} + ### Governance Messages {% include helpers/subhead-links.md %} @@ -2924,7 +3473,7 @@ bf110000 ................................... Count: 4543 {% autocrossref %} The following network messages enable the Governance features built in to Dash. -For additional details on the governance system, see this [Budget System page](https://dashpay.atlassian.net/wiki/spaces/DOC/pages/8585246/Budget+System+Funding+Voting+DGBB). +For additional details on the governance system, see this [Budget System page](https://docs.dash.org/en/latest/governance/index.html). ![Overview Of P2P Protocol Governance Request And Reply Messages](/img/dev/en-p2p-governance-messages.svg) @@ -2945,11 +3494,11 @@ contract, or setting. Masternodes ignore this request if they are not fully sync | 32 | nHashParent | uint256 | Required | Parent object (a hash of all zeros here indicates this is the root object, not a child object). | 4 | nRevision | int | Required | Object revision in the system | 8 | nTime | int64_t | Required | Time which this object was created -| 32 | nCollateralHash | uint256 | Required* | Hash of the collateral fee transaction for proposals.

Set to all zeros for Triggers/Watchdogs. +| 32 | nCollateralHash | uint256 | Required* | Hash of the collateral fee transaction for proposals.

Set to all zeros for Triggers. | 0-16384 | strData | string | Required | Data field - can be used for anything (leading varint indicates size of data) -| 4 | nObjectType | int | Required | Type of governance object:
• `0` - Unknown
• `1` - Proposal
• `2` - Trigger
• `3` - Watchdog +| 4 | nObjectType | int | Required | Type of governance object:
• `0` - Unknown
• `1` - Proposal
• `2` - Trigger | 36 | masternodeOutPoint | outPoint | Required* | The unspent outpoint of the masternode (holding 1000 DASH) which is signing this object.

Set to all zeros for proposals since they can be created by non-masternodes. -| 66* | vchSig | char[] | Required* | Signature of the masternode (Length (1 byte) + Signature (65 bytes))

Not required for proposals - they will have a length of 0x00 and no Signature. +| 97 | vchSig | char[] | Required* | _ECDSA signature (65 bytes) prior to DIP3 activation_

BLS Signature of the masternode (Length (1 byte) + Signature (96 bytes))

Not required for proposals - they will have a length of 0x00 and no Signature. Governance Object Types (defined by src/governance-object.h) @@ -2958,7 +3507,6 @@ Governance Object Types (defined by src/governance-object.h) | 0 | `GOVERNANCE_OBJECT_UNKNOWN` | | 1 | `GOVERNANCE_OBJECT_PROPOSAL` | Submitted proposal (requires collateral transaction - currently 5 Dash) | 2 | `GOVERNANCE_OBJECT_TRIGGER` | Masternode generated. Removed after activation/execution. Used for superblocks. -| 3 | `GOVERNANCE_OBJECT_WATCHDOG` | Masternode generated. Two hour expiration time.

DEPRECATED since 12.2. The following annotated hexdump shows a `govobj` message for a Proposal object. Notice the presence of a non-zero collateral hash, a masternodeOutPoint that is an @@ -3012,13 +3560,14 @@ Masternode Unspent Outpoint | fa7b6e26e25896d8127332bba2419e97 ... Outpoint TXID | 00000000 ........................... Outpoint index number: 0 -41 ................................... Signature length: 65 +60 ................................... Signature length: 96 -1ce3b782f66be8ae9fc4158680128864 -341202b6006384083ab2d9cfa73795e2 -6000668e84af4ef6a284a52b53843524 -72037d51bd9079ffd5c087d9632865ee -75 ................................... Masternode Signature +06516fa3b38d29fca6194e5d2c929666 +d59d2d105bbbc30a1e5d144e708a610a +2e0ab3c759988b13ff098ab3dbd4e01d +129827ef1e1996c211d6d5ecd5199f60 +cf028b1cdb2f7240e33981b16d1270e9 +d289fca20905fd453620238a505582fa ..... Masternode BLS Signature {% endhighlight %} {% endautocrossref %} @@ -3059,7 +3608,7 @@ the node being banned. | 4 | nVoteOutcome | int | Required | None (0), Yes (1), No (2), Abstain (3) | 4 | nVoteSignal | int | Required | None (0), Funding (1), Valid (2), Delete (3), Endorsed (4) | 8 | nTime | int64_t | Required | Time the vote was created -| 66* | vchSig | char[] | Required | Signature of the masternode (66 bytes in most cases. Length (1 byte) + Signature (65 bytes)) +| 97 | vchSig | char[] | Required | _ECDSA signature (65 bytes) prior to DIP3 activation_

BLS Signature of the masternode (Length (1 byte) + Signature (96 bytes)) Governance Object Vote Signals (defined by src/governance-object.h) @@ -3075,22 +3624,23 @@ message header has been omitted.) {% highlight text %} Masternode Unspent Outpoint -| 57566a0ef85e6cac3415ced67b0b07e1 -| 781bafb853650d7c9d56d8bc132cc3b4 ... Outpoint TXID -| 00000000 ........................... Outpoint index number: 0 +| 9425afd65ccce1d655d4dd461b8523b8 +| 2577a8009c25604c65f3e78ea71d65df ... Outpoint TXID +| 01000000 ........................... Outpoint index number: 1 -ad9579d5c181eee904156df1c88b050f -b8b4d39e5fda71f015996dbf14a51bff...... Parent Hash (0 = root) +bc1bb26088161ff07dc09d873faa5573 +9a2fd53121d315b2942f3b9db36cb475...... Parent Hash (0 = root) 01000000 ............................. Vote Outcome: VOTE_OUTCOME_NONE (1) -02000000 ............................. Vote Signal: VOTE_SIGNAL_VALID (2) -b517a85900000000 ..................... Vote Create Timestamp: 2017-08-31 14:05:41 UTC -00000000000000000000000000000000 ..... Collateral Hash +03000000 ............................. Vote Signal: VOTE_SIGNAL_DELETE (3) +ec3d235c00000000 ..................... Vote Create Time: 2018-12-26 08:38:04 UTC -1b049113a81fe913f061ad295561d267 -00b8135a021ab0356a1e89b18d663d0b -dc45e9c09ee0427223e332b52e8d709e -6d64e86b6435d7bdf207d8f23b6ae0db -6f ................................... Masternode Signature +60 ................................... Signature length: 96 +06516fa3b38d29fca6194e5d2c929666 +d59d2d105bbbc30a1e5d144e708a610a +2e0ab3c759988b13ff098ab3dbd4e01d +129827ef1e1996c211d6d5ecd5199f60 +cf028b1cdb2f7240e33981b16d1270e9 +d289fca20905fd453620238a505582fa ..... Masternode BLS Signature {% endhighlight %} {% endautocrossref %} @@ -3107,16 +3657,14 @@ request if they are not fully synced. This message responds in one of two ways depending on the request: 1. Object Sync - When a masternode receives a `govsync` message with a hash of all zeros, it -responds with one `ssc` message for `govobj` objects and one for `govobjvote` -objects. The masternode also sends an `inv` message (MSG_GOVERNANCE_OBJECT - 0x17) -for all valid `govobj` governance objects. +responds with a `ssc` message for `govobj` objects. The masternode also sends an +`inv` message (MSG_GOVERNANCE_OBJECT - 0x17) for all valid `govobj` governance objects. *Governance object votes are excluded in this type of response.* 2. Vote Sync - When a masternode receives a `govsync` message with a specific hash, it -responds with one `ssc` message for `govobj` objects and one for `govobjvote` -objects. The masternode also sends both a `govobj` inventory message -(MSG_GOVERNANCE_OBJECT - 0x17) and `govobjvote` inventory messages -(MSG_GOVERNANCE_OBJECT_VOTE - 0x18) for the single governance object requested. +responds with an `ssc` message for `govobjvote` objects. The masternode also +sends a `govobjvote` inventory messages (MSG_GOVERNANCE_OBJECT_VOTE - 0x18) for +the object requested. | Bytes | Name | Data type | Required | Description | | ---------- | ----------- | --------- | -------- | -------- | @@ -3139,7 +3687,6 @@ message header has been omitted.) {% endautocrossref %} - ### Deprecated Messages {% include helpers/subhead-links.md %} @@ -3149,56 +3696,177 @@ The following network messages have been deprecated and should no longer be used {% endautocrossref %} -#### mnvs +#### Alert {% include helpers/subhead-links.md %} {% autocrossref %} -Masternode Budget Sync - Deprecated since 12.1 +![Warning icon](/img/icons/icon_warning.svg) Deprecated since 0.14.1 + +*Added in protocol version 311.* +*Removed by Bitcoin in protocol version 70013, but retained by Dash until 0.14.1.* + +The `alert` message warns nodes of problems that may affect them or the +rest of the network. Each `alert` message is signed using a key controlled +by respected community members, mostly Dash Core developers. + +To ensure all nodes can validate and forward `alert` messages, +encapsulation is used. Developers create an alert using the data +structure appropriate for the versions of the software they want to +notify; then they serialize that data and sign it. The serialized data +and its signature make up the outer `alert` message---allowing nodes +which don't understand the data structure to validate the signature and +relay the alert to nodes which do understand it. The nodes which +actually need the message can decode the serialized data to access the +inner `alert` message. + +The outer `alert` message has four fields: + +| Bytes | Name | Data Type | Description +|-------------|-----------------|------------------|------------- +| *Variable* | alert bytes | compactSize uint | The number of bytes in following alert field. +| *Variable* | alert | uchar | The serialized alert. See below for a description of the current alert format. +| *Variable* | signature bytes | compactSize uint | The number of bytes in the following signature field. +| *Variable* | signature | uchar | A DER-encoded ECDSA (secp256k1) signature of the alert signed with the developer's alert key. + +Although designed to be easily upgraded, the format of the inner +serialized alert has not changed since the `alert` message was first +introduced in protocol version 311. + +| Bytes | Name | Data Type | Description +|----------|-------------------|---------------------------|------------- +| 4 | version | int32_t | Alert format version. Version 1 from protocol version 311 through at least protocol version 70002. +| 8 | relayUntil | int64_t | The time beyond which nodes should stop relaying this alert. Unix epoch time format. +| 8 | expiration | int64_t | The time beyond which this alert is no longer in effect and should be ignored. Unix epoch time format. +| 4 | ID | int32_t | A unique ID number for this alert. +| 4 | cancel | int32_t | All alerts with an ID number less than or equal to this number should be canceled: deleted and not accepted in the future. +| *Varies* | setCancel count | compactSize uint | The number of IDs in the following setCancel field. May be zero. +| *Varies* | setCancel | int32_t | Alert IDs which should be canceled. Each alert ID is a separate int32_t number. +| 4 | minVer | int32_t | This alert only applies to protocol versions greater than or equal to this version. Nodes running other protocol versions should still relay it. +| 4 | maxVer | int32_t | This alert only applies to protocol versions less than or equal to this version. Nodes running other protocol versions should still relay it. +| *Varies* | user\_agent count | compactSize uint | The number of user agent strings in the following setUser\_agent field. May be zero. +| *Varies* | setUser\_agent | compactSize uint + string | If this field is empty, it has no effect on the alert. If there is at least one entry is this field, this alert only applies to programs with a user agent that exactly matches one of the strings in this field. Each entry in this field is a compactSize uint followed by a string---the uint indicates how many bytes are in the following string. This field was originally called setSubVer; since BIP14, it applies to user agent strings as defined in the `version` message. +| 4 | priority | int32_t | Relative priority compared to other alerts. +| *Varies* | comment bytes | compactSize uint | The number of bytes in the following comment field. May be zero. +| *Varies* | comment | string | A comment on the alert that is not displayed. +| *Varies* | statusBar bytes | compactSize uint | The number of bytes in the following statusBar field. May be zero. +| *Varies* | statusBar | string | The alert message that is displayed to the user. +| *Varies* | reserved bytes | compactSize uint | The number of bytes in the following reserved field. May be zero. +| *Varies* | reserved | string | Reserved for future use. Originally called RPC Error. + +The annotated hexdump below shows an `alert` message. (The message +header has been omitted.) + + + +{% highlight text %} +73 ................................. Bytes in encapsulated alert: 115 +01000000 ........................... Version: 1 +3766404f00000000 ................... RelayUntil: 1329620535 +b305434f00000000 ................... Expiration: 1330917376 + +f2030000 ........................... ID: 1010 +f1030000 ........................... Cancel: 1009 +00 ................................. setCancel count: 0 + +10270000 ........................... MinVer: 10000 +48ee0000 ........................... MaxVer: 61000 +00 ................................. setUser_agent bytes: 0 +64000000 ........................... Priority: 100 + +00 ................................. Bytes In Comment String: 0 +46 ................................. Bytes in StatusBar String: 70 +53656520626974636f696e2e6f72672f +666562323020696620796f7520686176 +652074726f75626c6520636f6e6e6563 +74696e67206166746572203230204665 +627275617279 ....................... Status Bar String: "See [...]" +00 ................................. Bytes In Reserved String: 0 + +47 ................................. Bytes in signature: 71 +30450221008389df45f0703f39ec8c1c +c42c13810ffcae14995bb648340219e3 +53b63b53eb022009ec65e1c1aaeec1fd +334c6b684bde2b3f573060d5b70c3a46 +723326e4e8a4f1 ..................... Signature +{% endhighlight %} + +**Alert key compromise:** Dash Core's source code defines a +particular set of alert parameters that can be used to notify users that +the alert signing key has been compromised and that they should upgrade +to get a new alert public key. Once a signed alert containing those +parameters has been received, no other alerts can cancel or override it. {% endautocrossref %} -#### mvote +#### ix {% include helpers/subhead-links.md %} {% autocrossref %} -Masternode Budget Vote - Deprecated since 12.1 +![Warning icon](/img/icons/icon_warning.svg) Deprecated since 0.14.1 + +The `ix` message (transaction lock request) has the same structure as the `tx` message. +The masternode network responds with `txlvote` messages if the transaction inputs +can be locked. {% endautocrossref %} -#### mprop + +#### txlvote {% include helpers/subhead-links.md %} {% autocrossref %} -Masternode Budget Proposal - Deprecated since 12.1 - -{% endautocrossref %} - -#### fbs -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -Masternode Budget Final - Deprecated since 12.1 - -{% endautocrossref %} - -#### fbvote -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -Masternode Budget Final Vote - Deprecated since 12.1 - -{% endautocrossref %} - -#### mn quorum -{% include helpers/subhead-links.md %} - -{% autocrossref %} - -Not Implemented +![Warning icon](/img/icons/icon_warning.svg) Deprecated since 0.14.1 + +The `txlvote` message ([transaction lock vote][msg_txlock_vote]) +is sent by masternodes to indicate approval of a transaction lock request +`ix` message. + +| Bytes | Name | Data type | Required | Description | +| ---------- | ----------- | --------- | -------- | -------- | +| 32 | txHash | uint256 | Required | TXID of the transaction to lock +| 36 | outPoint | outpoint | Required | The unspent outpoint to lock in this transaction +| 36 | outpointMasternode | outpoint | Required | The outpoint of the masternode which is signing the vote +| 32 | quorumModifierHash | uint256 | Required | *Added in protocol version 70213. Only present when Spork 15 is active.*

+| 32 | masternodeProTxHash | uint256 | Required | *Added in protocol version 70213. Only present when Spork 15 is active.*

The proTxHash of the DIP3 masternode which is signing the vote +| 96 | vchMasternodeSignature | char[] | Required | Masternode BLS signature + +The following annotated hexdump shows a `txlvote` message. (The +message header has been omitted.) + +{% highlight text %} +84a27bb879f316482598fe65b0b51544 +e85490d85fc36af1c293e186da373c02 ..... TXID + +Outpoint to lock +| 4c1e6318bab4f9284d3bc0e49ec7fe76 +| 1e9c914b8ea0bcac4563005daa451221 ... Outpoint TXID +| 00000000 ........................... Outpoint index number: 0 + +Masternode Outpoint +| 5d02f07c7318411e41fdd4be9f1e5ece +| 16d680cfe318306087edc8fb205e507b ... Outpoint TXID +| 01000000 ........................... Outpoint index number: 1 + +b62cb5007704d2db8595d5b31cfb7cb0 +8d7e530c16a7597e1db4430a00000000 ..... Quorum Modifier hash + +569abbea4ab45f36dd059c44f1dc0804 +f3f13071379c2f418d3637fb548c4159 ..... Masternode ProRegTx hash + +60 ................................... Signature length: 96 + +0b0b97ec14fbc1f12566c3a90ed113e4 +e9c5ee6cdcf2fe2171e4b5f387286146 +a0632a250d64ea507ce5e1d1f1983aae +0b70e568ad2856a0cc13008001c6d0f3 +5bdeb380f6aba0c54663a3b5e2d86d44 +305c2e5d855c72588ffb0e8e2a36482c ..... Masternode BLS Signature +{% endhighlight %} {% endautocrossref %} diff --git a/_includes/devdoc/ref_transactions.md b/_includes/devdoc/ref_transactions.md index f282b8eb..33235c86 100644 --- a/_includes/devdoc/ref_transactions.md +++ b/_includes/devdoc/ref_transactions.md @@ -7,6 +7,8 @@ http://opensource.org/licenses/MIT. ## Transactions {% include helpers/subhead-links.md %} + + The following subsections briefly document core transaction details. #### OpCodes @@ -211,29 +213,108 @@ Dash Core and many other tools print and accept raw transactions encoded as hex. Transactions prior to protocol version 70209 defaulted to version 1. Transaction -version 2 became the default in protocol version 70209. Version 2 transactions -have the same format, but the `lock_time` parameter was redefined by BIP68 -to enable relative lock-times. +version 2 was the default in protocol versions => 70209 and < 70213. Version 2 +transactions have the same format, but the `lock_time` parameter was redefined +by BIP68 to enable relative lock-times. (Note: transactions in the block chain are allowed to list a higher version number to permit soft forks, but they are treated as version 2 transactions by current software.) +Dash Core 0.13.0 (protocol version 70213) introduced transaction version 3 as +part of the [DIP2 - Special Transactions](https://github.com/dashpay/dips/blob/master/dip-0002.md) + implementation. Details of the changes introduced by +this feature and currently implemented special transactions can be found in the +[Special Transactions section](#special-transactions) below as well as in the +[DIP](https://github.com/dashpay/dips/blob/master/dip-0002.md). + A raw transaction has the following top-level format: | Bytes | Name | Data Type | Description |----------|--------------|---------------------|------------- -| 4 | version | uint32_t | Transaction version number; currently version 2. Programs creating transactions using newer consensus rules may use higher version numbers. +| 2 | version | uint16_t | *Converted from 4 bytes to 2 bytes by DIP2 in v0.13.0*

Transaction version number; currently version 3. Programs creating transactions using newer consensus rules may use higher version numbers. +| 2 | type | uint16_t | *Added by DIP2 in v0.13.0. Uses 2 bytes that were previously part of `version`*

Transaction type number; 0 for classical transactions; Non-zero for DIP2 special transactions. | *Varies* | tx_in count | compactSize uint | Number of inputs in this transaction. | *Varies* | tx_in | txIn | Transaction inputs. See description of txIn below. | *Varies* | tx_out count | compactSize uint | Number of outputs in this transaction. | *Varies* | tx_out | txOut | Transaction outputs. See description of txOut below. | 4 | lock_time | uint32_t | A time (Unix epoch time) or block number. See the [locktime parsing rules][]. +| *Varies* | extra_payload size | compactSize uint | *Added by DIP2 in v0.13.0*

Variable number of bytes of extra payload for DIP2-based special transactions +| *Varies* | extra_payload | blob | *Added by DIP2 in v0.13.0*

Special transaction payload. A transaction may have multiple inputs and outputs, so the txIn and txOut structures may recur within a transaction. CompactSize unsigned integers are a form of variable-length integers; they are described in the [CompactSize section][section CompactSize unsigned integer]. +##### JSON-RPC Responses +{% include helpers/subhead-links.md %} + +When retrieving transaction data via Dash Core RPCs (e.g. the `getrawtransaction` RPC), +the transaction data is returned in the following format. + +Version 1 and 2 Transaction Structure (prior to DIP2 activation in Dash Core v0.13.0): +{% highlight json %} +{ + "txid": , + "size": , + "version": 2, + "locktime": 0, + "vin": [ ], + "vout": [ ] +} +{% endhighlight %} + +Version 3 Transaction Structure (Dash Core v0.13.0+ and activated DIP2): +{% highlight json %} +{ + "txid": , + "size": , + "version": 3, + "type": , + "locktime": 0, + "vin": [ ], + "vout": [ ], + "extraPayloadSize": , + "extraPayload": … +} +{% endhighlight %} + +For special transactions (those using the extraPayload fields), JSON-RPC +responses contain a parsed JSON representation of the Transaction Payload. + +The sample transaction below shows the response for a quorum commitment special +transaction: + +{% highlight json %} +{ + "txid": "592a09d08348d970b4d9ba216246a23dac866717b460d3f369a86293b9839eea", + "size": 342, + "version": 3, + "type": 6, + "locktime": 0, + "vin": [ + ], + "vout": [ + ], + "extraPayloadSize": 329, + "extraPayload": "0100841b0000010001211cd3e4230b2bc47530e200447e998a38e960d4ed5f5251e26892130c000000320000000000000032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "qcTx": { + "version": 1, + "height": 7044, + "commitment": { + "version": 1, + "llmqType": 1, + "quorumHash": "0000000c139268e251525fedd460e9388a997e4400e23075c42b0b23e4d31c21", + "signersCount": 0, + "validMembersCount": 0, + "quorumPublicKey": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + } + }, + "instantlock": false +} + +{% endhighlight %} + {% endautocrossref %} ##### TxIn: A Transaction Input (Non-Coinbase) {#txin} @@ -398,6 +479,592 @@ have multiple outputs depending on the number of proposals being funded. {% endautocrossref %} +### Special Transactions +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +The Special Transaction framework established by DIP2 enabled the implementation +of new on-chain features and consensus mechanisms. These transactions provide the +flexibility to expand beyond the financial uses of classical transactions. DIP2 +transactions modified classical transactions by: + +1. Splitting the 32 bit `version` field into two 16 bit fields (`version` and `type`) +2. Adding support for a generic extra payload following the `lock_time` field. The + maximum allowed size for a transaction version 3 extra payload is 10000 bytes + (`MAX_TX_EXTRA_PAYLOAD`). + +Classical (financial) transactions have a `type` of 0 while special transactions +have a `type` defined in the DIP describing them. A list of current special +transaction types is maintained in the [DIP repository](https://github.com/dashpay/dips/blob/master/dip-0002-special-transactions.md). + +**Implemented Special Transactions** + +| Release | Tx Version | Tx Type | Payload Size | Payload | Payload JSON | Tx Purpose +| - | - | - | - | - | - | +| v0.12.3 | 2 | - | n/a | n/a | n/a | +| v0.13.0 | 3 | 0 | n/a | n/a | n/a | Standard (Classical) Transaction +| v0.13.0 | 3 | 1 | compactSize uint | hex | ProRegTx | Masternode Registration +| v0.13.0 | 3 | 2 | compactSize uint | hex | ProUpServTx | Update Masternode Service +| v0.13.0 | 3 | 3 | compactSize uint | hex | ProUpRegTx| Update Masternode Operator +| v0.13.0 | 3 | 4 | compactSize uint | hex | ProUpRevTx| Masternode Operator Revocation +| v0.13.0 | 3 | 5 | compactSize uint | hex | CbTx| Masternode List Merkle Proof +| v0.13.0 | 3 | 6 | compactSize uint | hex | QcTx| Long-Living Masternode Quorum Commitment + +{% endautocrossref %} + +#### ProRegTx +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70213 of Dash Core as described by DIP3* + +The Masternode Registration (ProRegTx) special transaction is used to join the +masternode list by proving ownership of the 1000 DASH necessary to create a +masternode. + +A ProRegTx is created and sent using the `protx` RPC. The ProRegTx must either +include an output with 1000 DASH (`protx register`) or refer to an existing +unspent output holding 1000 DASH (`protx fund_register`). If the 1000 DASH is an +output of the ProRegTx, the collateralOutpoint hash field should be null. + +The special transaction type is 1 and the extra payload consists of the following +data: + +| Bytes | Name | Data type | Description | +| ---------- | ----------- | -------- | -------- | +| 2 | version | uint_16 | Provider transaction version number. Currently set to 1. +| 2 | type | uint_16 | Masternode type. Default set to 0. +| 2 | mode | uint_16 | Masternode mode. Default set to 0. +| 36 | collateralOutpoint | COutpoint | The collateral outpoint.
**Note:** The hash will be null if the collateral is part of this transaction, otherwise it will reference an existing collateral. +| 16 | ipAddress | byte[] | IPv6 address in network byte order. Only IPv4 mapped addresses are allowed (to be extended in the future) +| 2 | port | uint_16 | Port (network byte order) +| 20 | KeyIdOwner | CKeyID | The public key hash used for owner related signing (ProTx updates, governance voting) +| 48 | PubKeyOperator | CBLSPublicKey | The BLS public key used for operational related signing (network messages, ProTx updates) +| 20 | KeyIdVoting | CKeyID | The public key hash used for voting. +| 2 | operatorReward | uint_16 | A value from 0 to 10000. +| 1-9 | scriptPayoutSize | compactSize uint | Size of the Payee Script. +| Variable | scriptPayout | Script | Payee script (p2pkh/p2sh) +| 32 | inputsHash | uint256 | Hash of all the outpoints of the transaction inputs +| 1-9 | payloadSigSize |compactSize uint | Size of the Signature +| Variable | payloadSig | vector | Signature of the hash of the ProTx fields. Signed with the key corresponding to the collateral outpoint in case the collateral is not part of the ProRegTx itself, empty otherwise. + +The following annotated hexdump shows a ProRegTx transaction referencing an +existing collateral. (Parts of the classical transaction section have been omitted.) + +{% highlight text %} +0300 ....................................... Version (3) +0100 ....................................... Type (1 - ProRegTx) + +[...] ...................................... Transaction inputs omitted +[...] ...................................... Transaction outputs omitted + +00000000 ................................... locktime: 0 (a block height) + +fd1201 ..................................... Extra payload size (274) + +ProRegTx Payload +| 0100 ..................................... Version (1) +| 0000 ..................................... Type (0) +| 0000 ..................................... Mode (0) +| +| 4859747b0eb19bb2dae5a12ef7b6a69b +| 03712bfeded1174de0b6ab1334ab2e8b ......... Outpoint TXID +| 01000000 ................................. Outpoint index number: 1 +| +| 00000000000000000000ffffc0000233 ......... IP Address: ::ffff:192.0.2.51 +| 270f ..................................... Port: 9999 +| +| +| 1636e84d02310b0b458f3eb51d8ea8b2e684b7ce . Owner pubkey hash (ECDSA) +| 88d719278eef605d9c19037366910b59bc28d437 +| de4a8db4d76fda6d6985dbdf10404fb9bb5cd0e8 +| c22f4a914a6c5566 ......................... Operator public key (BLS) +| 1636e84d02310b0b458f3eb51d8ea8b2e684b7ce . Voting pubkey hash (ECDSA) +| +| f401 ..................................... Operator reward (500 -> 5%) +| +| Payout script +| 19 ....................................... Bytes in pubkey script: 25 +| | 76 ..................................... OP_DUP +| | a9 ..................................... OP_HASH160 +| | 14 ..................................... Push 20 bytes as data +| | | fc136008111fcc7a05be6cec66f97568 +| | | 727a9e51 ............................. PubKey hash +| | 88 ..................................... OP_EQUALVERIFY +| | ac ..................................... OP_CHECKSIG +| +| 0fcfb7d939078ba6a6b81ecf1dc2e05d +| e2776f49f7b503ac254798be6a672699 ......... Inputs hash +| +| Payload signature +| 41 ....................................... Signature Size (65) +| 200476f193b465764093014ba44bd4ff +| de2b3fc92794c4acda9cad6305ca172e +| 9e3d6b1cd6e30f86678dae8e6595e53d +| 2b30bc32141b6c0151eb58479121b3e6a4 ....... Signature +{% endhighlight %} + +The following annotated hexdump shows a ProRegTx transaction creating a new +collateral. + +**Note the presence of the output, a null Outpoint TXID and the +absence of a signature (since it isn't referring to an existing collateral).** +(Parts of the classical transaction section have been omitted.) + +{% highlight text %} +0300 ....................................... Version (3) +0100 ....................................... Type (1 - ProRegTx) + +[...] ...................................... Transaction inputs omitted + +02 ......................................... Number of outputs +| [...] .................................... 1 output omitted +| +| Masternode collateral output +| | 00e8764817000000 ....................... Duffs (1000 DASH) +| | 1976a9149e648c7e4b61482aa3 +| | 9bd10e0bf0b5268768005f88ac ............. Script + +00000000 ................................... locktime: 0 (a block height) + +d1 ......................................... Extra payload size (209) + +ProRegTx Payload +| 0100 ..................................... Version (1) +| 0000 ..................................... Type (0) +| 0000 ..................................... Mode (0) +| +| 00000000000000000000000000000000 +| 00000000000000000000000000000000 ......... Outpoint TXID +| 01000000 ................................. Outpoint index number: 1 +| +| 00000000000000000000ffffc0000233 ......... IP Address: ::ffff:192.0.2.51 +| 270f ..................................... Port: 9999 +| +| 757a2171bbf92517e358249f20c37a8ad2d7a5bc . Owner pubkey hash (ECDSA) +| 0e02146e9c34cfbcb3f3037574a1abb35525e2ca +| 0c3c6901dbf82ac591e30218d1711223b7ca956e +| df39f3d984d06d51 ......................... Operator public key (BLS) +| 757a2171bbf92517e358249f20c37a8ad2d7a5bc . Voting pubkey hash (ECDSA) +| +| f401 ..................................... Operator reward (500 -> 5%) +| +| Payout script +| 19 ....................................... Bytes in pubkey script: 25 +| | 76 ..................................... OP_DUP +| | a9 ..................................... OP_HASH160 +| | 14 ..................................... Push 20 bytes as data +| | | 9e648c7e4b61482aa39bd10e0bf0b526 +| | | 8768005f ............................. PubKey hash +| | 88 ..................................... OP_EQUALVERIFY +| | ac ..................................... OP_CHECKSIG +| +| 57b115d681b9aff82824ff7e22af99d4 +| ac4b39ad7be7cb70b662e9011827d589 ......... Inputs hash +| +| Payload signature +| 00 ....................................... Signature Size (0) +| .......................................... Signature (Empty) +{% endhighlight %} + +{% endautocrossref %} + +#### ProUpServTx +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70213 of Dash Core as described by DIP3* + +The Masternode Provider Update Service (ProUpServTx) special transaction is used +to update the IP Address and port of a masternode. If a non-zero operatorReward +was set in the initial ProRegTx, the operator may also set the scriptOperatorPayout +field in the ProUpServTx. + +A ProUpServTx is only valid for masternodes in the registered masternodes subset. +When processed, it updates the metadata of the masternode entry and revives the +masternode if it was previously marked as PoSe-banned. + +A ProUpServTx is created and sent using the `protx update_service` RPC. + +The special transaction type used for ProUpServTx Transactions is 2 and the extra +payload consists of the following data: + +| Bytes | Name | Data type | Description | +| ---------- | ----------- | -------- | -------- | +| 2 | version | uint_16 | ProUpServTx version number. Currently set to 1. +| 32 | proTXHash | uint256 | The hash of the initial ProRegTx +| 16 | ipAddress | byte[] | IPv6 address in network byte order. Only IPv4 mapped addresses are allowed (to be extended in the future) +| 2 | port | uint_16 | Port (network byte order) +| 1-9 | scriptOperator
PayoutSize | compactSize uint | Size of the Operator Payee Script. +| Variable | scriptOperator
Payout | Script | Operator Payee script (p2pkh/p2sh) +| 32 | inputsHash | uint256 | Hash of all the outpoints of the transaction inputs +| 1-9 | payloadSigSize |compactSize uint | Size of the Signature
**Note:** not present in BLS implementation +| 96 | payloadSig | vector | BLS Signature of the hash of the ProUpServTx fields. Signed by the Operator. + +The following annotated hexdump shows a ProUpServTx transaction. (Parts of the +classical transaction section have been omitted.) + +{% highlight text %} +0300 ....................................... Version (3) +0200 ....................................... Type (2 - ProUpServTx) + +[...] ...................................... Transaction inputs omitted +[...] ...................................... Transaction outputs omitted + +00000000 ................................... locktime: 0 (a block height) + +b5 ......................................... Extra payload size (181) + +ProUpServTx Payload +| 0100 ..................................... Version (1) +| +| db60b8cecae691a3d078a2341d460b06 +| b2914f6b092f1906b5c815589399b0ff ......... ProRegTx Hash +| +| 00000000000000000000ffffc0000233 ......... IP Address: ::ffff:192.0.2.51 +| 270f ..................................... Port: 9999 +| +| 00 ....................................... Operator payout script size (0) +| .......................................... Operator payout script (Empty) +| +| a9569d037b0eacc8bca05c5829c95283 +| 4ac27d1c7e7df610500b7ba70fd46507 ......... Inputs hash +| +| Payload signature (BLS) +| 0267702ef85d186ef7fa32dc40c65f2f +| eca0a7465715eb7c30f81beb69e35ee4 +| 1f6ff7f292b82a9caebb5aa961b0f915 +| 02501becf629e93c0a01c76162d56a6c +| 65a9675c3ca9d5297f053e68f91393dd +| 789beed8ef7e8839695a334c2e1bd37c ......... BLS Signature (96 bytes) +{% endhighlight %} + +{% endautocrossref %} + +#### ProUpRegTx +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70213 of Dash Core as described by DIP3* + +The Masternode Provider Update Registrar (ProUpRegTx) special transaction is used +by a masternode owner to update masternode metadata (e.g. operator/voting key +details or the payout script). + +A ProUpRegTx is created and sent using the `protx update_registrar` RPC. + +The special transaction type is 3 and the extra payload consists of the following +data: + +| Bytes | Name | Data type | Description | +| ---------- | ----------- | -------- | -------- | +| 2 | version | uint_16 | Provider update registrar transaction version number. Currently set to 1. +| 32 | proTXHash | uint256 | The hash of the initial ProRegTx +| 2 | mode | uint_16 | Masternode mode. Default set to 0. +| 48 | PubKeyOperator | CBLSPublicKey | The BLS public key used for operational related signing (network messages, ProTx updates) +| 20 | KeyIdVoting | CKeyID | The public key hash used for voting. +| 1-9 | scriptPayoutSize | compactSize uint | Size of the Payee Script. +| Variable | scriptPayout | Script | Payee script (p2pkh/p2sh) +| 32 | inputsHash | uint256 | Hash of all the outpoints of the transaction inputs +| 1-9 | payloadSigSize |compactSize uint | Size of the Signature +| Variable | payloadSig | vector | Signature of the hash of the ProTx fields. Signed with the key corresponding to the collateral outpoint in case the collateral is not part of the ProRegTx itself, empty otherwise. + +The following annotated hexdump shows a ProUpRegTx transaction referencing an +existing collateral. (Parts of the classical transaction section have been omitted.) + + + +{% highlight text %} +0300 ....................................... Version (3) +0300 ....................................... Type (3 - ProUpRegTx) + +[...] ...................................... Transaction inputs omitted +[...] ...................................... Transaction outputs omitted + +00000000 ................................... locktime: 0 (a block height) + +e4 ......................................... Extra payload size (228) + +ProRegTx Payload +| 0100 ..................................... Version (1) +| +| ddaf13bf1b02de39711de911e646c63e +| f089b6cee786a1b776086ae130331bba ......... ProRegTx Hash +| +| 0000 ..................................... Mode (0) +| +| 0e02146e9c34cfbcb3f3037574a1abb35525e2ca +| 0c3c6901dbf82ac591e30218d1711223b7ca956e +| df39f3d984d06d51 ......................... Operator public key (BLS) +| 757a2171bbf92517e358249f20c37a8ad2d7a5bc . Voting pubkey hash (ECDSA) +| +| Payout script +| 19 ....................................... Bytes in pubkey script: 25 +| | 76 ..................................... OP_DUP +| | a9 ..................................... OP_HASH160 +| | 14 ..................................... Push 20 bytes as data +| | | 9e648c7e4b61482aa39bd10e0bf0b526 +| | | 8768005f ............................. PubKey hash +| | 88 ..................................... OP_EQUALVERIFY +| | ac ..................................... OP_CHECKSIG +| +| 50b50b24193b2b16f0383125c1f4426e +| 883d256eeadee96d500f8c08b0e0f9e4 ......... Inputs hash +| +| Payload signature +| 41 ....................................... Signature Size (65) +| 1ffa8a27ae0301e414176d4c876cff2e +| 20b810683a68ab7dcea95de1f8f36441 +| 4c56368f189a3ef7a59b83bd77f22431 +| a73d347841a58768b94c771819dc2bbce3 ....... Signature +{% endhighlight %} + +{% endautocrossref %} + +#### ProUpRevTx +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70213 of Dash Core as described by DIP3* + +The Masternode Operator Revocation (ProUpRevTx) special transaction allows an +operator to revoke their key in case of compromise or if they wish to terminate +service. If a masternode's operator key is revoked, the masternode becomes +ineligible for payment until the owner provides a new operator key (via a ProUpRegTx). + +A ProUpRevTx is created and sent using the `protx revoke` RPC. + +The special transaction type used for ProUpServTx Transactions is 4 and the extra +payload consists of the following data: + +| Bytes | Name | Data type | Description | +| ---------- | ----------- | -------- | -------- | +| 2 | version | uint_16 | ProUpRevTx version number. Currently set to 1. +| 32 | proTXHash | uint256 | The hash of the initial ProRegTx +| 2 | reason | uint_16 | The reason for revoking the key.
`0` - Not specified
`1` - Termination of Service
`2` - Compromised Key
`3` - Change of key +| 32 | inputsHash | uint256 | Hash of all the outpoints of the transaction inputs +| 1-9 | payloadSigSize |compactSize uint | Size of the Signature
**Note:** not present in BLS implementation +| 96 | payloadSig | vector | BLS Signature of the hash of the ProUpServTx fields. Signed by the Operator. + +The following annotated hexdump shows a ProUpRevTx transaction. (Parts of the +classical transaction section have been omitted.) + +{% highlight text %} +0300 ....................................... Version (3) +0400 ....................................... Type (4 - ProUpRevTx) + +[...] ...................................... Transaction inputs omitted +[...] ...................................... Transaction outputs omitted + +00000000 ................................... locktime: 0 (a block height) + +a4 ......................................... Extra payload size (164) + +ProUpRevTx Payload +| 0100 ..................................... Version (1) +| +| ddaf13bf1b02de39711de911e646c63e +| f089b6cee786a1b776086ae130331bba ......... ProRegTx Hash +| +| 0000 ..................................... Reason: 0 (Not specified) +| +| cb0dfe113c87f8e9cde2c5d18aae12fc +| 8d0617c42c34ca5c2f2f6ab4b1dae164 ......... Inputs hash +| +| Payload signature (BLS) +| 0adaef4bf1a904308f1b0efbdfaffc93 +| 864f9e047fd83415c831589180303711 +| 0f0d8adb312ab43ddd7f8086042d3f5b +| 09029a6a16c341c9d2a62789b495fef4 +| e068da711dac28106ff354db7249ae88 +| 05877d82ff7d1af00ae2d303dea5eb3b ......... BLS Signature (96 bytes) +{% endhighlight %} + +{% endautocrossref %} + +#### CbTx +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70213 of Dash Core as described by DIP4* + +The Coinbase (CbTx) special transaction adds information to the block’s coinbase +transaction that enables verification of the deterministic masternode list without +the full chain (e.g. from SPV clients). This allows light-clients to properly +verify InstantSend transactions and support additional deterministic masternode +list functionality in the future. + +The special transaction type used for CbTx Transactions is 5 and the extra +payload consists of the following data: + +| Bytes | Name | Data type | Description | +| ---------- | ----------- | -------- | -------- | +| 2 | version | uint_16 | CbTx version number. Currently set to 1. +| 4 | height | uint32_t | Height of the block +| 32 | merkleRootMNList | uint256 | Merkle root of the masternode list +| 32 | merkleRootQuorums | uint256 | *Added by CbTx version 2 in v0.14.0*

Merkle root of currently active LLMQs + +Version History + +| CbTx Version | First Supported Protocol Version | Dash Core Version | Notes | +| ---------- | ----------- | -------- | -------- | +| 1 | 70213 | 0.13.0 | Enabled by activation of DIP3 +| 2 | 70214 | 0.14.0 | Enabled by activation of DIP8 + +The following annotated hexdump shows a CbTx transaction. + + + +An itemized coinbase transaction: + +{% highlight text %} +0300 ....................................... Version (3) +0500 ....................................... Type (5 - Coinbase) + +01 ......................................... Number of inputs +| 00000000000000000000000000000000 +| 00000000000000000000000000000000 ......... Previous outpoint TXID +| ffffffff ................................. Previous outpoint index +| +| 4c ....................................... Bytes in coinbase: 76 +| | +| | 03 ..................................... Bytes in height +| | | 393d01 ............................... Height: 81209 +| | +| | 04b9...6d2f ............................ Arbitrary data (truncated) +| 00000000 ................................. Sequence + +02 ......................................... Output count +| Transaction Output 1 +| | 40230e4300000000 ....................... Duffs (11.25 DASH) +| | 1976a914b7ce0ea9ce2010f58ba4aaa6 +| | caa76671c438e89088ac ................... Script +| +| Transaction Output 2 +| | 40230e4300000000 ....................... Duffs (11.25 DASH) +| | 1976a91405ea03a6c9dfa67e1837b3c1 +| | 4965ba3cb53bce7288ac ................... P2PKH script + +00000000 ................................... Locktime + +46 ......................................... Extra payload size (38) + +Coinbase Transaction Payload +| 0200 ..................................... Version (2) +| +| 393d0100 ................................. Block height: 81209 +| +| e2dd012c5b0b1753cef0e32f978917ef +| e7a484c5080b31b4e3f966ccc0e0f8dd ......... MN List merkle root +| +| 2ef709f55fa42cb53d29d75dad77d212 +| fb0bd72a47ecfe0e8aa6f660fb96396e ......... Active LLMQ merkle root +{% endhighlight %} + +{% endautocrossref %} + +#### QcTx +{% include helpers/subhead-links.md %} + +{% autocrossref %} + +*Added in protocol version 70213 of Dash Core as described by DIP6* + +**NOTE: This special transaction has no inputs and no outputs and thus also +pays no fee.** + +The Quorum Commitment (QcTx) special transaction adds the best final commitment from a +Long-Living Masternode Quorum (LLMQ) Distributed Key Generation (DKG) session to +the chain. + +Since this special transaction pays no fees, it is mandatory by consensus rules +to ensure that miners include it. Exactly one quorum commitment transaction MUST +be included in every block while in the mining phase of the LLMQ process until a +valid commitment is present in a block. + +If a DKG failed or a miner did not receive a final commitment in-time, a null +commitment has to be included in the special transaction payload. A null +commitment must have the `signers` and `validMembers` bitsets set to the +`quorumSize` and all bits set to zero. All other fields must be set to the null +representation of the field’s types. + +The special transaction type used for Quorum Commitment Transactions is 6 and +the extra payload consists of the following data: + +| Bytes | Name | Data type | Description | +| ---------- | ----------- | -------- | -------- | +| 2 | version | uint_16 | Quorum Commitment version number. Currently set to 1. +| 4 | height | uint32_t | Height of the block +| Variable | commitment | qfcommit | The payload of the `qfcommit` message + +The following annotated hexdump shows a QcTx transaction. + + + +An itemized quorum commitment transaction: + +{% highlight text %} +0300 ....................................... Version (3) +0600 ....................................... Type (6 - Quorum Commitment) + +00 ......................................... Number of inputs +00 ......................................... Number of outputs + +00000000 ................................... Locktime + +fd4901 ..................................... Extra payload size (329) + +Quorum Commitment Transaction Payload +| 0100 ..................................... Version (1) +| +| 934c0100 ................................. Block height: 85139 +| +| Payload from the qfcommit message +| | 0100 ................................... Version (1) +| | +| | 01 ..................................... LLMQ Type (1) +| | +| | 6b2fd2c61cea32d939ee7fe185c7abc5 +| | 01aa7001d973379f46b9200500000000 ....... Quorum hash +| | +| | 32 ..................................... Number of signers (50) +| | bfffffffffff03 ......................... Aggregrated signers bitvector +| | +| | 32 ..................................... Number of valid members (50) +| | bfffffffffff03 ......................... Valid members bitvector +| | +| | 9450e90f61a24a4205c92572666ed068 +| | 40f617ac11a26d650c88769675e81197 +| | 993858d8b695f120f0af7dd38c17a67e ....... Quorum public key (BLS) +| | +| | 912507814fe204c59e14720bc961c09f +| | f88a4fd1f15e9c2efd4e4f112720967d ....... Quorum verification vector hash +| | +| | Quorum threshold signature (BLS) +| | 0281c321090c2d2e59a0d3754dcfbc11 +| | d76c26a152b50885d826915af4d95a73 +| | 120d0e1ba7e96d89f40252e24109c323 +| | 0971dda1f554d331985ca570c76b9a1a +| | ec699ec132838ae097c767d65d0a51d7 +| | 017c62e062270b60b854ae912bc07437 ....... BLS Signatures (96 bytes) +| | +| | Aggregated signatures from all commitments (BLS) +| | 91f878a0ae620e2178bff06c3a3967d7 +| | 433d4b82e7879bb927dd5cb605423c84 +| | 0641fcddf3731da80d0515a172ff3666 +| | 0f4eac88ee8fd7779e32e4f0be704078 +| | df31601b87b95374cebb4b304afc543e +| | e0d4f461a2ba0e32a711197ca559dacf ....... BLS Signature (96 bytes) +{% endhighlight %} + +{% endautocrossref %} + ### CompactSize Unsigned Integers {% include helpers/subhead-links.md %} diff --git a/_includes/helpers/summaries.md b/_includes/helpers/summaries.md index 67a59ce0..52cfbbb6 100644 --- a/_includes/helpers/summaries.md +++ b/_includes/helpers/summaries.md @@ -1,12 +1,13 @@ {%comment%}AUTOMATICALLY-GENERATED FILE: DO NOT EDIT THIS FILE This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_abandonTransaction="marks an in-wallet transaction and all its in-wallet descendants as abandoned. This allows their inputs to be respent." %} +{% assign summary_abortRescan="Stops current wallet rescan" %} {% assign summary_addMultiSigAddress="adds a P2SH multisig address to the wallet." %} {% assign summary_addNode="attempts to add or remove a node from the addnode list, or to try a connection to a node once." %} -{% assign summary_addWitnessAddress="adds a witness address for a script (with pubkey or redeem script known)." %} {% assign summary_backupWallet="safely copies `wallet.dat` to the specified file, which can be a directory or a path with filename." %} -{% assign summary_bumpFee="replaces an unconfirmed wallet transaction that signaled RBF with a new transaction that pays a higher fee." %} +{% assign summary_bls="provides a set of commands to execute BLS-related actions." %} {% assign summary_clearBanned="clears list of banned nodes." %} +{% assign summary_combineRawTransaction="combine multiple partially signed transactions into one transaction." %} {% assign summary_createMultiSig="creates a P2SH multi-signature address." %} {% assign summary_createRawTransaction="creates an unsigned serialized transaction that spends a previous output to a new output with a P2PKH or P2SH address. The transaction is not stored in the wallet or transmitted to the network." %} {% assign summary_debug="changes the debug category from the console." %} @@ -18,9 +19,9 @@ This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_dumpWallet="creates or overwrites a file with all wallet keys in a human-readable format." %} {% assign summary_encryptWallet="encrypts the wallet with a passphrase. This is only to enable encryption for the first time. After encryption is enabled, you will need to enter the passphrase to use private keys." %} {% assign summary_estimateFee="estimates the transaction fee per kilobyte that needs to be paid for a transaction to begin confirmation within a certain number of blocks." %} -{% assign summary_estimatePriority="estimates the priority that a transaction needs in order to be included within a certain number of blocks as a free high-priority transaction." %} +{% assign summary_estimatePriority="was removed in Dash Core 0.14.0." %} {% assign summary_estimateSmartFee="estimates the transaction fee per kilobyte that needs to be paid for a transaction to begin confirmation within a certain number of blocks and returns the number of blocks for which the estimate is valid." %} -{% assign summary_estimateSmartPriority="estimates the priority that a transaction needs in order to be included within a certain number of blocks as a free high-priority transaction and returns the number of blocks for which the estimate is valid." %} +{% assign summary_estimateSmartPriority="was removed in Dash Core 0.14.0." %} {% assign summary_fundRawTransaction="adds inputs to a transaction until it has enough in value to meet its out value." %} {% assign summary_gObject="provides a set of commands for managing governance objects and displaying information about them." %} {% assign summary_generate="mines blocks immediately (before the RPC call returns)." %} @@ -36,6 +37,7 @@ This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_getAddressesByAccount="returns a list of every address assigned to a particular account." %} {% assign summary_getBalance="gets the balance in decimal dash across all accounts or for a particular account." %} {% assign summary_getBestBlockHash="returns the header hash of the most recent block on the best block chain." %} +{% assign summary_getBestChainLock="returns the block hash of the best chainlock." %} {% assign summary_getBlock="gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block." %} {% assign summary_getBlockChainInfo="provides information about the current state of the block chain." %} {% assign summary_getBlockCount="returns the number of blocks in the local best block chain." %} @@ -43,8 +45,10 @@ This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_getBlockHashes="returns array of hashes of blocks within the timestamp range provided (requires `timestampindex` to be enabled)." %} {% assign summary_getBlockHeader="gets a block header with a particular header hash from the local block database either as a JSON object or as a serialized block header." %} {% assign summary_getBlockHeaders="returns an array of items with information about the requested number of blockheaders starting from the requested hash." %} +{% assign summary_getBlockStats="computes per block statistics for a given window." %} {% assign summary_getBlockTemplate="gets a block template or proposal for use with mining software." %} {% assign summary_getChainTips="returns information about the highest-height block (tip) of each local block chain." %} +{% assign summary_getChainTxStats="compute statistics about the total number and rate of transactions in the chain." %} {% assign summary_getConnectionCount="returns the number of connections to other nodes." %} {% assign summary_getDifficulty="returns the proof-of-work difficulty as a multiple of the minimum difficulty." %} {% assign summary_getGenerate="was removed in Dash Core 0.12.3." %} @@ -56,6 +60,7 @@ This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_getMemPoolEntry="returns mempool data for given transaction (must be in mempool)." %} {% assign summary_getMemPoolInfo="returns information about the node's current transaction memory pool." %} {% assign summary_getMemoryInfo="returns information about memory usage." %} +{% assign summary_getMerkleBlocks="returns an array of hex-encoded merkleblocks for blocks starting from which match ." %} {% assign summary_getMiningInfo="returns various mining-related information." %} {% assign summary_getNetTotals="returns information about network traffic, including bytes in, bytes out, and the current time." %} {% assign summary_getNetworkHashPS="returns the estimated network hashes per second based on the last n blocks." %} @@ -68,6 +73,7 @@ This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_getRawTransaction="gets a hex-encoded serialized transaction or a JSON object describing the transaction. By default, Dash Core only stores complete transaction data for UTXOs and your own transactions, so the RPC may fail on historic transactions unless you use the non-default `txindex=1` in your Dash Core startup settings." %} {% assign summary_getReceivedByAccount="returns the total amount received by addresses in a particular account from transactions with the specified number of confirmations. It does not count coinbase transactions." %} {% assign summary_getReceivedByAddress="returns the total amount received by the specified address in transactions with the specified number of confirmations. It does not count coinbase transactions." %} +{% assign summary_getSpecialTxes="returns an array of special transactions found in the specified block" %} {% assign summary_getSpentInfo="returns the txid and index where an output is spent (requires `spentindex` to be enabled)." %} {% assign summary_getSuperblockBudget="returns the absolute maximum sum of superblock payments allowed." %} {% assign summary_getTransaction="gets detailed information about an in-wallet transaction." %} @@ -85,7 +91,6 @@ This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_importPrunedFunds="imports funds without the need of a rescan. Meant for use with pruned wallets." %} {% assign summary_importPubKey="imports a public key (in hex) that can be watched as if it were in your wallet but cannot be used to spend" %} {% assign summary_importWallet="imports private keys from a file in wallet dump file format (see the `dumpwallet` RPC). These keys will be added to the keys currently in the wallet. This call may need to rescan all or parts of the block chain for transactions affecting the newly-added keys, which may take several minutes." %} -{% assign summary_instantSendToAddress="InstantSend an amount to a given address." %} {% assign summary_keepass="provides commands for configuring and managing KeePass authentication" %} {% assign summary_keyPoolRefill="fills the cache of unused pre-generated keys (the keypool)." %} {% assign summary_listAccounts="lists accounts and their balances." %} @@ -98,9 +103,11 @@ This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_listSinceBlock="gets all transactions affecting the wallet which have occurred since a particular block, plus the header hash of a block at a particular depth." %} {% assign summary_listTransactions="returns the most recent transactions that affect the wallet." %} {% assign summary_listUnspent="returns an array of unspent transaction outputs belonging to this wallet." %} +{% assign summary_listWallets="returns a list of currently loaded wallets." %} {% assign summary_lockUnspent="temporarily locks or unlocks specified transaction outputs. A locked transaction output will not be chosen by automatic coin selection when spending dash. Locks are stored in memory only, so nodes start with zero locked outputs and the locked output list is always cleared when a node stops or fails." %} +{% assign summary_logging="gets and sets the logging configuration" %} {% assign summary_masternode="provides a set of commands for managing masternodes and displaying information about them." %} -{% assign summary_masternodeBroadcast="provides a set of commands to create and relay masternode broadcast messages." %} +{% assign summary_masternodeBroadcast="was removed in Dash Core 0.14.0." %} {% assign summary_masternodeList="returns a list of masternodes in different modes." %} {% assign summary_mnSync="returns the sync status, updates to the next step or resets it entirely." %} {% assign summary_move="moves a specified amount from one account in your wallet to another using an off-block-chain transaction." %} @@ -108,7 +115,9 @@ This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_preciousBlock="treats a block as if it were received before others with the same work." %} {% assign summary_prioritiseTransaction="adds virtual priority or fee to a transaction, allowing it to be accepted into blocks mined by this node (or miners which use this node) with a lower priority or fee. (It can also remove virtual priority or fee, requiring the transaction have a higher priority or fee to be accepted into a locally-mined block.)" %} {% assign summary_privateSend="controls the mixing process." %} +{% assign summary_proTx="provides a set of commands to execute ProTx related actions." %} {% assign summary_pruneBlockChain="prunes the blockchain up to a specified height or timestamp." %} +{% assign summary_quorum="provides a set of commands for quorums (LLMQs)." %} {% assign summary_removePrunedFunds="deletes the specified transaction from the wallet. Meant for use with pruned wallets and as a companion to importprunedfunds." %} {% assign summary_restGetBlock-noTxDetails="gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block. The JSON object includes TXIDs for transactions within the block rather than the complete transactions [GET block][rest get block] returns." %} {% assign summary_restGetBlock="gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block." %} @@ -122,12 +131,13 @@ This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_sendMany="creates and broadcasts a transaction which sends outputs to multiple addresses." %} {% assign summary_sendRawTransaction="validates a transaction and broadcasts it to the peer-to-peer network." %} {% assign summary_sendToAddress="spends an amount to a given address." %} -{% assign summary_sentinelPing="sends a Sentinel Ping to the network." %} +{% assign summary_sentinelPing="was removed in Dash Core 0.14.0." %} {% assign summary_setAccount="puts the specified address in the given account." %} -{% assign summary_setBIP69Enabled="enables or disables BIP69 input/output sorting (regtest network only)" %} {% assign summary_setBan="attempts add or remove a IP/Subnet from the banned list." %} {% assign summary_setGenerate="was removed in Dash Core 0.12.3." %} {% assign summary_setNetworkActive="disables/enables all P2P network activity." %} +{% assign summary_setPrivateSendAmount="sets the amount of DASH to be mixed with PrivateSend" %} +{% assign summary_setPrivateSendRounds="sets the number of PrivateSend mixing rounds to use" %} {% assign summary_setTxFee="sets the transaction fee per kilobyte paid by transactions created by this wallet." %} {% assign summary_signMessage="signs a message with the private key of an address." %} {% assign summary_signMessageWithPrivKey="signs a message with a given private key." %} @@ -135,6 +145,7 @@ This file is licensed under the terms of its source texts{%endcomment%} {% assign summary_spork-rpc="reads or updates spork settings on the network." %} {% assign summary_stop="safely shuts down the Dash Core server." %} {% assign summary_submitBlock="accepts a block, verifies it is a valid addition to the block chain, and broadcasts it to the network. Extra parameters are ignored by Dash Core but may be used by mining pools or other programs." %} +{% assign summary_uptime="returns the total uptime of the server." %} {% assign summary_validateAddress="returns information about the given Dash address." %} {% assign summary_verifyChain="verifies each entry in the local block chain database." %} {% assign summary_verifyMessage="verifies a signed message." %} diff --git a/_includes/helpers/vars.md b/_includes/helpers/vars.md index b3ba1ee9..cc80907c 100644 --- a/_includes/helpers/vars.md +++ b/_includes/helpers/vars.md @@ -48,6 +48,21 @@ http://opensource.org/licenses/MIT. p: "Required
(exactly 1)" d: "The number of confirmations the transaction has received. Will be `0` for unconfirmed and `-1` for conflicted" +- n: "{{DEPTH}}
`instantlock`" + t: "bool" + p: "Required
(exactly 1)" + d: "Current transaction lock state (InstantSend and/or ChainLock)" + +- n: "{{DEPTH}}
`instantlock_internal`" + t: "bool" + p: "Required
(exactly 1)" + d: "Current InstantSend transaction lock state" + +- n: "{{DEPTH}}
`chainlock`" + t: "bool" + p: "Required
(exactly 1)" + d: "*Added in Dash Core 0.14.0*

If set to `true`, this transaction is in a block that is locked (not susceptible to a chain re-org)" + - n: "{{DEPTH}}
`generated`" t: "bool" p: "Optional
(0 or 1)" @@ -93,10 +108,10 @@ http://opensource.org/licenses/MIT. p: "Required
(exactly 1)" d: "A Unix epoch time when the transaction was detected by the local node, or the time of the block on the local best block chain that included the transaction" -- n: "{{DEPTH}}
`bip125-replaceable`" - t: "string" - p: "Required
(exactly 1)" - d: "*Added in Bitcoin Core 0.12.0*

Indicates if a transaction is replaceable under BIP 125:
• `yes` is replaceable
• `no` not replaceable
• `unknown` for unconfirmed transactions not in the mempool" +- n: "{{DEPTH}}
`abandoned`" + t: "bool" + p: "Optional
(0 or 1)" + d: "`true` if the transaction has been abandoned (inputs are respendable). Only available for the 'send' category of transactions." - n: "{{DEPTH}}
`comment`" t: "string" @@ -131,32 +146,21 @@ dash even if this parameter is set to `1` or higher.{% endcapture %} p: "Required
(exactly 1)" d: "The transaction's TXID encoded as hex in RPC byte order" -{% comment %} -NOT IN DASH -- n: "{{DEPTH}} →
`hash`" - t: "string (hex)" - p: "Required
(exactly 1)" - d: "*Added in Bitcoin Core 0.13.0*

The transaction hash. Differs from txid for witness transactions" -{% endcomment %} - - n: "{{DEPTH}} →
`size`" t: "number (int)" p: "Required
(exactly 1)" d: "*Added in Bitcoin Core 0.12.0*

The serialized transaction size" -{% comment %} -NOT IN DASH -- n: "{{DEPTH}} →
`vsize`" - t: "number (int)" - p: "Required
(exactly 1)" - d: "*Added in Bitcoin Core 0.13.0*

The virtual transaction size. Differs from size for witness transactions" -{% endcomment %} - - n: "{{DEPTH}} →
`version`" t: "number (int)" p: "Required
(exactly 1)" d: "The transaction format version number" +- n: "{{DEPTH}} →
`type`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "*Added in Dash Core 0.13.0.0*

The transaction format type" + - n: "{{DEPTH}} →
`locktime`" t: "number (int)" p: "Required
(exactly 1)" @@ -227,14 +231,6 @@ NOT IN DASH p: "Required
(exactly 1)" d: "The input sequence number" -{% comment %} -NOT IN DASH -- n: "{{DEPTH}} → → →
`txinwitness`" - t: "string : array" - p: "Optional
(0 or 1)" - d: "*Added in Bitcoin Core 0.13.0*

Hex-encoded witness data. Only for segregated witness transactions" -{% endcomment %} - - n: "{{DEPTH}} →
`vout`" t: "array" p: "Required
(exactly 1)" @@ -295,6 +291,15 @@ NOT IN DASH p: "Required
(1 or more)" d: "A P2PKH or P2SH address" +- n: "{{DEPTH}} →
`extraPayloadSize`" + t: "number (int)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0.0*

Size of the DIP2 extra payload. Only present if it's a DIP2 special transaction" + +- n: "{{DEPTH}} →
`extraPayload`" + t: "string (hex)" + p: "Optional
(0 or 1)" + d: "*Added in Dash Core 0.13.0.0*

Hex encoded DIP2 extra payload data. Only present if it's a DIP2 special transaction" {% endcapture %} {% assign INCLUDE_WALLET_UNLOCKED="If the wallet has been encrypted either through the GUI or with the `encryptwallet` RPC, it must first be unlocked with the `walletpassphrase` RPC" %} @@ -319,12 +324,12 @@ NOT IN DASH {% enditemplate %} {% endcapture %} -{% capture INCLUDE_ADD_LOCK_CONFIRMATIONS_PARAMETER %} +{% capture INCLUDE_ADD_LOCKED_PARAMETER %} {% itemplate ntpd1 %} -- n: "addlockconf" +- n: "addlocked" t: "bool" p: "Optional
(0 or 1)" - d: "If set to `true`, add the number of InstantSend confirmations (default=5) to the confirmation count for transactions locked via InstantSend. If set to `false` (the default), the standard confirmation count is not modified for InstantSend transactions." + d: "If set to `true`, add the balance from InstantSend locked transactions. If set to `false` (the default), InstantSend locked transaction balances are not included." {% enditemplate %} {% endcapture %} @@ -364,13 +369,18 @@ NOT IN DASH - n: "→ →
`ObjectType`" t: "number" p: "Required
(exactly 1)" - d: "Object types:
`1` - Unknown
`2` - Proposal
`3` - Trigger
`4` - Watchdog" + d: "Object types:
`1` - Unknown
`2` - Proposal
`3` - Trigger" - n: "→ →
`CreationTime`" t: "number" p: "Required
(exactly 1)" d: "Object creation time as Unix epoch time" +- n: "→ →
`SigningMasternode`" + t: "string (hex)" + p: "Optional
(0 or 1)" + d: "Signing masternode's vin (only present in triggers)" + - n: "→ →
`AbsoluteYesCount`" t: "number" p: "Required
(exactly 1)" @@ -424,6 +434,143 @@ NOT IN DASH {% enditemplate %} {% endcapture %} +{% capture INCLUDE_PROTX %} +- n: "{{DEPTH}}
Provider Transaction" + t: "object/null" + p: "Required
(exactly 1)" + d: "An object containing a provider transaction" + +- n: "{{DEPTH}} →
`proTxHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the provider transaction as hex in RPC byte order" + +- n: "{{DEPTH}} →
`collateralHash`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The hash of the collateral transaction as hex in RPC byte order" + +- n: "{{DEPTH}} →
`collateralIndex`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The collateral index" + +- n: "{{DEPTH}} → →
`collateralAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The collateral address" + +- n: "{{DEPTH}} →
`operatorReward`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The operator reward %" + +- n: "{{DEPTH}} →
`state`" + t: "object/null" + p: "Required
(exactly 1)" + d: "An object containing a provider transaction state" + +- n: "{{DEPTH}} → →
`service`" + t: "string" + p: "Required
(exactly 1)" + d: "The masternode's IP:Port" + +- n: "{{DEPTH}} → →
`registeredHeight`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The height where the masternode was registered" + +- n: "{{DEPTH}} → →
`lastPaidHeight`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The height where the masternode was last paid" + +- n: "{{DEPTH}} → →
`PoSePenalty`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The masternode's proof of service penalty" + +- n: "{{DEPTH}} → →
`PoSeRevivedHeight`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The height where the masternode recovered from a proof of service ban" + +- n: "{{DEPTH}} → →
`PoSeBanHeight`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The height where the masternode was banned for proof of service violations" + +- n: "{{DEPTH}} → →
`revocationReason`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The reason for a ProUpRegTx revocation" + +- n: "{{DEPTH}} → →
`ownerAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The owner address" + +- n: "{{DEPTH}} → →
`votingAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The voting address" + +- n: "{{DEPTH}} → →
`payoutAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The owner's payout address" + +- n: "{{DEPTH}} → →
`pubKeyOperator`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The operator public key" + +- n: "{{DEPTH}} → →
`operatorPayoutAddress`" + t: "string (hex)" + p: "Required
(exactly 1)" + d: "The operator's payout address" + +- n: "{{DEPTH}} →
`confirmations`" + t: "number (int)" + p: "Required
(exactly 1)" + d: "The number of confirmations this ProTx has" + +- n: "{{DEPTH}} →
`wallet`" + t: "object/null" + p: "Required
(exactly 1)" + d: "An object containing a wallet details related to this ProTx" + +- n: "{{DEPTH}} → →
`hasOwnerKey`" + t: "bool" + p: "Required
(exactly 1)" + d: "The owner key is present in this wallet" + +- n: "{{DEPTH}} → →
`hasOperatorKey`" + t: "bool" + p: "Required
(exactly 1)" + d: "The operator key is present in this wallet" + +- n: "{{DEPTH}} → →
`hasVotingKey`" + t: "bool" + p: "Required
(exactly 1)" + d: "The voting key is present in this wallet" + +- n: "{{DEPTH}} → →
`ownsCollateral`" + t: "bool" + p: "Required
(exactly 1)" + d: "The collateral is owned by this wallet" + +- n: "{{DEPTH}} → →
`ownsPayeeScript`" + t: "bool" + p: "Required
(exactly 1)" + d: "The payee script is owned by this wallet" + +- n: "{{DEPTH}} → →
`ownsOperatorRewardScript`" + t: "bool" + p: "Required
(exactly 1)" + d: "The operator reward script is owned by this wallet" +{% endcapture %} + {% assign WARNING="![Warning icon](/img/icons/icon_warning.svg) **Warning:**" %} {% assign WARNING_ICON="![Warning icon](/img/icons/icon_warning.svg)" %} diff --git a/_includes/layout/base/bip-table.html b/_includes/layout/base/bip-table.html index f707c607..f1ad8709 100644 --- a/_includes/layout/base/bip-table.html +++ b/_includes/layout/base/bip-table.html @@ -28,294 +28,294 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: 9 - Version bits with timeout and delay + Version bits with timeout and delay Informational Active 11 Applications - M-of-N Standard Transactions + M-of-N Standard Transactions Standard Active 13 Applications - Address Format for pay-to-script-hash + Address Format for pay-to-script-hash Standard - Modified Active + Modified Active 14 Peer Services - Protocol Version and User Agent + Protocol Version and User Agent Standard Active 16 Consensus (soft fork) - Pay to Script Hash + Pay to Script Hash Standard Active 21 Applications - URI Scheme + URI Scheme Standard - Modified Active + Modified Active 22 API/RPC - getblocktemplate - Fundamentals + getblocktemplate - Fundamentals Standard - Modified Active + Modified Active 23 API/RPC - getblocktemplate - Pooled Mining + getblocktemplate - Pooled Mining Standard Final 30 Consensus (soft fork) - Duplicate transactions + Duplicate transactions Standard Active 31 Peer Services - Pong message + Pong message Standard Active 32 Applications - Hierarchical Deterministic Wallets + Hierarchical Deterministic Wallets Informational - Modified Active + Modified Active 34 Consensus (soft fork) - Block v2, Height in Coinbase + Block v2, Height in Coinbase Standard Active 35 Peer Services - mempool message + mempool message Standard Active 37 Peer Services - Connection Bloom filtering + Connection Bloom filtering Standard Active 38 Applications - Passphrase-protected private key + Passphrase-protected private key Standard Active * 39 Applications - Mnemonic code for generating deterministic keys + Mnemonic code for generating deterministic keys Standard Active * 43 Applications - Purpose Field for Deterministic Wallets + Purpose Field for Deterministic Wallets Informational - Modified Active + Modified Active 44 Applications - Multi-Account Hierarchy for Deterministic Wallets + Multi-Account Hierarchy for Deterministic Wallets Standard Active * 45 Applications - Structure for Deterministic P2SH Multisignature Wallets + Structure for Deterministic P2SH Multisignature Wallets Standard Active * 47 Applications - Reusable Payment Codes for Hierarchical Deterministic Wallets + Reusable Payment Codes for Hierarchical Deterministic Wallets Informational Active * 61 Peer Services - Reject P2P message + Reject P2P message Standard - Extended Active + Extended Active 65 Consensus (soft fork) - OP_CHECKLOCKTIMEVERIFY + OP_CHECKLOCKTIMEVERIFY Standard Active 66 Consensus (soft fork) - Strict DER signatures + Strict DER signatures Standard Active 67 Applications - Deterministic Pay-to-script-hash multi-signature addresses through public key sorting + Deterministic Pay-to-script-hash multi-signature addresses through public key sorting Standard Active * 68 Consensus (soft fork) - Relative lock-time using consensus-enforced sequence numbers + Relative lock-time using consensus-enforced sequence numbers Standard Active 69 Applications - Lexicographical Indexing of Transaction Inputs and Outputs + Lexicographical Indexing of Transaction Inputs and Outputs Informational - Modified Active + Modified Active 70 Applications - Payment Protocol + Payment Protocol Standard - Modified Active + Modified Active 71 Applications - Payment Protocol MIME types + Payment Protocol MIME types Standard - Modified Active + Modified Active 72 Applications - bitcoin: uri extensions for Payment Protocol + bitcoin: uri extensions for Payment Protocol Standard - Modified Active + Modified Active 73 Applications - Use "Accept" header for response type negotiation with Payment Request URLs + Use "Accept" header for response type negotiation with Payment Request URLs Standard Active * 74 Applications - Allow zero value OP_RETURN in Payment Protocol + Allow zero value OP_RETURN in Payment Protocol Standard Active * 75 Applications - Out of Band Address Exchange using Payment Protocol Encryption + Out of Band Address Exchange using Payment Protocol Encryption Standard Active * 83 Applications - Dynamic Hierarchical Deterministic Key Trees + Dynamic Hierarchical Deterministic Key Trees Standard Active * 111 Peer Services - NODE_BLOOM service bit + NODE_BLOOM service bit Standard Active 112 Consensus (soft fork) - CHECKSEQUENCEVERIFY + CHECKSEQUENCEVERIFY Standard Active 113 Consensus (soft fork) - Median time-past as endpoint for lock-time calculations + Median time-past as endpoint for lock-time calculations Standard Active 120 Applications - Proof of Payment + Proof of Payment Standard Active * 122 Applications - URI scheme for Blockchain references / exploration + URI scheme for Blockchain references / exploration Standard Active * 123 - BIP Classification + BIP Classification Process Active 124 Applications - Hierarchical Deterministic Script Templates + Hierarchical Deterministic Script Templates Informational Active * 125 Applications - Opt-in Full Replace-by-Fee Signaling + Opt-in Full Replace-by-Fee Signaling Standard - Modified Partial + Modified Partial 130 Peer Services - sendheaders message + sendheaders message Standard Active diff --git a/_includes/layout/base/dip-table.html b/_includes/layout/base/dip-table.html index faf510bf..cf2faef1 100644 --- a/_includes/layout/base/dip-table.html +++ b/_includes/layout/base/dip-table.html @@ -10,7 +10,7 @@ http://opensource.org/licenses/MIT. .tg {border-collapse:collapse;border-spacing:0;border-color:#ccc;} margin:0px auto;} .tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#fff;} .tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#f0f0f0;} -.tg .tg-jo0b{background-color:#f9f9f9;font-weight:bold;vertical-align:top} +.tg .tg-jo0b{background-color:#f9f9f9;font-weight:bold;text-align:center;vertical-align:top} .tg .tg-9hbo{font-weight:bold;vertical-align:top} .tg .tg-b7b8{background-color:#f9f9f9;vertical-align:top} th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header::selection { background:transparent; }th.tg-sort-header { cursor:pointer; }table th.tg-sort-header:after { content:''; float:right; margin-top:7px; border-width:0 4px 4px; border-style:solid; border-color:#404040 transparent; visibility:hidden; }table th.tg-sort-header:hover:after { visibility:visible; }table th.tg-sort-desc:after,table th.tg-sort-asc:after,table th.tg-sort-asc:hover:after { visibility:visible; opacity:0.4; }table th.tg-sort-desc:after { border-bottom:none; border-width:4px 4px 0; }@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}} @@ -30,6 +30,55 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Standard Active + + 2 + Consensus + Special Transactions + Standard + Active + + + 3 + Consensus + Deterministic Masternode Lists + Standard + Active + + + 4 + Consensus + Simplified Verification of Deterministic Masternode Lists + Standard + Active + + + 5 + Consensus + Blockchain Users + Standard + Proposed + + + 6 + Consensus + Long-Living Masternode Quorums + Standard + Proposed + + + 7 + Consensus + LLMQ Signing Requests / Sessions + Standard + Proposed + + + 8 + Consensus + ChainLocks + Standard + Proposed + diff --git a/_includes/layout/base/html-head.html b/_includes/layout/base/html-head.html index 5df6e027..9ab008bd 100644 --- a/_includes/layout/base/html-head.html +++ b/_includes/layout/base/html-head.html @@ -30,6 +30,7 @@ http://opensource.org/licenses/MIT. } +--> ---> diff --git a/_includes/layout/base/rpc-table.html b/_includes/layout/base/rpc-table.html index fd761ba9..d27f26b9 100644 --- a/_includes/layout/base/rpc-table.html +++ b/_includes/layout/base/rpc-table.html @@ -67,17 +67,23 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Y + + Blockchain + GetBestChainLock + Y + Added in 0.14.1 + Blockchain GetBlock Y - + Updated in 0.14.1 Blockchain GetBlockChainInfo Y - Updated in 0.12.3.0 + Updated in 0.14.1 Blockchain @@ -109,12 +115,24 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Y 0.12.1 + + Blockchain + GetBlockStats + Y + Added in 0.14.1 + Blockchain GetChainTips Y Updated in 0.12.3.0 + + Blockchain + GetChainTxStats + Y + Added in 0.14.1 + Blockchain GetDifficulty @@ -125,31 +143,43 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Blockchain GetMemPoolAncestors Y - 0.12.3.0+ + Updated in 0.14.0 Blockchain GetMemPoolDescendants Y - 0.12.3.0+ + Updated in 0.14.0 Blockchain GetMemPoolEntry Y - 0.12.3.0+ + Updated in 0.14.0 Blockchain GetMemPoolInfo Y - + Updated in 0.14.1.0 + + + Blockchain + GetMerkleBlocks + Y + Add in 0.14.1.0 Blockchain GetRawMemPool Y - Updated in 0.12.3.0 + Updated in 0.14.1 + + + Blockchain + GetSpecialTxes + Y + 0.13.1+ Blockchain @@ -161,7 +191,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Blockchain GetTxOut Y - + Updated in 0.14.1 Blockchain @@ -173,7 +203,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Blockchain GetTxOutSetInfo Y - + Updated in 0.14.1 Blockchain @@ -203,13 +233,13 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Control Debug Y - Updated in 0.12.3.0 + Updated in 0.14.0 Control GetInfo Y - + Updated in 0.14.1 Control @@ -217,17 +247,29 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Y + + Control + Logging + Y + Added in 0.14.1 + Control Stop Y + + Control + Uptime + Y + Added in 0.14.1 + Dash GetGovernanceInfo Y - Updated in 0.12.3.0 + Updated in 0.14.0 Dash @@ -245,31 +287,31 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Dash GObject Y - Updated in 0.12.3.0 + Updated in 0.14.1 Dash Masternode Y - Updated in 0.12.3.0 + Updated in 0.14.0 Dash MasternodeBroadcast Y - + Removed in 0.14.0 Dash MasternodeList Y - Updated in 0.12.3.0 + Updated in 0.14.0 Dash MnSync Y - + Updated in 0.14.0 Dash @@ -281,7 +323,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Dash SentinelPing Y - + Removed in 0.14.0 Dash @@ -295,6 +337,24 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Y + + Evolution + BLS + Y + Updated in 0.14.0 + + + Evolution + ProTx + Y + Updated in 0.14.0 + + + Evolution + Quorum + Y + Added in 0.14.0 + Generating Generate @@ -323,7 +383,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Mining GetBlockTemplate Y - Updated in 0.12.3.0 + Updated in 0.13.0.0 Mining @@ -341,7 +401,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Mining PrioritiseTransaction Y - + Updated in 0.14.0 Mining @@ -365,7 +425,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Network DisconnectNode Y - + Updated in 0.14.1.0 Network @@ -389,13 +449,13 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Network GetNetworkInfo Y - Updated in 0.12.3.0 + Updated in 0.14.0 Network GetPeerInfo Y - + Updated in 0.14.1 Network @@ -421,6 +481,12 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Y + + Rawtransactions + CombineRawTransaction + Y + Added in 0.14.1 + Rawtransactions CreateRawTransaction @@ -431,7 +497,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Rawtransactions DecodeRawTransaction Y - + Updated in 0.13.0.0 Rawtransactions @@ -443,19 +509,19 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Rawtransactions FundRawTransaction Y - Updated in 0.12.3.0 + Updated in 0.14.1 Rawtransactions GetRawTransaction Y - Updated in 0.12.3.0 + Updated in 0.14.1.0 Rawtransactions SendRawTransaction Y - + Updated in 0.14.1 Rawtransactions @@ -491,31 +557,25 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Util EstimatePriority Y - Deprecated in 0.12.3.0 + Removed in 0.14.0 Util EstimateSmartFee Y - + Updated in 0.14.1 Util EstimateSmartPriority Y - Deprecated in 0.12.3.0 + Removed in 0.14.0 Util GetMemoryInfo Y - 0.12.3.0+ - - - Util - SetBIP69Enabled - Y - 0.12.3.0+ + Updated in 0.14.1.0+ Util @@ -535,30 +595,24 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Y + + Wallet + AbortRescan + Y + Added in 0.14.1 + Wallet AddMultiSigAddress Y - - Wallet - AddWitnessAddress - N - N/A - Wallet BackupWallet Y - - Wallet - BumpFee - N - N/A - Wallet DumpHDInfo @@ -575,7 +629,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Wallet DumpWallet Y - + Updated in 0.13.0.0 Wallet @@ -605,7 +659,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Wallet GetBalance Y - + Updated in 0.13.0.0 Wallet @@ -623,19 +677,19 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Wallet GetReceivedByAccount Y - + Updated in 0.13.0.0 Wallet GetReceivedByAddress Y - + Updated in 0.13.0.0 Wallet GetTransaction Y - + Updated in 0.14.0 Wallet @@ -691,12 +745,6 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Y - - Wallet - InstantSendToAddress - Y - - Wallet KeePass @@ -713,7 +761,7 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Wallet ListAccounts Y - + Updated in 0.13.0.0 Wallet @@ -737,31 +785,37 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Wallet ListReceivedByAccount Y - + Updated in 0.13.0.0 Wallet ListReceivedByAddress Y - + Updated in 0.13.0.0 Wallet ListSinceBlock Y - + Updated in 0.14.1 Wallet ListTransactions Y - + Updated in 0.14.0 Wallet ListUnspent Y - Updated in 0.12.3.0 + Updated in 0.14.1 + + + Wallet + ListWallets + Y + Added in 0.14.1 Wallet @@ -785,19 +839,19 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Wallet SendFrom Y - + Updated in 0.13.0.0 Wallet SendMany Y - + Updated in 0.14.1 Wallet SendToAddress Y - + Updated in 0.14.1 Wallet @@ -805,6 +859,18 @@ th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header:: Y + + Wallet + SetPrivateSendAmount + Y + Added in 0.13.0.0 + + + Wallet + SetPrivateSendRounds + Y + Added in 0.13.0.0 + Wallet SetTxFee diff --git a/_includes/references.md b/_includes/references.md index e602cc5f..c9c2edcb 100644 --- a/_includes/references.md +++ b/_includes/references.md @@ -16,6 +16,8 @@ http://opensource.org/licenses/MIT. [msg_block]: /en/developer-reference#term-msg_block "The block header hash data type identifier of an inventory on the P2P network" [msg_filtered_block]: /en/developer-reference#term-msg_block "An alternative to the block header hash data type identifier of an inventory on the P2P network used to request a merkle block" +[msg_clsig]: /en/developer-reference#term-msg_clsig "The ChainLock Signature data type identifier of an inventory on the P2P network" +[msg_islock]: /en/developer-reference#term-msg_islock "The LLMQ-based InstantSend Lock data type identifier of an inventory on the P2P network" [msg_txlock_request]: /en/developer-reference#term-msg_txlock_request "The InstantSend TX Lock request data type identifier of an inventory on the P2P network" [msg_txlock_vote]: /en/developer-reference#term-msg_txlock_vote "The InstantSend TX Lock vote data type identifier of an inventory on the P2P network" [msg_spork]: /en/developer-reference#term-msg_spork "The Spork ID data type identifier of an inventory on the P2P network" @@ -33,7 +35,13 @@ http://opensource.org/licenses/MIT. [msg_governance_object_vote]: /en/developer-reference#term-msg_governance_object_vote "Governance object vote data type identifier of an inventory on the P2P network" [msg_masternode_verify]: /en/developer-reference#term-msg_masternode_verify "Masternode Verify data type identifier of an inventory on the P2P network" [msg_cmpct_block]: /en/developer-reference#term-msg_cmpct_block "An alternative to the block header hash data type identifier of an inventory on the P2P network used to request a compact block" - +[msg_quorum_complaint]: /en/developer-reference#term-msg_quorum_complaint "The Long-Living Masternode Quorum Complaint data type identifier of an inventory on the P2P network" +[msg_quorum_contrib]: /en/developer-reference#term-msg_quorum_contrib "The Long-Living Masternode Quorum Contribution data type identifier of an inventory on the P2P network" +[msg_quorum_debug_status]: /en/developer-reference#term-msg_quorum_debug_status "The Long-Living Masternode Quorum Debug Status data type identifier of an inventory on the P2P network" +[msg_quorum_justification]: /en/developer-reference#term-msg_quorum_justification "The Long-Living Masternode Quorum Justification data type identifier of an inventory on the P2P network" +[msg_quorum_final_commitment]: /en/developer-reference#term-msg_quorum_final_commitment "The Long-Living Masternode Quorum Final Commitment data type identifier of an inventory on the P2P network" +[msg_quorum_premature_commitment]: /en/developer-reference#term-msg_quorum_premature_commitment "The Long-Living Masternode Quorum Premature Commitment data type identifier of an inventory on the P2P network" +[msg_quorum_recovered_sig]: /en/developer-reference#term-msg_quorum_recovered_sig "The Long-Living Masternode Quorum Recovered Signature data type identifier of an inventory on the P2P network" [network]: /en/developer-guide#term-network "The Dash P2P network which broadcasts transactions and blocks" [op_checkmultisig]: /en/developer-reference#term-op-checkmultisig "Opcode which returns true if one or more provided signatures (m) sign the correct parts of a transaction and match one or more provided public keys (n)" [op_checksig]: /en/developer-reference#term-op-checksig "Opcode which returns true if a signature signs the correct parts of a transaction and matches a provided public key" @@ -61,13 +69,14 @@ http://opensource.org/licenses/MIT. {% comment %}{% endcomment %} [rpc abandontransaction]: /en/developer-reference#abandontransaction +[rpc abortrescan]: /en/developer-reference#abortrescan [rpc addmultisigaddress]: /en/developer-reference#addmultisigaddress [rpc addnode]: /en/developer-reference#addnode -[rpc addwitnessaddress]: /en/developer-reference#addwitnessaddress [rpc backupwallet]: /en/developer-reference#backupwallet -[rpc bumpfee]: /en/developer-reference#bumpfee +[rpc bls]: /en/developer-reference#bls [rpc clearbanned]: /en/developer-reference#clearbanned [rpc createmultisig]: /en/developer-reference#createmultisig +[rpc combinerawtransaction]: /en/developer-reference#combinerawtransaction [rpc createrawtransaction]: /en/developer-reference#createrawtransaction [rpc debug]: /en/developer-reference#debug [rpc decoderawtransaction]: /en/developer-reference#decoderawtransaction @@ -95,6 +104,7 @@ http://opensource.org/licenses/MIT. [rpc getaddressutxos]: /en/developer-reference#getaddressutxos [rpc getbalance]: /en/developer-reference#getbalance [rpc getbestblockhash]: /en/developer-reference#getbestblockhash +[rpc getbestchainlock]: /en/developer-reference#getbestchainlock [rpc getblock]: /en/developer-reference#getblock [rpc getblockchaininfo]: /en/developer-reference#getblockchaininfo [rpc getblockcount]: /en/developer-reference#getblockcount @@ -102,8 +112,10 @@ http://opensource.org/licenses/MIT. [rpc getblockhashes]: /en/developer-reference#getblockhashes [rpc getblockheader]: /en/developer-reference#getblockheader [rpc getblockheaders]: /en/developer-reference#getblockheaders +[rpc getblockstats]: /en/developer-reference#getblockstats [rpc getblocktemplate]: /en/developer-reference#getblocktemplate [rpc getchaintips]: /en/developer-reference#getchaintips +[rpc getchaintxstats]: /en/developer-reference#getchaintxstats [rpc getconnectioncount]: /en/developer-reference#getconnectioncount [rpc getdifficulty]: /en/developer-reference#getdifficulty [rpc getgenerate]: /en/developer-reference#getgenerate @@ -115,6 +127,7 @@ http://opensource.org/licenses/MIT. [rpc getmempooldescendants]: /en/developer-reference#getmempooldescendants [rpc getmempoolentry]: /en/developer-reference#getmempoolentry [rpc getmempoolinfo]: /en/developer-reference#getmempoolinfo +[rpc getmerkleblocks]: /en/developer-reference#getmerkleblocks [rpc getmininginfo]: /en/developer-reference#getmininginfo [rpc getnettotals]: /en/developer-reference#getnettotals [rpc getnetworkhashps]: /en/developer-reference#getnetworkhashps @@ -127,6 +140,7 @@ http://opensource.org/licenses/MIT. [rpc getrawtransaction]: /en/developer-reference#getrawtransaction [rpc getreceivedbyaccount]: /en/developer-reference#getreceivedbyaccount [rpc getreceivedbyaddress]: /en/developer-reference#getreceivedbyaddress +[rpc getspecialtxes]: /en/developer-reference#getspecialtxes [rpc getspentinfo]: /en/developer-reference#getspentinfo [rpc getsuperblockbudget]: /en/developer-reference#getsuperblockbudget [rpc gettransaction]: /en/developer-reference#gettransaction @@ -145,7 +159,6 @@ http://opensource.org/licenses/MIT. [rpc importprunedfunds]: /en/developer-reference#importprunedfunds [rpc importpubkey]: /en/developer-reference#importpubkey [rpc importwallet]: /en/developer-reference#importwallet -[rpc instantsendtoaddress]: /en/developer-reference#instantsendtoaddress [rpc keepass]: /en/developer-reference#keepass [rpc keypoolrefill]: /en/developer-reference#keypoolrefill [rpc listaccounts]: /en/developer-reference#listaccounts @@ -158,17 +171,21 @@ http://opensource.org/licenses/MIT. [rpc listsinceblock]: /en/developer-reference#listsinceblock [rpc listtransactions]: /en/developer-reference#listtransactions [rpc listunspent]: /en/developer-reference#listunspent +[rpc listwallets]: /en/developer-reference#listwallets [rpc lockunspent]: /en/developer-reference#lockunspent +[rpc logging]: /en/developer-reference#logging [rpc masternode]: /en/developer-reference#masternode [rpc masternodebroadcast]: /en/developer-reference#masternodebroadcast [rpc masternodelist]: /en/developer-reference#masternodelist [rpc mnsync]: /en/developer-reference#mnsync [rpc move]: /en/developer-reference#move [rpc ping]: /en/developer-reference#ping-rpc +[rpc protx]: /en/developer-reference#protx [rpc preciousblock]: /en/developer-reference#preciousblock [rpc pruneblockchain]: /en/developer-reference#pruneblockchain [rpc prioritisetransaction]: /en/developer-reference#prioritisetransaction [rpc privatesend]: /en/developer-reference#privatesend +[rpc quorum]: /en/developer-reference#quorum [rpc removeprunedfunds]: /en/developer-reference#removeprunedfunds [rpc sendfrom]: /en/developer-reference#sendfrom [rpc sendmany]: /en/developer-reference#sendmany @@ -176,9 +193,10 @@ http://opensource.org/licenses/MIT. [rpc sendtoaddress]: /en/developer-reference#sendtoaddress [rpc setaccount]: /en/developer-reference#setaccount [rpc setban]: /en/developer-reference#setban -[rpc setbip69enabled]: /en/developer-reference#setbip69enabled [rpc setgenerate]: /en/developer-reference#setgenerate [rpc setnetworkactive]: /en/developer-reference#setnetworkactive +[rpc setprivatesendamount]: /en/developer-reference#setprivatesendamount +[rpc setprivatesendrounds]: /en/developer-reference#setprivatesendrounds [rpc settxfee]: /en/developer-reference#settxfee [rpc signmessage]: /en/developer-reference#signmessage [rpc signmessagewithprivkey]: /en/developer-reference#signmessagewithprivkey @@ -187,6 +205,7 @@ http://opensource.org/licenses/MIT. [rpc spork]: /en/developer-reference#spork-rpc [rpc stop]: /en/developer-reference#stop [rpc submitblock]: /en/developer-reference#submitblock +[rpc uptime]: /en/developer-reference#uptime [rpc validateaddress]: /en/developer-reference#validateaddress [rpc verifychain]: /en/developer-reference#verifychain [rpc verifymessage]: /en/developer-reference#verifymessage @@ -212,11 +231,11 @@ http://opensource.org/licenses/MIT. [block message]: /en/developer-reference#block "The P2P network message which sends a serialized block" [blocktxn message]: /en/developer-reference#blocktxn "The P2P network message which sends a list of requested transactions from a compact block" [cmpctblock message]: /en/developer-reference#cmpctblock "The P2P network message which sends a serialized compact block" +[clsig message]: /en/developer-reference#clsig "The P2P network message which sends a ChainLock signature" [dsa message]: /en/developer-reference#dsa "A P2P network message used to join a mixing pool" [dsc message]: /en/developer-reference#dsc "A P2P network message used to indicates a PrivateSend mixing session is complete" [dsf message]: /en/developer-reference#dsf "A P2P network message sent as the final mixing transaction in a session asking users to sign the final mixing TX messages" [dsi message]: /en/developer-reference#dsi "A P2P network message sending a user's inputs, collateral, and outputs for a mixing session" -[dseg message]: /en/developer-reference#dseg "A P2P network message which requests either the entire masternode list or a specific masternode entry" [dss message]: /en/developer-reference#dss "A P2P network message which sends the user’s signed inputs for a group transaction in a mixing session" [dssu message]: /en/developer-reference#dssu "A P2P network message providing a mixing pool status update" [dsq message]: /en/developer-reference#dsq "A P2P network message sent to indicate the queue is ready and the user is expected to send the entry inputs to start mixing" @@ -224,31 +243,43 @@ http://opensource.org/licenses/MIT. {% comment %}{% endcomment %} [filteradd message]: /en/developer-reference#filteradd "A P2P protocol message used to add a data element to an existing bloom filter." [filterclear message]: /en/developer-reference#filterclear "A P2P protocol message used to remove an existing bloom filter." -[filterload message]: /en/developer-reference#filterclear "A P2P protocol message used to send a filter to a remote peer, requesting that they only send transactions which match the filter." +[filterload message]: /en/developer-reference#filterload "A P2P protocol message used to send a filter to a remote peer, requesting that they only send transactions which match the filter." [getaddr message]: /en/developer-reference#getaddr "A P2P protool message used to request an addr message containing connection information for other nodes" [getblocks message]: /en/developer-reference#getblocks "A P2P protocol message used to request an inv message containing a range of block header hashes" [getblocktxn message]: /en/developer-reference#getblocktxn "A P2P protocol message used to request transactions from a compact block" [getdata message]: /en/developer-reference#getdata "A P2P protocol message used to request one or more transactions, blocks, or merkle blocks" [getheaders message]: /en/developer-reference#getheaders "A P2P protocol message used to request a range of block headers" +[getmnlistd message]: /en/developer-reference#getmnlistd "A P2P protool message used to request a simplified masternode list" [getsporks message]: /en/developer-reference#getsporks "A P2P network message used to request the status of sporks" [govobj message]: /en/developer-reference#govobj "A P2P network message used to send governance objects (proposals, etc.)" [govobjvote message]: /en/developer-reference#govobjvote "A P2P network message used to send governance object votes" [govsync message]: /en/developer-reference#govsync "A P2P network message used to synchronize governance objects" [headers message]: /en/developer-reference#headers "A P2P protocol message containing one or more block headers" [inv message]: /en/developer-reference#inv "A P2P protocol message used to send inventories of transactions and blocks known to the transmitting peer" +[islock message]: /en/developer-reference#islock "A P2P protocol message which sends a LLQM-based InstantSend lock" [ix message]: /en/developer-reference#ix "A P2P protocol message which sends a single serialized transaction via InstantSend" [mempool message]: /en/developer-reference#mempool "A P2P protocol message used to request one or more inv messages with currently-unconfirmed transactions" [merkleblock message]: /en/developer-reference#merkleblock "A P2P protocol message used to request a filtered block useful for SPV proofs" -[mnb message]: /en/developer-reference#mnb "A P2P protocol message used to describe the masternode entry and how to validate messages from it" -[mnget message]: /en/developer-reference#mnget "A P2P protocol message that requests masternode payment sync" -[mnp message]: /en/developer-reference#mnp "A P2P protocol message sent by masternodes every few minutes to ping the network with a message that propagates across the whole network" -[mnv message]: /en/developer-reference#mnv "A P2P protocol message used by masternodes to verify other masternode's IP Addresses." -[mnw message]: /en/developer-reference#mnw "A P2P protocol message used to pick the next winning masternode (payee)" +[mnauth message]: /en/developer-reference#mnauth "A P2P protocol message used to authenticate connections between masternodes" +[mnlistdiff message]: /en/developer-reference#mnlistdiff "A P2P protocol message used to send a diff of simplified masternode list entries between two blocks" [notfound message]: /en/developer-reference#notfound "A P2P protocol message sent to indicate that the requested data was not available" [ping message]: /en/developer-reference#ping "A P2P network message used to see if the remote host is still connected" [pong message]: /en/developer-reference#pong "A P2P network message used to reply to a P2P network ping message" +[qbsigs message]: /en/developer-reference#qbsigs "A P2P network message used to to send batched LLMQ signature shares" +[qcomplaint message]: /en/developer-reference#qcomplaint "A P2P network message used to send a complaint about another masternodes DKG contribution" +[qcontrib message]: /en/developer-reference#qcontrib "A P2P network message used to send LLMQ DKG contributions" +[qfcommit message]: /en/developer-reference#qfcommit "A P2P network message used to finalize the members of a long-living masternode quorum (LLMQ)" +[qgetsigs message]: /en/developer-reference#qgetsigs "A P2P network message used to request signature shares" +[qjustify message]: /en/developer-reference#qjustify "A P2P network message used to respond to another masternodes DKG complaint" +[qpcommit message]: /en/developer-reference#qpcommit "A P2P network message used to send an LLMQ premature commitment" +[qsendrecsigs message]: /en/developer-reference#qsendrecsigs "A P2P network message used to request that recovered quorum signatures be provided" +[qsigrec message]: /en/developer-reference#qsigrec "A P2P network message used to send recovered quorum signatures" +[qsigsesann message]: /en/developer-reference#qsigsesann "A P2P network message used to announce signing session details" +[qsigsinv message]: /en/developer-reference#qsigsinv "A P2P network message used to announce quorum signature share inventories" +[qwatch message]: /en/developer-reference#qwatch "A P2P network message used to ask a peer to relay LLMQ DKG messages" [reject message]: /en/developer-reference#reject "A P2P network message used to indicate a previously-received message was rejected for some reason" [sendcmpct message]: /en/developer-reference#sendcmpct "A P2P network message used to request new blocks be announced as compact blocks" +[senddsq message]: /en/developer-reference#senddsq "A P2P network message used to request that DSQ mixing messages be provided" [sendheaders message]: /en/developer-reference#sendheaders "A P2P network message used to request new blocks be announced through headers messages rather than inv messages" [spork message]: /en/developer-reference#spork "A P2P network message used to send the activation status of a spork" [ssc message]: /en/developer-reference#ssc "A P2P network message used to track the sync status of masternode objects ()" @@ -343,6 +374,13 @@ http://opensource.org/licenses/MIT. [secp256k1]: http://www.secg.org/sec2-v2.pdf [DIP1]: https://github.com/dashpay/dips/blob/master/dip-0001.md +[DIP2]: https://github.com/dashpay/dips/blob/master/dip-0002.md +[DIP3]: https://github.com/dashpay/dips/blob/master/dip-0003.md +[DIP4]: https://github.com/dashpay/dips/blob/master/dip-0004.md +[DIP5]: https://github.com/dashpay/dips/blob/master/dip-0005.md +[DIP6]: https://github.com/dashpay/dips/blob/master/dip-0006.md +[DIP7]: https://github.com/dashpay/dips/blob/master/dip-0007.md +[DIP8]: https://github.com/dashpay/dips/blob/master/dip-0008.md {% comment %}{% endcomment %} [#bitcoin]: https://webchat.freenode.net/?channels=bitcoin&uio=d4 @@ -384,7 +422,7 @@ http://opensource.org/licenses/MIT. [bitcoinj micropayment tutorial]: https://bitcoinj.github.io/working-with-micropayments [block170]: https://www.biteasy.com/block/00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee [casascius address utility]: https://github.com/casascius/Bitcoin-Address-Utility -[core alert.cpp]: https://github.com/dashpay/dash/blob/master/src/alert.cpp +[coinbase special tx]: /en/developer-reference#cbtx [core base58.h]: https://github.com/dashpay/dash/blob/master/src/base58.h [core chainparams.cpp]: https://github.com/dashpay/dash/blob/master/src/chainparams.cpp [core git]: https://github.com/dashpay/dash/ @@ -442,8 +480,13 @@ http://opensource.org/licenses/MIT. [Piotr Piasecki's testnet faucet]: https://tpfaucet.appspot.com/ [prime symbol]: https://en.wikipedia.org/wiki/Prime_%28symbol%29 [protobuf]: https://developers.google.com/protocol-buffers/ +[proregtx special tx]: /en/developer-reference#proregtx +[proupregtx special tx]: /en/developer-reference#proupregtx +[prouprevtx special tx]: /en/developer-reference#prouprevtx +[proupservtx special tx]: /en/developer-reference#proupservtx [python-bitcoinlib]: https://github.com/petertodd/python-bitcoinlib [python-blkmaker]: https://gitorious.org/bitcoin/python-blkmaker +[quorum commitment special tx]: /en/developer-reference#qctx [Satoshi Nakamoto]: https://en.bitcoin.it/wiki/Satoshi_Nakamoto [setup tor]: https://www.torproject.org/ [SHA256]: https://en.wikipedia.org/wiki/SHA-2 @@ -453,6 +496,7 @@ http://opensource.org/licenses/MIT. [Testnet Faucet - Dash.org]: https://test.faucet.dash.org/ [Testnet Faucet - Masternode.io]: http://test.faucet.masternode.io/ [Testnet Faucet - Dashninja.pl]: https://test.faucet.dashninja.pl/ +[Testnet Faucet - Crowdnode.io]: http://faucet.test.dash.crowdnode.io/ [Tor]: https://en.wikipedia.org/wiki/Tor_%28anonymity_network%29 [transifex]: https://www.transifex.com/projects/p/bitcoinorg/ [unix epoch time]: https://en.wikipedia.org/wiki/Unix_time @@ -474,7 +518,7 @@ periodically to point to recent code. Last update: 2017-09-05 --> {% endcomment [MAX_SIZE]: https://github.com/dashpay/dash/blob/c31ba8ba4c07e72620bd71753f2103ca103bb1c2/src/serialize.h#L26 [privatesend denominations]: https://github.com/dashpay/dash/blob/753b1e486b2757b1dba59998ee477e7ceff04f2d/src/privatesend.cpp#L149-L171 [rpcprotocol.h]: https://github.com/dashpay/dash/blob/3e0eee4c84f40b3cf277e8d03e004249d03c081d/src/rpcprotocol.h -[spork.h]: https://github.com/dashpay/dash/blob/e1702cd4eca5f276c75cae9de0eb274369b031f6/src/spork.h#L22 +[spork.h]: https://github.com/dashpay/dash/blob/a4f5ba38b65384fb9243ce78c111feceb377e1a9/src/spork.h#L20 [spork pubkey]: https://github.com/dashpay/dash/blob/eaf90b77177efbaf9cbed46e822f0d794f1a0ee5/src/chainparams.cpp#L158 [masternode payments pubkey]: https://github.com/dashpay/dash/blob/eaf90b77177efbaf9cbed46e822f0d794f1a0ee5/src/chainparams.cpp#L159 [block subsidy]: https://github.com/dashpay/dash/blob/9ed9474a9eb007bba70278ce19df68e84aeeb712/src/main.cpp#L1741 diff --git a/_includes/templates/index.html b/_includes/templates/index.html index f8eef414..3b06ed9c 100644 --- a/_includes/templates/index.html +++ b/_includes/templates/index.html @@ -44,6 +44,8 @@ http://opensource.org/licenses/MIT.

Masternode Payment Guide

Masternode Sync Guide

Governance Guide

+

Masternode Quorums Guide

+

Proof of Service Guide

@@ -51,8 +53,8 @@ http://opensource.org/licenses/MIT.

Wallets

Wallets Guide

Wallets Reference

-

HD Wallets - BIP32

-

Mnemonic Code - BIP39

+

HD Wallets - BIP32

+

Mnemonic Code - BIP39

Operating Modes

Operating Modes Guide

@@ -64,27 +66,27 @@ http://opensource.org/licenses/MIT. -

Payment Protocol - BIP70

+

Payment Protocol - BIP70

Additional resources

-

Dash Whitepaper - Official Wiki

+

Dash Whitepaper - Official Wiki

Dash Improvement Proposals - GitHub

-

Dash Documentation - Official Wiki

+

Bitcoin: A Peer-to-Peer Electronic Cash System - Satoshi Nakamoto

-

Bitcoin Improvement Proposals (with Dash updates) - GitHub

+

Bitcoin Improvement Proposals (with Dash updates) - GitHub

RESTful JSON API for Dash - BlockCypher

+

RESTful JSON API for Dash - ChainRider

diff --git a/_templates/bitcoin-paper.html b/_templates/bitcoin-paper.html index b808e11a..de28141a 100644 --- a/_templates/bitcoin-paper.html +++ b/_templates/bitcoin-paper.html @@ -27,17 +27,6 @@ UTF-8 alphabetical order {% endcomment %}

{% translate submit_new_translation %}

diff --git a/andreas_schildbach.asc b/andreas_schildbach.asc deleted file mode 100644 index 726bedc4..00000000 --- a/andreas_schildbach.asc +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.11 (GNU/Linux) - -mQGiBD/S9DARBACgg0IF3cCFaNXbQtCAZBpiZRawQAfsfL87sHhy1xq3UwR4RmQK -sWjtZQ9C7kSDTkzzn7Sqg+YtXgiJdGeYinSMy+6mBKQjtrIKLikbjB1ORTfA29m7 -m7VTBY9X3Cvmpm0+0mWvrQ9hSpq8adXitY4Z+/VB/1YSo77RakfNr3sQOwCgzrXH -37AlAu307IgOOFnI1y78Y4cD/29gtaY3/u8ThFI/mXBOHnfXaIVGLYKtlf2Lyj2J -nixhhzxEpuDJ0lkcyNQ0N7Ky8ohJS3tGShwHjsQNtqK2V1DomsUnDI/W4hJNCSd0 -zfIoQgHvE1RbOyOpz4F+CNw8uQcxwE5FmwRtk6xazJsiMVKLFhKr6LnMoVaNi8mZ -ZFKzA/9HcXAse5epfrZD1tt7dHr58+egIA0OkoQ8oUgqCgN14qmUxQoWTdmvet0E -+XaHcowr1fXu79uQ2zuvHSk/S4mjP6uT+XOxENVcKRUtyEBtSzFDyyCj853KrBQS -ppCgxS8loHj1g1YIKqu97kGVtfmHM9L9TPVA1opuYOcJh7iJ9rQqQW5kcmVhcyBT -Y2hpbGRiYWNoIDxhbmRyZWFzQHNjaGlsZGJhY2guZGU+iF4EExECAB4FAj/S9DAC -GwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQymYr4YuHemD4NACgugPc69lhCXAo -piPN12yG57bun/kAn2qlRVIa46AnK2dRtyOESpLcNX4HiF4EExECAB4FAj/S9DAC -GwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQymYr4YuHemD4NACePnpSANmR2vrZ -Vv+BteOva6gzOJ0Anioa6JoKCYx3jQOIqoBGcBUkc8q1uQINBD/S9DgQCACctel4 -AnL7nuh+Uv+IBz0GMvu6EwdnsVCOLf54neIxuaW4BC5RYAdS6Tkp3hxv+ZfA0Uv6 -X3nz4tOsVHD50+CCq51pRlnbUwcWcn9enynJyddTjei+JmJrdOJOAzWa/al8Yagj -QSZqgD6mmPUy/a201Bh0L2zbLmxQMFg+PPB81j4yUmSXmhYzg/+SonZ3lr9pJNto -Zszg95NDyYBceiF5RSw4Qusi+C5/W3nIKzuaIKZijE9Dvo6DW6ggbB/gSxDTSjvr -nvvXeG1SdlKLeFvsJ9y/0ro3EP01RRVJvA5RaM5W2MRbwGuSRcSw8B746ijEOqSh -0IYLXoHdV7Vj4Qt/AAMFB/9ZcgxVGvs2ob6MCTVdPLlVKRKDn7RjZiDE6hRa/jp7 -ewdstjjc22DU/jCz16IX75B/sr1cDJqbChONFdljjQNWe2cTFXSazUjsyZa35+Kv -ehDi7cAU+vCYmisMpkPM41hR6HYqjadDp6gOVJTnHPcJ6EPdgUQTsNQH3dCTD68b -5WwzBEBNLdwyDGLKMcExzaOClwwSeHBmnj72O7Chdhn/M/2+fpTUPqhp/0sflVyR -/ILyc/KEp85pwani2dXuZ02igSaSIBwQJOVrjsUTwp2Wxdmywt13/cGGVlsGLe8l -Y0Kv6G43/eip+42OfIVhxRgARRtJ5KjKchTLwfl3tbgaiEkEGBECAAkFAj/S9DgC -GwwACgkQymYr4YuHemAWjACgtRlmiISVlCf7/mumklJfLM6wKIMAnA2uS1BS4d7G -JkQp09ViaWmUUsMc -=rnv6 ------END PGP PUBLIC KEY BLOCK----- diff --git a/doxygen/Doxyfile-dashdocs b/doxygen/Doxyfile-dashdocs index d6596471..4174ebd7 100644 --- a/doxygen/Doxyfile-dashdocs +++ b/doxygen/Doxyfile-dashdocs @@ -41,7 +41,7 @@ PROJECT_NAME = "Dash Core" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 0.12.2.3 +PROJECT_NUMBER = 0.14.0.2 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -2324,7 +2324,7 @@ INCLUDED_BY_GRAPH = YES # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. -CALL_GRAPH = YES +CALL_GRAPH = NO # If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller # dependency graph for every global function or class method. @@ -2336,7 +2336,7 @@ CALL_GRAPH = YES # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. -CALLER_GRAPH = YES +CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical # hierarchy of all classes instead of a textual one. diff --git a/en/developer-documentation.md b/en/developer-documentation.md index 99f8bdac..6987e755 100644 --- a/en/developer-documentation.md +++ b/en/developer-documentation.md @@ -101,6 +101,7 @@ end_of_page: |

Bitcoin Improvement Proposals - GitHub

BlockCypher - RESTful JSON API for blockchains

+

ChainRider - RESTful JSON API for blockchains

diff --git a/en/developer-reference.md b/en/developer-reference.md index 98d47096..e96aa590 100644 --- a/en/developer-reference.md +++ b/en/developer-reference.md @@ -72,20 +72,22 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/abandontransaction.md %} +{% include devdoc/dash-core/rpcs/rpcs/abortrescan.md %} + {% include devdoc/dash-core/rpcs/rpcs/addmultisigaddress.md %} {% include devdoc/dash-core/rpcs/rpcs/addnode.md %} -{% include devdoc/dash-core/rpcs/rpcs/addwitnessaddress.md %} - {% include devdoc/dash-core/rpcs/rpcs/backupwallet.md %} -{% include devdoc/dash-core/rpcs/rpcs/bumpfee.md %} +{% include devdoc/dash-core/rpcs/rpcs/bls.md %} {% include devdoc/dash-core/rpcs/rpcs/clearbanned.md %} {% include devdoc/dash-core/rpcs/rpcs/createmultisig.md %} +{% include devdoc/dash-core/rpcs/rpcs/combinerawtransaction.md %} + {% include devdoc/dash-core/rpcs/rpcs/createrawtransaction.md %} {% include devdoc/dash-core/rpcs/rpcs/debug.md %} @@ -140,6 +142,8 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/getbestblockhash.md %} +{% include devdoc/dash-core/rpcs/rpcs/getbestchainlock.md %} + {% include devdoc/dash-core/rpcs/rpcs/getblock.md %} {% include devdoc/dash-core/rpcs/rpcs/getblockchaininfo.md %} @@ -154,10 +158,14 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/getblockheaders.md %} +{% include devdoc/dash-core/rpcs/rpcs/getblockstats.md %} + {% include devdoc/dash-core/rpcs/rpcs/getblocktemplate.md %} {% include devdoc/dash-core/rpcs/rpcs/getchaintips.md %} +{% include devdoc/dash-core/rpcs/rpcs/getchaintxstats.md %} + {% include devdoc/dash-core/rpcs/rpcs/getconnectioncount.md %} {% include devdoc/dash-core/rpcs/rpcs/getdifficulty.md %} @@ -180,6 +188,8 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/getmempoolinfo.md %} +{% include devdoc/dash-core/rpcs/rpcs/getmerkleblocks.md %} + {% include devdoc/dash-core/rpcs/rpcs/getmininginfo.md %} {% include devdoc/dash-core/rpcs/rpcs/getnettotals.md %} @@ -204,6 +214,8 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/getreceivedbyaddress.md %} +{% include devdoc/dash-core/rpcs/rpcs/getspecialtxes.md %} + {% include devdoc/dash-core/rpcs/rpcs/getspentinfo.md %} {% include devdoc/dash-core/rpcs/rpcs/getsuperblockbudget.md %} @@ -240,8 +252,6 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/importwallet.md %} -{% include devdoc/dash-core/rpcs/rpcs/instantsendtoaddress.md %} - {% include devdoc/dash-core/rpcs/rpcs/keepass.md %} {% include devdoc/dash-core/rpcs/rpcs/keypoolrefill.md %} @@ -266,8 +276,12 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/listunspent.md %} +{% include devdoc/dash-core/rpcs/rpcs/listwallets.md %} + {% include devdoc/dash-core/rpcs/rpcs/lockunspent.md %} +{% include devdoc/dash-core/rpcs/rpcs/logging.md %} + {% include devdoc/dash-core/rpcs/rpcs/masternode.md %} {% include devdoc/dash-core/rpcs/rpcs/masternodebroadcast.md %} @@ -280,6 +294,8 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/ping.md %} +{% include devdoc/dash-core/rpcs/rpcs/protx.md %} + {% include devdoc/dash-core/rpcs/rpcs/preciousblock.md %} {% include devdoc/dash-core/rpcs/rpcs/privatesend.md %} @@ -288,6 +304,8 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/pruneblockchain.md %} +{% include devdoc/dash-core/rpcs/rpcs/quorum.md %} + {% include devdoc/dash-core/rpcs/rpcs/removeprunedfunds.md %} {% include devdoc/dash-core/rpcs/rpcs/sendfrom.md %} @@ -302,12 +320,14 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/setban.md %} -{% include devdoc/dash-core/rpcs/rpcs/setbip69enabled.md %} - {% include devdoc/dash-core/rpcs/rpcs/setgenerate.md %} {% include devdoc/dash-core/rpcs/rpcs/setnetworkactive.md %} +{% include devdoc/dash-core/rpcs/rpcs/setprivatesendamount.md %} + +{% include devdoc/dash-core/rpcs/rpcs/setprivatesendrounds.md %} + {% include devdoc/dash-core/rpcs/rpcs/settxfee.md %} {% include devdoc/dash-core/rpcs/rpcs/signmessage.md %} @@ -324,6 +344,8 @@ untrusted source. {% include devdoc/dash-core/rpcs/rpcs/submitblock.md %} +{% include devdoc/dash-core/rpcs/rpcs/uptime.md %} + {% include devdoc/dash-core/rpcs/rpcs/validateaddress.md %} {% include devdoc/dash-core/rpcs/rpcs/verifychain.md %} diff --git a/files/bitcoin-paper/bitcoin_es.pdf b/files/bitcoin-paper/bitcoin_es.pdf deleted file mode 100644 index 3b31cd04..00000000 Binary files a/files/bitcoin-paper/bitcoin_es.pdf and /dev/null differ diff --git a/files/bitcoin-paper/bitcoin_es_latam.pdf b/files/bitcoin-paper/bitcoin_es_latam.pdf deleted file mode 100644 index 9bd0d60f..00000000 Binary files a/files/bitcoin-paper/bitcoin_es_latam.pdf and /dev/null differ diff --git a/files/bitcoin-paper/bitcoin_it.pdf b/files/bitcoin-paper/bitcoin_it.pdf deleted file mode 100644 index 42c88bd4..00000000 Binary files a/files/bitcoin-paper/bitcoin_it.pdf and /dev/null differ diff --git a/files/bitcoin-paper/bitcoin_ru.pdf b/files/bitcoin-paper/bitcoin_ru.pdf deleted file mode 100644 index 73948c43..00000000 Binary files a/files/bitcoin-paper/bitcoin_ru.pdf and /dev/null differ diff --git a/files/bitcoin-paper/bitcoin_se.pdf b/files/bitcoin-paper/bitcoin_se.pdf deleted file mode 100644 index 31857be9..00000000 Binary files a/files/bitcoin-paper/bitcoin_se.pdf and /dev/null differ diff --git a/gavinandresen.asc b/gavinandresen.asc deleted file mode 100644 index 6b9f2d7b..00000000 --- a/gavinandresen.asc +++ /dev/null @@ -1,313 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG/MacGPG2 v2.0.20 (Darwin) - -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 -=hXFd ------END PGP PUBLIC KEY BLOCK----- diff --git a/gmaxwell.asc b/gmaxwell.asc deleted file mode 100644 index 906d5a6a..00000000 --- a/gmaxwell.asc +++ /dev/null @@ -1,605 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.13 (GNU/Linux) - -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 -SACYmLxqT70DZHIzvP7E4ELZiTsXYQ== -=62SY ------END PGP PUBLIC KEY BLOCK----- diff --git a/img/dev/en-masternode-sync-initial-dip3.png b/img/dev/en-masternode-sync-initial-dip3.png new file mode 100644 index 00000000..5a6f2bec Binary files /dev/null and b/img/dev/en-masternode-sync-initial-dip3.png differ diff --git a/img/dev/en-masternode-sync-initial-dip3.svg b/img/dev/en-masternode-sync-initial-dip3.svg new file mode 100644 index 00000000..c3bbb5a0 --- /dev/null +++ b/img/dev/en-masternode-sync-initial-dip3.svg @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sporks(getsporks) + + + + + + + + + + Governance Objects(govsync) + + + + + + + + + + + + + + + + + Governance Votes(govsync) + + + + + + + + + + + + + + Masternode Synchronization (Initial) + + + + + + + + \ No newline at end of file diff --git a/img/dev/en-masternode-sync-ongoing.png b/img/dev/en-masternode-sync-ongoing.png index 9a24933d..948e64a0 100644 Binary files a/img/dev/en-masternode-sync-ongoing.png and b/img/dev/en-masternode-sync-ongoing.png differ diff --git a/img/dev/en-masternode-sync-ongoing.svg b/img/dev/en-masternode-sync-ongoing.svg index 0d47c1b0..72e912e9 100644 --- a/img/dev/en-masternode-sync-ongoing.svg +++ b/img/dev/en-masternode-sync-ongoing.svg @@ -1,9 +1,9 @@ - + - + @@ -43,6 +43,7 @@ + @@ -53,7 +54,7 @@ - + @@ -324,20 +325,20 @@ - - - - MasternodePayments + + + + MasternodePayments - - - - MasternodeList + + + + MasternodeList @@ -353,251 +354,251 @@ - PaymentVotes + PaymentVotes - - - - - - - - - - - - - - - - - mnw + + + + + + + + + + + + + + + + + mnw - PaymentVotes + PaymentVotes - - - mnw + + + mnw - BroadcastsfromStarting MNs + BroadcastsfromStarting MNs - Recurring Ping(15 min) + Recurring Ping(15 min) - - - mnb + + + mnb - Relayed MNBroadcasts + Relayed MNBroadcasts - Relayed MNPings + Relayed MNPings - Relayed MNVerifications + Relayed MNVerifications - MN ListRequests + MN ListRequests - - - - dseg + + + + dseg - - - - - - - - - - - - - - - - - - - - - - - - - mnb + + + + + + + + + + + + + + + + + + + + + + + + + mnb - - - - - - - - - - - - - - mnp + + + + + + + + + + + + + + mnp - - - - - - - - - - - - - - - - - - - - - - - - mnp + + + + + + + + + + + + + + + + + + + + + + + + mnp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - mnv + + + + + + + + + + + + + + + + + + + + + + + + + + + + + mnv - MN Pings + MN Pings - - - mnp + + + mnp - PaymentSync Request + PaymentSync Request - VerificationRequests + VerificationRequests - - - - mnv + + + + mnv - - - mnget + + + mnget @@ -757,6 +758,20 @@ + + + + + Deprecated by Deterministic Masternode Lists + + + + + + + + + diff --git a/img/dev/en-masternode-sync.odg b/img/dev/en-masternode-sync.odg index a3c285f0..9e65c5e9 100644 Binary files a/img/dev/en-masternode-sync.odg and b/img/dev/en-masternode-sync.odg differ diff --git a/img/dev/en-p2p-data-messages.dot b/img/dev/en-p2p-data-messages.dot index 2e47a418..72e090ac 100644 --- a/img/dev/en-p2p-data-messages.dot +++ b/img/dev/en-p2p-data-messages.dot @@ -10,6 +10,7 @@ edge [ penwidth = 1.75, fontname="Sans", dir="none" ] node [ penwidth = 1.75, shape = "box", fontname="Sans", ] graph [ penwidth = 1.75, fontname="Sans" ] +getmnlistd -> mnlistdiff [ minlen = 3 ]; getblocktxn -> blocktxn [ minlen = 3 ]; getblocks -> inv; diff --git a/img/dev/en-p2p-data-messages.png b/img/dev/en-p2p-data-messages.png index 39ada934..9b511c8d 100644 Binary files a/img/dev/en-p2p-data-messages.png and b/img/dev/en-p2p-data-messages.png differ diff --git a/img/dev/en-p2p-data-messages.svg b/img/dev/en-p2p-data-messages.svg index 73699941..38ba1556 100644 --- a/img/dev/en-p2p-data-messages.svg +++ b/img/dev/en-p2p-data-messages.svg @@ -4,128 +4,142 @@ - - + + %3 - + Overview Of P2P Protocol Data Request And Reply Messages + +getmnlistd + +getmnlistd + + +mnlistdiff + +mnlistdiff + + +getmnlistd->mnlistdiff + + -getblocktxn - -getblocktxn +getblocktxn + +getblocktxn -blocktxn - -blocktxn +blocktxn + +blocktxn -getblocktxn->blocktxn - +getblocktxn->blocktxn + -getblocks - -getblocks +getblocks + +getblocks -inv - -inv +inv + +inv -getblocks->inv - +getblocks->inv + -getdata - -getdata +getdata + +getdata -inv->getdata - +inv->getdata + -mempool - -mempool +mempool + +mempool -mempool->inv - +mempool->inv + -tx - -tx +tx + +tx -getdata->tx - +getdata->tx + -block - -block +block + +block -getdata->block - +getdata->block + -merkleblock - -merkleblock +merkleblock + +merkleblock -getdata->merkleblock - +getdata->merkleblock + -notfound - -notfound +notfound + +notfound -getdata->notfound - +getdata->notfound + -getheaders - -getheaders +getheaders + +getheaders -headers - -headers +headers + +headers -getheaders->headers - +getheaders->headers + -label1 -Request For Help -Getting Up To Date +label1 +Request For Help +Getting Up To Date -label2 -Reply With -Inventory +label2 +Reply With +Inventory -label3 -Request For Specific Data +label3 +Request For Specific Data -label4 -Reply With -Requested Data +label4 +Reply With +Requested Data diff --git a/jgarzik-pobox.asc b/jgarzik-pobox.asc deleted file mode 100644 index 7e3a0a8d..00000000 --- a/jgarzik-pobox.asc +++ /dev/null @@ -1,137 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1 - -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 -0wiVlUrBocZh0Q== -=sGRP ------END PGP PUBLIC KEY BLOCK----- diff --git a/jonasschnelli.asc b/jonasschnelli.asc deleted file mode 100644 index e7048ec4..00000000 --- a/jonasschnelli.asc +++ /dev/null @@ -1,63 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1 - -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 -=xtTA ------END PGP PUBLIC KEY BLOCK----- diff --git a/js/analytics.js b/js/analytics.js index d2708ffd..b134c01d 100644 --- a/js/analytics.js +++ b/js/analytics.js @@ -4,7 +4,8 @@ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - ga('create', 'UA-46627233-1', 'auto'); + ga('create', 'UA-118991016-3', 'auto'); + ga('set', 'anonymizeIp', true); ga('send', 'pageview'); /* jshint ignore:end */ diff --git a/laanwj-releases.asc b/laanwj-releases.asc deleted file mode 100644 index 69fc13e8..00000000 --- a/laanwj-releases.asc +++ /dev/null @@ -1,280 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1 - -mQINBFWKlBcBEACgZJd/6LrSgNSVxiyq5N9h0E7zgSHG/ahuWAnWeFtxaxHeukH+ -Q2Zq6F8FLbq40PphyroRylMBpzPBcyxjee7mDj1DpJ9ayv6GGPTyQzOImhChEV8p -bA42dvXnB5ju0rPh2GxctbiZZD1kiPH4jlmDIgomvupAj9OFntA5jfkuSFBekZrw -QyZowz/paMBIe24YH2LyaZjC2DqLy8Znh78OfAZxZsWSdZxK5LsbkCE9l8Li3gQa -rxm4aEMBHhvns+s8Ufa47sdJAYAfVnAWb5Dfe4oVFh70PvB8GSGFS9qeib0eEQBD -71c9MN+REDTSOYO2VnUSFbu7IrKsPsClqwfT9KzI/uz5fpHSKdCp5AO7oDZiU36s -LsSOBbukTmFQfVrAniFEZxHLCBufXCsAwp07xtUH9ytbW0Y/eHYlZojoWJJPT//1 -cQ/A2Ix/nxbSkSPq8wpCUhBxvTQoU9BXeQIbSy0yUmj5nS+3DR7IK2Q7ACyVClr7 -LVQOGxgZhHr9Kq87RDqc1wlvbCxb+KTJQhJySpOVoiaME6jLBzgE7G+5N6IXTK5u -OriOsQwcLdeBu7TPgft79uBYnmYeaNVdovlBB//7H7UvY0kAxAg4NPgK6eYRdzn+ -8ZtbntNXi/23RJvzeZJVBqQ7bYt4fjmHmRYrbM4jWKJEoJOE6wzpmELUowARAQAB -tFVXbGFkaW1pciBKLiB2YW4gZGVyIExhYW4gKEJpdGNvaW4gQ29yZSBiaW5hcnkg -cmVsZWFzZSBzaWduaW5nIGtleSkgPGxhYW53akBnbWFpbC5jb20+iQI+BBMBAgAo -BQJVipQXAhsDBQkDFwQABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCQyAGe -NsLpZOBRD/wLfujEC4ZYMFwPXnhvOGEWAPeuOg06iXhEqJ1biOvxhFfwwjPoXGMQ -i/pdfGck5xZVFcxObpdHBp0p9ardos1aRXAS8JTnTQXTX0qs0QNxnLTBz+5DrIc4 -l7r5DAlr/FapUKNSbjobOrbv+F371b7XhLJ7oob5XXo+IS7kEY+Si5BXb0uVy8ms -SaKDooO2RfByrFI3LTHW3VESuuNnXgH6309yeGORgBazKtnxZPPlD2raTNXe9q7U -dF2Xv6Rr53iCGGN5xncL5A6nF3fou0tGvqLFBkrs4BqeNNwC6/jQLfpOfqiQ+XGR -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 -oUudunjw+G1VG08DA3DMoougS9pC7x9k -=BFsn ------END PGP PUBLIC KEY BLOCK----- diff --git a/laanwj.asc b/laanwj.asc deleted file mode 100644 index d2136338..00000000 --- a/laanwj.asc +++ /dev/null @@ -1,374 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v2 - -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 -Ycgx5WE9zYmMhcwaEHRDfOG0YX8fcXVvRw== -=Rajc ------END PGP PUBLIC KEY BLOCK----- diff --git a/luke-jr.asc b/luke-jr.asc deleted file mode 100644 index 31af1652..00000000 --- a/luke-jr.asc +++ /dev/null @@ -1,1285 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -A/qwAd4tSpIihw== -=LA9P ------END PGP PUBLIC KEY BLOCK----- diff --git a/pieterwuille.asc b/pieterwuille.asc deleted file mode 100644 index fad8c576..00000000 --- a/pieterwuille.asc +++ /dev/null @@ -1,3120 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1 - -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 -2P/gABBKRklGAAEBAQBIAEgAAP/hABZFeGlmAABNTQAqAAAACAAAAAAAAP/bAEMA -CQYHCAcGCQgICAoKCQsOFw8ODQ0OHBQVERciHiMjIR4gICUqNS0lJzIoICAuPy8y -Nzk8PDwkLUJGQTpGNTs8Of/bAEMBCgoKDgwOGw8PGzkmICY5OTk5OTk5OTk5OTk5 -OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Of/CABEIAREA8AMB -IgACEQEDEQH/xAAbAAEAAgMBAQAAAAAAAAAAAAAABAUCAwYBB//EABgBAQEBAQEA -AAAAAAAAAAAAAAABAgME/9oADAMBAAIQAxAAAAHuAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAa8IsSLVVi0VYtFULVU+Fx5UC39p8i2VQtVWLRVi0yqZRYCgAAK2LKiwE -vvmNdZYxuWr16quovC72c7kdVP4r2PoG3kOmSW89oBKiyiwFAAAVsSXEhj7Rjl8d -ajYeNm+WJlY7pqrWusrJG7RZ2FhwXZsy2HqZSosqrAUAABWw5cSNPDdNyS4eNhlO -2S8ddMnZtnTDZllLrx3eRpi2GNzzd5XaN8e126ZFwlxJdWAoAACshy4UcxQWVUuV -jCtJqTI1beffdnhku1iMvcMz3HLFmlrbWo3x7Sxqba49lRpNWAoAACsp7emjjYkq -MuVrU22dTs4eOetpsrZTUr3Dxd2NdBubzOk3TO2i6Tnbjoug5TrNZzkRpVzYCgAA -KuqtauOPr7msz08sa+ySNK80tbccdqzZdPNz0w0sbjdv07j2puI6bOkp7U3yYkvf -GxFAAAVlTawI5rTKz5+mgsfdt56kn2dNeMnBa+zg2Bq27c5dO3PNcPMtbnlZQrLW -M5cWVvlYigAAKuDOgRW195S53Gx91TU2RD3Z7SYuOixaVEomoeCWOdVJllai89tz -Cm75ZSosqyxFAAAVNfPgxplY+nPQLaomt2WG/HWNrl6bcJGyQRfJeuXTsz9kzlxp -NxZ+69vTl7LiSyxFAAAVMKbCj3z3wqqHquZl2exNmemyRXbiTljm6e7MMJMZlbMu -N9josrjDfGk6z7LiSiyFAAAVMHZzkX/PU2utMrdszvKHZas6gbWrWLGTS5zVtohS -Ty0x351TTNEHWO0l/P7rWOml8/elqKAAA+e8v9ainy+d9C9XjI/0LDHTisu29j5/ -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 -cc/uOP3HK3sb883kb3L5vIkiZcNTj95z+85/eNkokc1vt9v6b//aAAwDAQACAAMA -AAAQ88888888888888888888888888888888Xxx91ZtNBBS8888p2V0IMC3JBB88 -88xpkomSu4+HB8888dYNP4p+Imjp88885chWFPcxp7B8888RUvHfpELv4588885f -TnyWvV5AV8888dWL2DViD1vU8888BHHeV+ZFNa08888RBt6EV6DK5o8888pBueXE -X1utk8888zNplzLFh7X+8888ykE3m+Xp5eS88888888888888888888888888888 -888888888888888888//xAAgEQEBAQACAgMBAQEAAAAAAAABABEhMTBBECBRUEBh -/9oACAEDAQE/EP4GWWWWWWWf6xMOXLLPAQbH7gkEkOIZ4RzD5Sbgz4O9kkdW2XFv -8+GIf374i6XDuS6I0cSrzDXc8BYJ9wFYhy1nhZCRdQuxb4ffqPUh0QBJSxsjAeJJ -ySV18H4h4xsvVo9Q/ZkodS48PaJ67fRlBzaMy+AFcLDlveXJDCXM+Zt3wLWyPmP+ -F+J8Sc/pf//EAB4RAAMAAwEAAwEAAAAAAAAAAAABERAgITEwQVBh/9oACAECAQE/ -EPwKUpSlKUpS6v4lq9LhIkeVq8stspieFqxHgevjdixTHGEGmKdc2ZTBVjTGhJfY -yQnBq2LVnobLgxcIT7FqxKTnT7EmNYNNIW+iU2eT9omUo+o94W7XCYF/RqiEFhaw -89K8wcYxEigmEJt0oJkWXpEmpS/of//EACoQAQACAQIFBQEBAAIDAAAAAAEAESEx -QVFhcaGxEDCB0fCRIGDBcOHx/9oACAEBAAE/EP8AnhW4F1Zx8T9/qn6/VP1+qfr9 -U/H6p+v1T8fqn7/VPx+qfj9U/H6p+P1T8fqn4/VPx+qfj9U/H6p+P1T8fqn4/VE9 -QLqxj59ntfl/0SpBatwS1X5lJnWBu7x0bLju1+lw/wA9+8ns9h8v+Wa6l7c5m3za -GBZ0w4JitLw5+Iq0/RKhBHEGGUfTXIlhDsuPMEGoecwMtsNP89+8ns9h8v8Ag+1N -Ubo3fiWFeJvEaG3XMtco6axy6xqC+UzBWFGyAuWlz0QYpdVgfEP89+8ns9p8vpcF -lweYMq8qv+3CMmReXSJndDjXFpTfEG2zdRW0oGMbxYA3lqMuKxMQlhBn1GXLPXv3 -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 -GwVt01Q61tJa56NIvw== -=vGyO ------END PGP PUBLIC KEY BLOCK----- diff --git a/satoshinakamoto.asc b/satoshinakamoto.asc deleted file mode 100644 index 4a53ade1..00000000 --- a/satoshinakamoto.asc +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.7 (MingW32) - -mQGiBEkJ+qcRBADKDTcZlYDRtP1Q7/ShuzBJzUh9hoVVowogf2W07U6G9BqKW24r -piOxYmErjMFfvNtozNk+33cd/sq3gi05O1IMmZzg2rbF4ne5t3iplXnNuzNh+j+6 -VxxA16GPhBRprvnng8r9GYALLUpo9Xk17KE429YYKFgVvtTPtEGUlpO1EwCg7FmW -dBbRp4mn5GfxQNT1hzp9WgkD/3pZ0cB5m4enzfylOHXmRfJKBMF02ZDnsY1GqeHv -/LjkhCusTp2qz4thLycYOFKGmAddpVnMsE/TYZLgpsxjrJsrEPNSdoXk3IgEStow -mXjTfr9xNOrB20Qk0ZOO1mipOWMgse4PmIu02X24OapWtyhdHsX3oBLcwDdke8aE -gAh8A/sHlK7fL1Bi8rFzx6hb+2yIlD/fazMBVZUe0r2uo7ldqEz5+GeEiBFignd5 -HHhqjJw8rUJkfeZBoTKYlDKo7XDrTRxfyzNuZZPxBLTj+keY8WgYhQ5MWsSC2MX7 -FZHaJddYa0pzUmFZmQh0ydulVUQnLKzRSunsjGOnmxiWBZwb6bQjU2F0b3NoaSBO -YWthbW90byA8c2F0b3NoaW5AZ214LmNvbT6IYAQTEQIAIAUCSQn6pwIbAwYLCQgH -AwIEFQIIAwQWAgMBAh4BAheAAAoJEBjAnoZeyUihXGMAnjiWJ0fvmSgSM3o6Tu3q -RME9GN7QAKCGrFw9SUD0e9/YDcqhX1aPMrYue7kCDQRJCfqnEAgA9OTCjLa6Sj7t -dZcQxNufsDSCSB+yznIGzFGXXpJk7GgKmX3H9Zl4E6zJTQGXL2GAV4klkSfNtvgs -SGJKqCnebuZVwutyq1vXRNVFPQFvLVVo2jJCBHWjb03fmXmavIUtRCHoc8xgVJMQ -LrwvS943GgsqSbdoKZWdTnfnEq+UaGo+Qfv66NpT3Yl0CXUiNBITZOJcJdjHDTBO -XRqomX2WSguv+btYdhQGGQiaEx73XMftXNCxbOpqwsODQns7xTcl2ENru9BNIQME -I7L9FYBQUiKHm1k6RrBy1as8XElS2jEos7GAmlfF1wShFUX+NF1VOPdbN3ZdFoWq -sUjKk+QbrwADBQgA9DiD4+uuRhwk2B1TmtrXnwwhcdkE7ZbLHjxBfCsLPAZiPh8c -ICfV3S418i4H1YCz2ItcnC8KAPoS6mipyS28AU1B7zJYPODBn8E7aPSPzHJfudMK -MqiCHljVJrE23xsKTC0sIhhSKcr2G+6ARoG5lwuoqJqEyDrblVQQFpVxBNPHSTqu -O5PoLXQc7PKgC5SyQuZbEALEkItl2SL2yBRRGOlVJLnvZ6eaovkAlgsbGdlieOr0 -UwWuJCwzZuBDruMYAfyQBvYfXZun3Zm84rW7Jclp18mXITwGCVHg/P5n7QMbBfZQ -A25ymkuj636Nqh+c4zRnSINfyrDcID7AcqEb6IhJBBgRAgAJBQJJCfqnAhsMAAoJ -EBjAnoZeyUihPrcAniVWl5M44RuGctJe+IMNX4eVkC08AJ9v7cXsp5uDdQNo8q3R -8RHwN4Gk8w== -=3FTe ------END PGP PUBLIC KEY BLOCK----- diff --git a/schneider.asc b/schneider.asc deleted file mode 100644 index 49b1110a..00000000 --- a/schneider.asc +++ /dev/null @@ -1,38 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.11 (GNU/Linux) - -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 -VpBkRjcrHDVumGys689t7nMo -=po+D ------END PGP PUBLIC KEY BLOCK----- diff --git a/scripts/applyreferences.sh b/scripts/applyreferences.sh new file mode 100755 index 00000000..552e4a09 --- /dev/null +++ b/scripts/applyreferences.sh @@ -0,0 +1,185 @@ +#!/usr/bin/env bash + +# first pattern changes [aaaa][] to [aaaa][aaaa] + +perl -pe "s/\[([^\]]+)\]\[\]/[\1][\1]/g;" \ +-pe "s~\]\[data-pushing opcode\]~](https://en.bitcoin.it/wiki/Script#Constants)~g;" \ +-pe "s~\]\[bitcoinpdf\]~](https://bitcoin.org/en/bitcoin-paper)~g;" \ +-pe "s~\]\[choose your wallet\]~](https://www.dash.org/wallets/)~g;" \ +-pe "s~\]\[communities\]~](https://www.dash.org/community/)~g;" \ +-pe "s~\]\[core executable\]~](https://www.dash.org/wallets/#wallets)~g;" \ +-pe "s~\]\[dev communities\]~](https://www.dash.org/community/)~g;" \ +-pe "s~\]\[BIP9\]~](https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki)~g;" \ +-pe "s~\]\[BIP9 assignments\]~](https://github.com/bitcoin/bips/blob/master/bip-0009/assignments.mediawiki)~g;" \ +-pe "s~\]\[BIP14\]~](https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki)~g;" \ +-pe "s~\]\[BIP16\]~](https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki)~g;" \ +-pe "s~\]\[BIP21\]~](https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki)~g;" \ +-pe "s~\]\[BIP22\]~](https://github.com/bitcoin/bips/blob/master/bip-0022.mediawiki)~g;" \ +-pe "s~\]\[BIP23\]~](https://github.com/bitcoin/bips/blob/master/bip-0023.mediawiki)~g;" \ +-pe "s~\]\[BIP30\]~](https://github.com/bitcoin/bips/blob/master/bip-0030.mediawiki)~g;" \ +-pe "s~\]\[BIP31\]~](https://github.com/bitcoin/bips/blob/master/bip-0031.mediawiki)~g;" \ +-pe "s~\]\[BIP32\]~](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)~g;" \ +-pe "s~\]\[BIP34\]~](https://github.com/bitcoin/bips/blob/master/bip-0034.mediawiki)~g;" \ +-pe "s~\]\[BIP35\]~](https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki)~g;" \ +-pe "s~\]\[BIP37\]~](https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki)~g;" \ +-pe "s~\]\[BIP39\]~](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki)~g;" \ +-pe "s~\]\[BIP50\]~](https://github.com/bitcoin/bips/blob/master/bip-0050.mediawiki)~g;" \ +-pe "s~\]\[BIP61\]~](https://github.com/bitcoin/bips/blob/master/bip-0061.mediawiki)~g;" \ +-pe "s~\]\[BIP62\]~](https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki)~g;" \ +-pe "s~\]\[BIP65\]~](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki)~g;" \ +-pe "s~\]\[BIP66\]~](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki)~g;" \ +-pe "s~\]\[BIP68\]~](https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki)~g;" \ +-pe "s~\]\[BIP70\]~](https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki)~g;" \ +-pe "s~\]\[BIP71\]~](https://github.com/bitcoin/bips/blob/master/bip-0071.mediawiki)~g;" \ +-pe "s~\]\[BIP72\]~](https://github.com/bitcoin/bips/blob/master/bip-0072.mediawiki)~g;" \ +-pe "s~\]\[BIP90\]~](https://github.com/bitcoin/bips/blob/master/bip-0090.mediawiki)~g;" \ +-pe "s~\]\[BIP111\]~](https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki)~g;" \ +-pe "s~\]\[BIP112\]~](https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki)~g;" \ +-pe "s~\]\[BIP113\]~](https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki)~g;" \ +-pe "s~\]\[BIP125\]~](https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki)~g;" \ +-pe "s~\]\[BIP130\]~](https://github.com/bitcoin/bips/blob/master/bip-0130.mediawiki)~g;" \ +-pe "s~\]\[BIP133\]~](https://github.com/bitcoin/bips/blob/master/bip-0133.mediawiki)~g;" \ +-pe "s~\]\[BIP141\]~](https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki)~g;" \ +-pe "s~\]\[BIP147\]~](https://github.com/bitcoin/bips/blob/master/bip-0147.mediawiki)~g;" \ +-pe "s~\]\[BIP151\]~](https://github.com/bitcoin/bips/blob/master/bip-0151.mediawiki)~g;" \ +-pe "s~\]\[BIP152\]~](https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki)~g;" \ +-pe "s~\]\[CVE-2012-2459\]~](https://en.bitcoin.it/wiki/CVEs#CVE-2012-2459)~g;" \ +-pe "s~\]\[RFC5737\]~](http://tools.ietf.org/html/rfc5737)~g;" \ +-pe "s~\]\[secp256k1\]~](http://www.secg.org/sec2-v2.pdf)~g;" \ +-pe "s~\]\[DIP1\]~](https://github.com/dashpay/dips/blob/master/dip-0001.md)~g;" \ +-pe "s~\]\[DIP2\]~](https://github.com/dashpay/dips/blob/master/dip-0002.md)~g;" \ +-pe "s~\]\[DIP3\]~](https://github.com/dashpay/dips/blob/master/dip-0003.md)~g;" \ +-pe "s~\]\[DIP4\]~](https://github.com/dashpay/dips/blob/master/dip-0004.md)~g;" \ +-pe "s~\]\[DIP5\]~](https://github.com/dashpay/dips/blob/master/dip-0005.md)~g;" \ +-pe "s~\]\[DIP6\]~](https://github.com/dashpay/dips/blob/master/dip-0006.md)~g;" \ +-pe "s~\]\[DIP7\]~](https://github.com/dashpay/dips/blob/master/dip-0007.md)~g;" \ +-pe "s~\]\[DIP8\]~](https://github.com/dashpay/dips/blob/master/dip-0008.md)~g;" \ +-pe "s~\]\[#bitcoin\]~](https://webchat.freenode.net/?channels=bitcoin&uio=d4)~g;" \ +-pe "s~\]\[#bitcoin-dev\]~](https://webchat.freenode.net/?channels=bitcoin-dev&uio=d4)~g;" \ +-pe "s~\]\[#bitcoin-mining\]~](https://webchat.freenode.net/?channels=bitcoin-mining&uio=d4)~g;" \ +-pe "s~\]\[#bitcoin-wiki\]~](https://webchat.freenode.net/?channels=bitcoin-wiki&uio=d4)~g;" \ +-pe "s~\]\[0bin\]~](http://0bin.net/)~g;" \ +-pe "s~\]\[bcc automated testing\]~](https://github.com/dashpay/dash/blob/master/README.md#automated-testing)~g;" \ +-pe "s~\]\[bcc configuration\]~](https://en.bitcoin.it/wiki/Running_Bitcoin)~g;" \ +-pe "s~\]\[bcc data directory\]~](https://en.bitcoin.it/wiki/Data_directory)~g;" \ +-pe "s~\]\[bcc issues\]~](https://github.com/dashpay/dash/issues)~g;" \ +-pe "s~\]\[bcc new issue\]~](https://github.com/dashpay/dash/issues/new)~g;" \ +-pe "s~\]\[bcc pulls\]~](https://github.com/dashpay/dash/pulls)~g;" \ +-pe "s~\]\[bcc tor\]~](https://en.bitcoin.it/wiki/Tor)~g;" \ +-pe "s~\]\[bcc tor hs\]~](https://en.bitcoin.it/wiki/Tor#Hidden_services)~g;" \ +-pe "s~\]\[core github tag\]~](https://github.com/bitcoin-dot-org/bitcoin.org/labels/Core)~g;" \ +-pe "s~\]\[BFGMiner\]~](https://github.com/luke-jr/bfgminer)~g;" \ +-pe "s~\]\[Bitcoin beginners\]~](http://www.reddit.com/r/bitcoinbeginners)~g;" \ +-pe "s~\]\[Bitcoin Core\]~](https://bitcoin.org/en/download)~g;" \ +-pe "s~\]\[Bitcoin Core 0.1.6\]~](https://github.com/bitcoin/bitcoin/commit/cc0b4c3b62367a2aebe5fc1f4d0ed4b97e9c2ac9)~g;" \ +-pe "s~\]\[Bitcoin Core 0.2.9\]~](https://github.com/bitcoin/bitcoin/commit/42605ce8bcc9bd01b86491c74fee14de77960868)~g;" \ +-pe "s~\]\[Bitcoin Core 0.3.11\]~](https://github.com/bitcoin/bitcoin/commit/343328c6b8db85e58a1feea85f0d10e62967fa19)~g;" \ +-pe "s~\]\[Bitcoin Core 0.3.15\]~](https://github.com/bitcoin/bitcoin/commit/c891967b6fcab2e8dc4ce0c787312b36c07efa4d)~g;" \ +-pe "s~\]\[Bitcoin Core 0.3.18\]~](https://github.com/bitcoin/bitcoin/commit/82201801336f64ee77851b9eaab9383ee4e442f0)~g;" \ +-pe "s~\]\[Bitcoin Core build unix\]~](https://github.com/dashpay/dash/blob/master/doc/build-unix.md)~g;" \ +-pe "s~\]\[Bitcoin Core docs directory\]~](https://github.com/dashpay/dash/tree/master/doc)~g;" \ +-pe "s~\]\[bitcoin core fee drop commit\]~](https://github.com/bitcoin/bitcoin/commit/6a4c196dd64da2fd33dc7ae77a8cdd3e4cf0eff1)~g;" \ +-pe "s~\]\[Bitcoin Core issue #2381\]~](https://github.com/bitcoin/bitcoin/issues/2381)~g;" \ +-pe "s~\]\[Bitcoin Core master\]~](https://github.com/dashpay/dash)~g;" \ +-pe "s~\]\[Bitcoin Core pull #4468\]~](https://github.com/bitcoin/bitcoin/pull/4468)~g;" \ +-pe "s~\]\[Bitcoin core transifex\]~](https://www.transifex.com/projects/p/bitcoin/)~g;" \ +-pe "s~\]\[Bitcoin reddit\]~](http://www.reddit.com/r/dashpay)~g;" \ +-pe "s~\]\[Bitcoin reddit new\]~](http://www.reddit.com/r/dashpay/new)~g;" \ +-pe "s~\]\[Bitcoin stackexchange\]~](http://bitcoin.stackexchange.com)~g;" \ +-pe "s~\]\[Bitcoin stackexchange tag bitcoin-qt\]~](http://bitcoin.stackexchange.com/questions/tagged/bitcoin-qt)~g;" \ +-pe "s~\]\[BitcoinJ\]~](http://bitcoinj.github.io)~g;" \ +-pe "s~\]\[BitcoinJ documentation about pending transaction safety\]~](https://bitcoinj.github.io/security-model#pending-transactions)~g;" \ +-pe "s~\]\[bitcoinj micropayment tutorial\]~](https://bitcoinj.github.io/working-with-micropayments)~g;" \ +-pe "s~\]\[block170\]~](https://www.biteasy.com/block/00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee)~g;" \ +-pe "s~\]\[casascius address utility\]~](https://github.com/casascius/Bitcoin-Address-Utility)~g;" \ +-pe "s~\]\[core base58.h\]~](https://github.com/dashpay/dash/blob/master/src/base58.h)~g;" \ +-pe "s~\]\[core chainparams.cpp\]~](https://github.com/dashpay/dash/blob/master/src/chainparams.cpp)~g;" \ +-pe "s~\]\[core git\]~](https://github.com/dashpay/dash/)~g;" \ +-pe "s~\]\[core paymentrequest.proto\]~](https://github.com/dashpay/dash/blob/master/src/qt/paymentrequest.proto)~g;" \ +-pe "s~\]\[core script.h\]~](https://github.com/dashpay/dash/blob/master/src/script/script.h)~g;" \ +-pe "s~\]\[creative commons attribution 3.0 license\]~](https://creativecommons.org/licenses/by/3.0/)~g;" \ +-pe "s~\]\[Dash Masternode Tool\]~](https://github.com/Bertrand256/dash-masternode-tool)~g;" \ +-pe "s~\]\[Dash Seeder\]~](https://github.com/nightlydash/dash-seeder/tree/master)~g;" \ +-pe "s~\]\[DashJ\]~](https://github.com/HashEngineering/dashj)~g;" \ +-pe "s~\]\[dashmnb\]~](https://github.com/chaeplin/dashmnb)~g;" \ +-pe "s~\]\[DER\]~](https://en.wikipedia.org/wiki/X.690#DER_encoding)~g;" \ +-pe "s~\]\[dig command\]~](https://en.wikipedia.org/wiki/Dig_%28Unix_command%29)~g;" \ +-pe "s~\]\[Discord channels\]~](http://www.dashchat.org)~g;" \ +-pe "s~\]\[DNS A records\]~](http://tools.ietf.org/html/rfc1035#section-3.2.2)~g;" \ +-pe "s~\]\[DNS Seed Policy\]~](https://github.com/dashpay/dash/blob/master/doc/dnsseed-policy.md)~g;" \ +-pe "s~\]\[docs issue\]~](https://github.com/dash-docs/dash-docs/issues)~g;" \ +-pe "s~\]\[ECDSA\]~](https://en.wikipedia.org/wiki/Elliptic_Curve_DSA)~g;" \ +-pe "s~\]\[edit bandwidth sharing guide\]~](https://github.com/bitcoin-dot-org/bitcoin.org/edit/master/en/full-node.md)~g;" \ +-pe "s~\]\[Electrum server\]~](https://github.com/spesmilo/electrum-server)~g;" \ +-pe "s~\]\[Eloipool\]~](https://github.com/luke-jr/eloipool)~g;" \ +-pe "s~\]\[errors in docs\]~](https://github.com/dash-docs/dash-docs/issues?q=is%3Aissue+label%3A%22Dev+Docs%22)~g;" \ +-pe "s~\]\[fake satoshi transaction\]~](https://www.reddit.com/r/Bitcoin/comments/3fv42j/blockchaininfo_spoofed_transactions_problem_aug_4/)~g;" \ +-pe "s~\]\[forum tech support\]~](https://www.dash.org/forum/categories/dash-support.61/)~g;" \ +-pe "s~\]\[ghash betcoin double spend\]~](https://bitcointalk.org/index.php?topic=321630.msg3445371)~g;" \ +-pe "s~\]\[gitian sigs\]~](https://github.com/bitcoin/gitian.sigs)~g;" \ +-pe "s~\]\[high-speed block relay network\]~](https://www.mail-archive.com/bitcoin-development@lists.sourceforge.net/msg03189.html)~g;" \ +-pe "s~\]\[HMAC-SHA512\]~](https://en.wikipedia.org/wiki/HMAC)~g;" \ +-pe "s~\]\[HTTP basic authentication\]~](https://en.wikipedia.org/wiki/Basic_access_authentication)~g;" \ +-pe "s~\]\[HTTP longpoll\]~](https://en.wikipedia.org/wiki/Push_technology#Long_polling)~g;" \ +-pe "s~\]\[information theoretic security\]~](https://en.wikipedia.org/wiki/Information_theoretic_security)~g;" \ +-pe "s~\]\[inherit bitcoins\]~](http://bitcoin.stackexchange.com/q/38692/21052)~g;" \ +-pe "s~\]\[IP-to-IP payment protocol\]~](https://en.bitcoin.it/wiki/IP_Transactions)~g;" \ +-pe "s~\]\[IPv4-mapped IPv6 addresses\]~](http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses)~g;" \ +-pe "s~\]\[irc channels\]~](https://en.bitcoin.it/wiki/IRC_channels)~g;" \ +-pe "s~\]\[JSON-RPC version 1.0\]~](http://json-rpc.org/wiki/specification)~g;" \ +-pe "s~\]\[JSON-RPC request batching\]~](http://www.jsonrpc.org/specification#batch)~g;" \ +-pe "s~\]\[july 2015 chain forks\]~](https://en.bitcoin.it/wiki/July_2015_chain_forks)~g;" \ +-pe "s~\]\[libblkmaker\]~](https://github.com/bitcoin/libblkmaker)~g;" \ +-pe "s~\]\[localhost\]~](https://en.wikipedia.org/wiki/Localhost)~g;" \ +-pe "s~\]\[lying consistently is hard\]~](https://groups.google.com/forum/#!msg/bitcoinj/Ys13qkTwcNg/9qxnhwnkeoIJ)~g;" \ +-pe "s~\]\[makeseeds script\]~](https://github.com/dashpay/dash/tree/master/contrib/seeds)~g;" \ +-pe "s~\]\[mozilla's bug reporting documentation\]~](https://developer.mozilla.org/en-US/docs/Mozilla/QA/Bug_writing_guidelines#Writing_precise_steps_to_reproduce)~g;" \ +-pe "s~\]\[murmur3\]~](https://en.wikipedia.org/wiki/MurmurHash)~g;" \ +-pe "s~\]\[man-in-the-middle\]~](https://en.wikipedia.org/wiki/Man-in-the-middle_attack)~g;" \ +-pe "s~\]\[MIME\]~](https://en.wikipedia.org/wiki/Internet_media_type)~g;" \ +-pe "s~\]\[MIT license\]~](http://opensource.org/licenses/MIT)~g;" \ +-pe "s~\]\[mozrootstore\]~](https://www.mozilla.org/en-US/about/governance/policies/security-group/certs/)~g;" \ +-pe "s~\]\[native irc client\]~](https://en.wikipedia.org/wiki/List_of_IRC_clients)~g;" \ +-pe "s~\]\[netcat\]~](https://en.wikipedia.org/wiki/Netcat)~g;" \ +-pe "s~\]\[nop opcodes\]~](https://en.bitcoin.it/wiki/Script#Reserved_words)~g;" \ +-pe "s~\]\[offline transactions\]~](http://bitcoin.stackexchange.com/a/34122/21052)~g;" \ +-pe "s~\]\[open a pull request\]~](https://github.com/dash-docs/dash-docs#working-with-github)~g;" \ +-pe "s~\]\[open an issue\]~](https://github.com/dash-docs/dash-docs/issues/new)~g;" \ +-pe "s~\]\[Payment Request Generator\]~](https://github.com/gavinandresen/paymentrequest/blob/master/php/demo_website/createpaymentrequest.php)~g;" \ +-pe "s~\]\[Piotr Piasecki's testnet faucet\]~](https://tpfaucet.appspot.com/)~g;" \ +-pe "s~\]\[prime symbol\]~](https://en.wikipedia.org/wiki/Prime_%28symbol%29)~g;" \ +-pe "s~\]\[protobuf\]~](https://developers.google.com/protocol-buffers/)~g;" \ +-pe "s~\]\[python-bitcoinlib\]~](https://github.com/petertodd/python-bitcoinlib)~g;" \ +-pe "s~\]\[python-blkmaker\]~](https://gitorious.org/bitcoin/python-blkmaker)~g;" \ +-pe "s~\]\[Satoshi Nakamoto\]~](https://en.bitcoin.it/wiki/Satoshi_Nakamoto)~g;" \ +-pe "s~\]\[setup tor\]~](https://www.torproject.org/)~g;" \ +-pe "s~\]\[SHA256\]~](https://en.wikipedia.org/wiki/SHA-2)~g;" \ +-pe "s~\]\[Stratum mining protocol\]~](http://mining.bitcoin.cz/stratum-mining)~g;" \ +-pe "s~\]\[study of SPV privacy over tor\]~](http://arxiv.org/abs/1410.6079)~g;" \ +-pe "s~\]\[superblock example\]~](https://chainz.cryptoid.info/dash/block.dws?731104.htm)~g;" \ +-pe "s~\]\[Testnet Faucet - Dash.org\]~](https://test.faucet.dash.org/)~g;" \ +-pe "s~\]\[Testnet Faucet - Masternode.io\]~](http://test.faucet.masternode.io/)~g;" \ +-pe "s~\]\[Testnet Faucet - Dashninja.pl\]~](https://test.faucet.dashninja.pl/)~g;" \ +-pe "s~\]\[Testnet Faucet - Crowdnode.io\]~](http://faucet.test.dash.crowdnode.io/)~g;" \ +-pe "s~\]\[Tor\]~](https://en.wikipedia.org/wiki/Tor_%28anonymity_network%29)~g;" \ +-pe "s~\]\[transifex\]~](https://www.transifex.com/projects/p/bitcoinorg/)~g;" \ +-pe "s~\]\[unix epoch time\]~](https://en.wikipedia.org/wiki/Unix_time)~g;" \ +-pe "s~\]\[URI encoded\]~](https://tools.ietf.org/html/rfc3986)~g;" \ +-pe "s~\]\[wiki bitcoin core compatible devices arm\]~](https://en.bitcoin.it/wiki/Bitcoin_Core_compatible_devices#ARM-based_Chipsets)~g;" \ +-pe "s~\]\[wiki bitcoin core documentation\]~](https://en.bitcoin.it/wiki/Category:Bitcoin_Core_documentation)~g;" \ +-pe "s~\]\[wiki create account\]~](https://en.bitcoin.it/w/index.php?title=Special:UserLogin&type=signup)~g;" \ +-pe "s~\]\[wiki enable editing\]~](https://en.bitcoin.it/wiki/Bitcoin_Wiki:Editing_privileges)~g;" \ +-pe "s~\]\[wiki getblocktemplate\]~](https://en.bitcoin.it/wiki/Getblocktemplate)~g;" \ +-pe "s~\]\[wiki proper money handling\]~](https://en.bitcoin.it/wiki/Proper_Money_Handling_%28JSON-RPC%29)~g;" \ +-pe "s~\]\[wiki template bitcoin core documentation\]~](https://en.bitcoin.it/wiki/Template:Bitcoin_Core_documentation)~g;" \ +-pe "s~\]\[wiki script\]~](https://en.bitcoin.it/wiki/Script)~g;" \ +-pe "s~\]\[x509\]~](https://en.wikipedia.org/wiki/X.509)~g;" \ +-pe "s~\]\[core bloom.cpp hash\]~](https://github.com/dashpay/dash/blob/333e1eaeea80344e5a28db6efbce2691c85e2b25/src/bloom.cpp#L58)~g;" \ +-pe "s~\]\[MAX_SIZE\]~](https://github.com/dashpay/dash/blob/c31ba8ba4c07e72620bd71753f2103ca103bb1c2/src/serialize.h#L26)~g;" \ +-pe "s~\]\[privatesend denominations\]~](https://github.com/dashpay/dash/blob/753b1e486b2757b1dba59998ee477e7ceff04f2d/src/privatesend.cpp#L149-L171)~g;" \ +-pe "s~\]\[rpcprotocol.h\]~](https://github.com/dashpay/dash/blob/3e0eee4c84f40b3cf277e8d03e004249d03c081d/src/rpcprotocol.h)~g;" \ +-pe "s~\]\[spork.h\]~](https://github.com/dashpay/dash/blob/a4f5ba38b65384fb9243ce78c111feceb377e1a9/src/spork.h#L20)~g;" \ +-pe "s~\]\[spork pubkey\]~](https://github.com/dashpay/dash/blob/eaf90b77177efbaf9cbed46e822f0d794f1a0ee5/src/chainparams.cpp#L158)~g;" \ +-pe "s~\]\[masternode payments pubkey\]~](https://github.com/dashpay/dash/blob/eaf90b77177efbaf9cbed46e822f0d794f1a0ee5/src/chainparams.cpp#L159)~g;" \ +-pe "s~\]\[block subsidy\]~](https://github.com/dashpay/dash/blob/9ed9474a9eb007bba70278ce19df68e84aeeb712/src/main.cpp#L1741)~g;" \ +-pe "s~\]\[governance vote signature format\]~](https://github.com/dashpay/dash/blob/48d63ab296f5613c727306ea39524f51d157a04c/src/governance-vote.cpp#L240-#L241)~g;" \ diff --git a/scripts/applyrpcs.sh b/scripts/applyrpcs.sh new file mode 100755 index 00000000..c15d2381 --- /dev/null +++ b/scripts/applyrpcs.sh @@ -0,0 +1,149 @@ +#!/usr/bin/env bash + +perl \ +-pe "s~\[rpc getaddressbalance\]~(/docs/core-api-ref-remote-procedure-calls-address-index#section-getaddressbalance)~g;" \ +-pe "s~\[rpc getaddressdeltas\]~(/docs/core-api-ref-remote-procedure-calls-address-index#section-getaddressdeltas)~g;" \ +-pe "s~\[rpc getaddressmempool\]~(/docs/core-api-ref-remote-procedure-calls-address-index#section-getaddressmempool)~g;" \ +-pe "s~\[rpc getaddresstxids\]~(/docs/core-api-ref-remote-procedure-calls-address-index#section-getaddresstxids)~g;" \ +-pe "s~\[rpc getaddressutxos\]~(/docs/core-api-ref-remote-procedure-calls-address-index#section-getaddressutxos)~g;" \ +-pe "s~\[rpc getbestblockhash\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getbestblockhash)~g;" \ +-pe "s~\[rpc getbestchainlock\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getbestchainlock)~g;" \ +-pe "s~\[rpc getblock\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getblock)~g;" \ +-pe "s~\[rpc getblockchaininfo\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getblockchaininfo)~g;" \ +-pe "s~\[rpc getblockcount\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getblockcount)~g;" \ +-pe "s~\[rpc getblockhash\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getblockhash)~g;" \ +-pe "s~\[rpc getblockhashes\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getblockhashes)~g;" \ +-pe "s~\[rpc getblockheader\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getblockheader)~g;" \ +-pe "s~\[rpc getblockheaders\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getblockheaders)~g;" \ +-pe "s~\[rpc getblockstats\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getblockstats)~g;" \ +-pe "s~\[rpc getchaintips\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getchaintips)~g;" \ +-pe "s~\[rpc getchaintxstats\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getchaintxstats)~g;" \ +-pe "s~\[rpc getdifficulty\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getdifficulty)~g;" \ +-pe "s~\[rpc getmempoolancestors\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getmempoolancestors)~g;" \ +-pe "s~\[rpc getmempooldescendants\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getmempooldescendants)~g;" \ +-pe "s~\[rpc getmempoolentry\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getmempoolentry)~g;" \ +-pe "s~\[rpc getmempoolinfo\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getmempoolinfo)~g;" \ +-pe "s~\[rpc getrawmempool\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getrawmempool)~g;" \ +-pe "s~\[rpc getmerkleblocks\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getmerkleblocks)~g;" \ +-pe "s~\[rpc getspecialtxes\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getspecialtxes)~g;" \ +-pe "s~\[rpc getspentinfo\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-getspentinfo)~g;" \ +-pe "s~\[rpc gettxout\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-gettxout)~g;" \ +-pe "s~\[rpc gettxoutproof\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-gettxoutproof)~g;" \ +-pe "s~\[rpc gettxoutsetinfo\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-gettxoutsetinfo)~g;" \ +-pe "s~\[rpc preciousblock\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-preciousblock)~g;" \ +-pe "s~\[rpc pruneblockchain\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-pruneblockchain)~g;" \ +-pe "s~\[rpc verifychain\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-verifychain)~g;" \ +-pe "s~\[rpc verifytxoutproof\]~(/docs/core-api-ref-remote-procedure-calls-blockchain#section-verifytxoutproof)~g;" \ +-pe "s~\[rpc debug\]~(/docs/core-api-ref-remote-procedure-calls-control#section-debug)~g;" \ +-pe "s~\[rpc getinfo\]~(/docs/core-api-ref-remote-procedure-calls-control#section-getinfo)~g;" \ +-pe "s~\[rpc getmemoryinfo\]~(/docs/core-api-ref-remote-procedure-calls-control#section-getmemoryinfo)~g;" \ +-pe "s~\[rpc help\]~(/docs/core-api-ref-remote-procedure-calls-control#section-help)~g;" \ +-pe "s~\[rpc logging\]~(/docs/core-api-ref-remote-procedure-calls-control#section-logging)~g;" \ +-pe "s~\[rpc stop\]~(/docs/core-api-ref-remote-procedure-calls-control#section-stop)~g;" \ +-pe "s~\[rpc uptime\]~(/docs/core-api-ref-remote-procedure-calls-control#section-uptime)~g;" \ +-pe "s~\[rpc getgovernanceinfo\]~(/docs/core-api-ref-remote-procedure-calls-dash#section-getgovernanceinfo)~g;" \ +-pe "s~\[rpc getpoolinfo\]~(/docs/core-api-ref-remote-procedure-calls-dash#section-getpoolinfo)~g;" \ +-pe "s~\[rpc getsuperblockbudget\]~(/docs/core-api-ref-remote-procedure-calls-dash#section-getsuperblockbudget)~g;" \ +-pe "s~\[rpc gobject\]~(/docs/core-api-ref-remote-procedure-calls-dash#section-gobject)~g;" \ +-pe "s~\[rpc masternode\]~(/docs/core-api-ref-remote-procedure-calls-dash#section-masternode)~g;" \ +-pe "s~\[rpc masternodelist\]~(/docs/core-api-ref-remote-procedure-calls-dash#section-masternodelist)~g;" \ +-pe "s~\[rpc mnsync\]~(/docs/core-api-ref-remote-procedure-calls-dash#section-mnsync)~g;" \ +-pe "s~\[rpc privatesend\]~(/docs/core-api-ref-remote-procedure-calls-dash#section-privatesend)~g;" \ +-pe "s~\[rpc spork\]~(/docs/core-api-ref-remote-procedure-calls-dash#section-spork)~g;" \ +-pe "s~\[rpc voteraw\]~(/docs/core-api-ref-remote-procedure-calls-dash#section-voteraw)~g;" \ +-pe "s~\[rpc bls\]~(/docs/core-api-ref-remote-procedure-calls-evolution#section-bls)~g;" \ +-pe "s~\[rpc protx\]~(/docs/core-api-ref-remote-procedure-calls-evolution#section-protx)~g;" \ +-pe "s~\[rpc quorum\]~(/docs/core-api-ref-remote-procedure-calls-evolution#section-quorum)~g;" \ +-pe "s~\[rpc generate\]~(/docs/core-api-ref-remote-procedure-calls-generating#section-generate)~g;" \ +-pe "s~\[rpc generatetoaddress\]~(/docs/core-api-ref-remote-procedure-calls-generating#section-generatetoaddress)~g;" \ +-pe "s~\[rpc getblocktemplate\]~(/docs/core-api-ref-remote-procedure-calls-mining#section-getblocktemplate)~g;" \ +-pe "s~\[rpc getmininginfo\]~(/docs/core-api-ref-remote-procedure-calls-mining#section-getmininginfo)~g;" \ +-pe "s~\[rpc getnetworkhashps\]~(/docs/core-api-ref-remote-procedure-calls-mining#section-getnetworkhashps)~g;" \ +-pe "s~\[rpc prioritisetransaction\]~(/docs/core-api-ref-remote-procedure-calls-mining#section-prioritisetransaction)~g;" \ +-pe "s~\[rpc submitblock\]~(/docs/core-api-ref-remote-procedure-calls-mining#section-submitblock)~g;" \ +-pe "s~\[rpc addnode\]~(/docs/core-api-ref-remote-procedure-calls-network#section-addnode)~g;" \ +-pe "s~\[rpc clearbanned\]~(/docs/core-api-ref-remote-procedure-calls-network#section-clearbanned)~g;" \ +-pe "s~\[rpc disconnectnode\]~(/docs/core-api-ref-remote-procedure-calls-network#section-disconnectnode)~g;" \ +-pe "s~\[rpc getaddednodeinfo\]~(/docs/core-api-ref-remote-procedure-calls-network#section-getaddednodeinfo)~g;" \ +-pe "s~\[rpc getconnectioncount\]~(/docs/core-api-ref-remote-procedure-calls-network#section-getconnectioncount)~g;" \ +-pe "s~\[rpc getnettotals\]~(/docs/core-api-ref-remote-procedure-calls-network#section-getnettotals)~g;" \ +-pe "s~\[rpc getnetworkinfo\]~(/docs/core-api-ref-remote-procedure-calls-network#section-getnetworkinfo)~g;" \ +-pe "s~\[rpc getpeerinfo\]~(/docs/core-api-ref-remote-procedure-calls-network#section-getpeerinfo)~g;" \ +-pe "s~\[rpc listbanned\]~(/docs/core-api-ref-remote-procedure-calls-network#section-listbanned)~g;" \ +-pe "s~\[rpc ping\]~(/docs/core-api-ref-remote-procedure-calls-network#section-ping)~g;" \ +-pe "s~\[rpc setban\]~(/docs/core-api-ref-remote-procedure-calls-network#section-setban)~g;" \ +-pe "s~\[rpc setnetworkactive\]~(/docs/core-api-ref-remote-procedure-calls-network#section-setnetworkactive)~g;" \ +-pe "s~\[rpc combinerawtransaction\]~(/docs/core-api-ref-remote-procedure-calls-raw-transaction#section-combinerawtransaction)~g;" \ +-pe "s~\[rpc createrawtransaction\]~(/docs/core-api-ref-remote-procedure-calls-raw-transaction#section-createrawtransaction)~g;" \ +-pe "s~\[rpc decoderawtransaction\]~(/docs/core-api-ref-remote-procedure-calls-raw-transaction#section-decoderawtransaction)~g;" \ +-pe "s~\[rpc decodescript\]~(/docs/core-api-ref-remote-procedure-calls-raw-transaction#section-decodescript)~g;" \ +-pe "s~\[rpc fundrawtransaction\]~(/docs/core-api-ref-remote-procedure-calls-raw-transaction#section-fundrawtransaction)~g;" \ +-pe "s~\[rpc getrawtransaction\]~(/docs/core-api-ref-remote-procedure-calls-raw-transaction#section-getrawtransaction)~g;" \ +-pe "s~\[rpc sendrawtransaction\]~(/docs/core-api-ref-remote-procedure-calls-raw-transaction#section-sendrawtransaction)~g;" \ +-pe "s~\[rpc signrawtransaction\]~(/docs/core-api-ref-remote-procedure-calls-raw-transaction#section-signrawtransaction)~g;" \ +-pe "s~\[rpc createmultisig\]~(/docs/core-api-ref-remote-procedure-calls-utility#section-createmultisig)~g;" \ +-pe "s~\[rpc estimatefee\]~(/docs/core-api-ref-remote-procedure-calls-utility#section-estimatefee)~g;" \ +-pe "s~\[rpc estimatesmartfee\]~(/docs/core-api-ref-remote-procedure-calls-utility#section-estimatesmartfee)~g;" \ +-pe "s~\[rpc signmessagewithprivkey\]~(/docs/core-api-ref-remote-procedure-calls-utility#section-signmessagewithprivkey)~g;" \ +-pe "s~\[rpc validateaddress\]~(/docs/core-api-ref-remote-procedure-calls-utility#section-validateaddress)~g;" \ +-pe "s~\[rpc verifymessage\]~(/docs/core-api-ref-remote-procedure-calls-utility#section-verifymessage)~g;" \ +-pe "s~\[rpc abandontransaction\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-abandontransaction)~g;" \ +-pe "s~\[rpc abortrescan\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-abortrescan)~g;" \ +-pe "s~\[rpc addmultisigaddress\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-addmultisigaddress)~g;" \ +-pe "s~\[rpc backupwallet\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-backupwallet)~g;" \ +-pe "s~\[rpc dumphdinfo\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-dumphdinfo)~g;" \ +-pe "s~\[rpc dumpprivkey\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-dumpprivkey)~g;" \ +-pe "s~\[rpc dumpwallet\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-dumpwallet)~g;" \ +-pe "s~\[rpc encryptwallet\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-encryptwallet)~g;" \ +-pe "s~\[rpc getaccount\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-getaccount)~g;" \ +-pe "s~\[rpc getaccountaddress\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-getaccountaddress)~g;" \ +-pe "s~\[rpc getaddressesbyaccount\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-getaddressesbyaccount)~g;" \ +-pe "s~\[rpc getbalance\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-getbalance)~g;" \ +-pe "s~\[rpc getnewaddress\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-getnewaddress)~g;" \ +-pe "s~\[rpc getrawchangeaddress\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-getrawchangeaddress)~g;" \ +-pe "s~\[rpc getreceivedbyaccount\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-getreceivedbyaccount)~g;" \ +-pe "s~\[rpc getreceivedbyaddress\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-getreceivedbyaddress)~g;" \ +-pe "s~\[rpc gettransaction\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-gettransaction)~g;" \ +-pe "s~\[rpc getunconfirmedbalance\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-getunconfirmedbalance)~g;" \ +-pe "s~\[rpc getwalletinfo\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-getwalletinfo)~g;" \ +-pe "s~\[rpc importaddress\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-importaddress)~g;" \ +-pe "s~\[rpc importelectrumwallet\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-importelectrumwallet)~g;" \ +-pe "s~\[rpc importmulti\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-importmulti)~g;" \ +-pe "s~\[rpc importprivkey\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-importprivkey)~g;" \ +-pe "s~\[rpc importprunedfunds\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-importprunedfunds)~g;" \ +-pe "s~\[rpc importpubkey\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-importpubkey)~g;" \ +-pe "s~\[rpc importwallet\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-importwallet)~g;" \ +-pe "s~\[rpc keepass\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-keepass)~g;" \ +-pe "s~\[rpc keypoolrefill\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-keypoolrefill)~g;" \ +-pe "s~\[rpc listaccounts\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-listaccounts)~g;" \ +-pe "s~\[rpc listaddressbalances\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-listaddressbalances)~g;" \ +-pe "s~\[rpc listaddressgroupings\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-listaddressgroupings)~g;" \ +-pe "s~\[rpc listlockunspent\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-listlockunspent)~g;" \ +-pe "s~\[rpc listreceivedbyaccount\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-listreceivedbyaccount)~g;" \ +-pe "s~\[rpc listreceivedbyaddress\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-listreceivedbyaddress)~g;" \ +-pe "s~\[rpc listsinceblock\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-listsinceblock)~g;" \ +-pe "s~\[rpc listtransactions\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-listtransactions)~g;" \ +-pe "s~\[rpc listunspent\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-listunspent)~g;" \ +-pe "s~\[rpc listwallets\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-listwallets)~g;" \ +-pe "s~\[rpc lockunspent\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-lockunspent)~g;" \ +-pe "s~\[rpc move\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-move)~g;" \ +-pe "s~\[rpc removeprunedfunds\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-removeprunedfunds)~g;" \ +-pe "s~\[rpc sendfrom\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-sendfrom)~g;" \ +-pe "s~\[rpc sendmany\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-sendmany)~g;" \ +-pe "s~\[rpc sendtoaddress\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-sendtoaddress)~g;" \ +-pe "s~\[rpc setaccount\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-setaccount)~g;" \ +-pe "s~\[rpc setprivatesendamount\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-setprivatesendamount)~g;" \ +-pe "s~\[rpc setprivatesendrounds\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-setprivatesendrounds)~g;" \ +-pe "s~\[rpc settxfee\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-settxfee)~g;" \ +-pe "s~\[rpc signmessage\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-signmessage)~g;" \ +-pe "s~\[rpc walletlock\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-walletlock)~g;" \ +-pe "s~\[rpc walletpassphrase\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-walletpassphrase)~g;" \ +-pe "s~\[rpc walletpassphrasechange\]~(/docs/core-api-ref-remote-procedure-calls-wallet#section-walletpassphrasechange)~g;" \ +-pe "s~\[rpc estimatepriority\]~(/docs/core-api-ref-remote-procedure-calls-removed#section-estimatepriority)~g;" \ +-pe "s~\[rpc estimatesmartpriority\]~(/docs/core-api-ref-remote-procedure-calls-removed#section-estimatesmartpriority)~g;" \ +-pe "s~\[rpc gethashespersec\]~(/docs/core-api-ref-remote-procedure-calls-removed#section-gethashespersec)~g;" \ +-pe "s~\[rpc getwork\]~(/docs/core-api-ref-remote-procedure-calls-removed#section-getwork)~g;" \ +-pe "s~\[rpc getgenerate\]~(/docs/core-api-ref-remote-procedure-calls-removed#section-getgenerate)~g;" \ +-pe "s~\[rpc masternodebroadcast\]~(/docs/core-api-ref-remote-procedure-calls-removed#section-masternodebroadcast)~g;" \ +-pe "s~\[rpc sentinelping\]~(/docs/core-api-ref-remote-procedure-calls-removed#section-sentinelping)~g;" \ +-pe "s~\[rpc setgenerate\]~(/docs/core-api-ref-remote-procedure-calls-removed#section-setgenerate)~g;" diff --git a/scripts/applysummaries.sh b/scripts/applysummaries.sh new file mode 100755 index 00000000..eafa2f5f --- /dev/null +++ b/scripts/applysummaries.sh @@ -0,0 +1,156 @@ +#!/usr/bin/env bash + +perl -pe "s~\{\{summary_abandonTransaction\}\}~marks an in-wallet transaction and all its in-wallet descendants as abandoned. This allows their inputs to be respent.~g;" \ +-pe "s~\{\{summary_abortRescan\}\}~Stops current wallet rescan~g;" \ +-pe "s~\{\{summary_addMultiSigAddress\}\}~adds a P2SH multisig address to the wallet.~g;" \ +-pe "s~\{\{summary_addNode\}\}~attempts to add or remove a node from the addnode list, or to try a connection to a node once.~g;" \ +-pe "s~\{\{summary_backupWallet\}\}~safely copies \`wallet.dat\` to the specified file, which can be a directory or a path with filename.~g;" \ +-pe "s~\{\{summary_bls\}\}~provides a set of commands to execute BLS-related actions.~g;" \ +-pe "s~\{\{summary_clearBanned\}\}~clears list of banned nodes.~g;" \ +-pe "s~\{\{summary_combineRawTransaction\}\}~combine multiple partially signed transactions into one transaction.~g;" \ +-pe "s~\{\{summary_createMultiSig\}\}~creates a P2SH multi-signature address.~g;" \ +-pe "s~\{\{summary_createRawTransaction\}\}~creates an unsigned serialized transaction that spends a previous output to a new output with a P2PKH or P2SH address. The transaction is not stored in the wallet or transmitted to the network.~g;" \ +-pe "s~\{\{summary_debug\}\}~changes the debug category from the console.~g;" \ +-pe "s~\{\{summary_decodeRawTransaction\}\}~decodes a serialized transaction hex string into a JSON object describing the transaction.~g;" \ +-pe "s~\{\{summary_decodeScript\}\}~decodes a hex-encoded P2SH redeem script.~g;" \ +-pe "s~\{\{summary_disconnectNode\}\}~immediately disconnects from a specified node.~g;" \ +-pe "s~\{\{summary_dumpHDInfo\}\}~returns an object containing sensitive private info about this HD wallet~g;" \ +-pe "s~\{\{summary_dumpPrivKey\}\}~returns the wallet-import-format (WIP) private key corresponding to an address. (But does not remove it from the wallet.)~g;" \ +-pe "s~\{\{summary_dumpWallet\}\}~creates or overwrites a file with all wallet keys in a human-readable format.~g;" \ +-pe "s~\{\{summary_encryptWallet\}\}~encrypts the wallet with a passphrase. This is only to enable encryption for the first time. After encryption is enabled, you will need to enter the passphrase to use private keys.~g;" \ +-pe "s~\{\{summary_estimateFee\}\}~estimates the transaction fee per kilobyte that needs to be paid for a transaction to begin confirmation within a certain number of blocks.~g;" \ +-pe "s~\{\{summary_estimatePriority\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_estimateSmartFee\}\}~estimates the transaction fee per kilobyte that needs to be paid for a transaction to begin confirmation within a certain number of blocks and returns the number of blocks for which the estimate is valid.~g;" \ +-pe "s~\{\{summary_estimateSmartPriority\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_fundRawTransaction\}\}~adds inputs to a transaction until it has enough in value to meet its out value.~g;" \ +-pe "s~\{\{summary_gObject\}\}~provides a set of commands for managing governance objects and displaying information about them.~g;" \ +-pe "s~\{\{summary_generate\}\}~mines blocks immediately (before the RPC call returns).~g;" \ +-pe "s~\{\{summary_generateToAddress\}\}~mines blocks immediately to a specified address.~g;" \ +-pe "s~\{\{summary_getAccount\}\}~returns the name of the account associated with the given address.~g;" \ +-pe "s~\{\{summary_getAccountAddress\}\}~returns the current Dash address for receiving payments to this account. If the account doesn't exist, it creates both the account and a new address for receiving payment. Once a payment has been received to an address, future calls to this RPC for the same account will return a different address.~g;" \ +-pe "s~\{\{summary_getAddedNodeInfo\}\}~returns information about the given added node, or all added nodes (except onetry nodes). Only nodes which have been manually added using the \`addnode\` RPC will have their information displayed.~g;" \ +-pe "s~\{\{summary_getAddressBalance\}\}~returns the balance for address(es).~g;" \ +-pe "s~\{\{summary_getAddressDeltas\}\}~returns all changes for an address.~g;" \ +-pe "s~\{\{summary_getAddressMempool\}\}~returns all mempool deltas for an address.~g;" \ +-pe "s~\{\{summary_getAddressTxids\}\}~returns the txids for an address(es).~g;" \ +-pe "s~\{\{summary_getAddressUtxos\}\}~returns all unspent outputs for an address.~g;" \ +-pe "s~\{\{summary_getAddressesByAccount\}\}~returns a list of every address assigned to a particular account.~g;" \ +-pe "s~\{\{summary_getBalance\}\}~gets the balance in decimal dash across all accounts or for a particular account.~g;" \ +-pe "s~\{\{summary_getBestBlockHash\}\}~returns the header hash of the most recent block on the best block chain.~g;" \ +-pe "s~\{\{summary_getBestChainLock\}\}~returns the block hash of the best chainlock.~g;" \ +-pe "s~\{\{summary_getBlock\}\}~gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block.~g;" \ +-pe "s~\{\{summary_getBlockChainInfo\}\}~provides information about the current state of the block chain.~g;" \ +-pe "s~\{\{summary_getBlockCount\}\}~returns the number of blocks in the local best block chain.~g;" \ +-pe "s~\{\{summary_getBlockHash\}\}~returns the header hash of a block at the given height in the local best block chain.~g;" \ +-pe "s~\{\{summary_getBlockHashes\}\}~returns array of hashes of blocks within the timestamp range provided (requires \`timestampindex\` to be enabled).~g;" \ +-pe "s~\{\{summary_getBlockHeader\}\}~gets a block header with a particular header hash from the local block database either as a JSON object or as a serialized block header.~g;" \ +-pe "s~\{\{summary_getBlockHeaders\}\}~returns an array of items with information about the requested number of blockheaders starting from the requested hash.~g;" \ +-pe "s~\{\{summary_getBlockStats\}\}~computes per block statistics for a given window.~g;" \ +-pe "s~\{\{summary_getBlockTemplate\}\}~gets a block template or proposal for use with mining software.~g;" \ +-pe "s~\{\{summary_getChainTips\}\}~returns information about the highest-height block (tip) of each local block chain.~g;" \ +-pe "s~\{\{summary_getChainTxStats\}\}~compute statistics about the total number and rate of transactions in the chain.~g;" \ +-pe "s~\{\{summary_getConnectionCount\}\}~returns the number of connections to other nodes.~g;" \ +-pe "s~\{\{summary_getDifficulty\}\}~returns the proof-of-work difficulty as a multiple of the minimum difficulty.~g;" \ +-pe "s~\{\{summary_getGenerate\}\}~was removed in Dash Core 0.12.3.~g;" \ +-pe "s~\{\{summary_getGovernanceInfo\}\}~returns an object containing governance parameters.~g;" \ +-pe "s~\{\{summary_getHashesPerSec\}\}~was removed in Bitcoin Core 0.11.0 and is not part of Dash.~g;" \ +-pe "s~\{\{summary_getInfo\}\}~prints various information about the node and the network.~g;" \ +-pe "s~\{\{summary_getMemPoolAncestors\}\}~returns all in-mempool ancestors for a transaction in the mempool.~g;" \ +-pe "s~\{\{summary_getMemPoolDescendants\}\}~returns all in-mempool descendants for a transaction in the mempool.~g;" \ +-pe "s~\{\{summary_getMemPoolEntry\}\}~returns mempool data for given transaction (must be in mempool).~g;" \ +-pe "s~\{\{summary_getMemPoolInfo\}\}~returns information about the node's current transaction memory pool.~g;" \ +-pe "s~\{\{summary_getMemoryInfo\}\}~returns information about memory usage.~g;" \ +-pe "s~\{\{summary_getMerkleBlocks\}\}~returns an array of hex-encoded merkleblocks for blocks starting from which match .~g;" \ +-pe "s~\{\{summary_getMiningInfo\}\}~returns various mining-related information.~g;" \ +-pe "s~\{\{summary_getNetTotals\}\}~returns information about network traffic, including bytes in, bytes out, and the current time.~g;" \ +-pe "s~\{\{summary_getNetworkHashPS\}\}~returns the estimated network hashes per second based on the last n blocks.~g;" \ +-pe "s~\{\{summary_getNetworkInfo\}\}~returns information about the node's connection to the network.~g;" \ +-pe "s~\{\{summary_getNewAddress\}\}~returns a new Dash address for receiving payments. If an account is specified, payments received with the address will be credited to that account.~g;" \ +-pe "s~\{\{summary_getPeerInfo\}\}~returns data about each connected network node.~g;" \ +-pe "s~\{\{summary_getPoolInfo\}\}~returns an object containing mixing pool related information.~g;" \ +-pe "s~\{\{summary_getRawChangeAddress\}\}~returns a new Dash address for receiving change. This is for use with raw transactions, not normal use.~g;" \ +-pe "s~\{\{summary_getRawMemPool\}\}~returns all transaction identifiers (TXIDs) in the memory pool as a JSON array, or detailed information about each transaction in the memory pool as a JSON object.~g;" \ +-pe "s~\{\{summary_getRawTransaction\}\}~gets a hex-encoded serialized transaction or a JSON object describing the transaction. By default, Dash Core only stores complete transaction data for UTXOs and your own transactions, so the RPC may fail on historic transactions unless you use the non-default \`txindex=1\` in your Dash Core startup settings.~g;" \ +-pe "s~\{\{summary_getReceivedByAccount\}\}~returns the total amount received by addresses in a particular account from transactions with the specified number of confirmations. It does not count coinbase transactions.~g;" \ +-pe "s~\{\{summary_getReceivedByAddress\}\}~returns the total amount received by the specified address in transactions with the specified number of confirmations. It does not count coinbase transactions.~g;" \ +-pe "s~\{\{summary_getSpecialTxes\}\}~returns an array of special transactions found in the specified block~g;" \ +-pe "s~\{\{summary_getSpentInfo\}\}~returns the txid and index where an output is spent (requires \`spentindex\` to be enabled).~g;" \ +-pe "s~\{\{summary_getSuperblockBudget\}\}~returns the absolute maximum sum of superblock payments allowed.~g;" \ +-pe "s~\{\{summary_getTransaction\}\}~gets detailed information about an in-wallet transaction.~g;" \ +-pe "s~\{\{summary_getTxOut\}\}~returns details about an unspent transaction output (UTXO).~g;" \ +-pe "s~\{\{summary_getTxOutProof\}\}~returns a hex-encoded proof that one or more specified transactions were included in a block.~g;" \ +-pe "s~\{\{summary_getTxOutSetInfo\}\}~returns statistics about the confirmed unspent transaction output (UTXO) set. Note that this call may take some time and that it only counts outputs from confirmed transactions---it does not count outputs from the memory pool.~g;" \ +-pe "s~\{\{summary_getUnconfirmedBalance\}\}~returns the wallet's total unconfirmed balance.~g;" \ +-pe "s~\{\{summary_getWalletInfo\}\}~provides information about the wallet.~g;" \ +-pe "s~\{\{summary_getWork\}\}~was removed in Bitcoin Core 0.10.0. and is not part of Dash~g;" \ +-pe "s~\{\{summary_help\}\}~lists all available public RPC commands, or gets help for the specified RPC. Commands which are unavailable will not be listed, such as wallet RPCs if wallet support is disabled.~g;" \ +-pe "s~\{\{summary_importAddress\}\}~adds an address or pubkey script to the wallet without the associated private key, allowing you to watch for transactions affecting that address or pubkey script without being able to spend any of its outputs.~g;" \ +-pe "s~\{\{summary_importElectrumWallet\}\}~imports keys from an Electrum wallet export file (.csv or .json)~g;" \ +-pe "s~\{\{summary_importMulti\}\}~imports addresses or scripts (with private keys, public keys, or P2SH redeem scripts) and optionally performs the minimum necessary rescan for all imports.~g;" \ +-pe "s~\{\{summary_importPrivKey\}\}~adds a private key to your wallet. The key should be formatted in the wallet import format created by the \`dumpprivkey\` RPC.~g;" \ +-pe "s~\{\{summary_importPrunedFunds\}\}~imports funds without the need of a rescan. Meant for use with pruned wallets.~g;" \ +-pe "s~\{\{summary_importPubKey\}\}~imports a public key (in hex) that can be watched as if it were in your wallet but cannot be used to spend~g;" \ +-pe "s~\{\{summary_importWallet\}\}~imports private keys from a file in wallet dump file format (see the \`dumpwallet\` RPC). These keys will be added to the keys currently in the wallet. This call may need to rescan all or parts of the block chain for transactions affecting the newly-added keys, which may take several minutes.~g;" \ +-pe "s~\{\{summary_keepass\}\}~provides commands for configuring and managing KeePass authentication~g;" \ +-pe "s~\{\{summary_keyPoolRefill\}\}~fills the cache of unused pre-generated keys (the keypool).~g;" \ +-pe "s~\{\{summary_listAccounts\}\}~lists accounts and their balances.~g;" \ +-pe "s~\{\{summary_listAddressBalances\}\}~lists addresses of this wallet and their balances~g;" \ +-pe "s~\{\{summary_listAddressGroupings\}\}~lists groups of addresses that may have had their common ownership made public by common use as inputs in the same transaction or from being used as change from a previous transaction.~g;" \ +-pe "s~\{\{summary_listBanned\}\}~lists all banned IPs/Subnets.~g;" \ +-pe "s~\{\{summary_listLockUnspent\}\}~returns a list of temporarily unspendable (locked) outputs.~g;" \ +-pe "s~\{\{summary_listReceivedByAccount\}\}~lists the total number of dash received by each account.~g;" \ +-pe "s~\{\{summary_listReceivedByAddress\}\}~lists the total number of dash received by each address.~g;" \ +-pe "s~\{\{summary_listSinceBlock\}\}~gets all transactions affecting the wallet which have occurred since a particular block, plus the header hash of a block at a particular depth.~g;" \ +-pe "s~\{\{summary_listTransactions\}\}~returns the most recent transactions that affect the wallet.~g;" \ +-pe "s~\{\{summary_listUnspent\}\}~returns an array of unspent transaction outputs belonging to this wallet.~g;" \ +-pe "s~\{\{summary_listWallets\}\}~returns a list of currently loaded wallets.~g;" \ +-pe "s~\{\{summary_lockUnspent\}\}~temporarily locks or unlocks specified transaction outputs. A locked transaction output will not be chosen by automatic coin selection when spending dash. Locks are stored in memory only, so nodes start with zero locked outputs and the locked output list is always cleared when a node stops or fails.~g;" \ +-pe "s~\{\{summary_logging\}\}~gets and sets the logging configuration~g;" \ +-pe "s~\{\{summary_masternode\}\}~provides a set of commands for managing masternodes and displaying information about them.~g;" \ +-pe "s~\{\{summary_masternodeBroadcast\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_masternodeList\}\}~returns a list of masternodes in different modes.~g;" \ +-pe "s~\{\{summary_mnSync\}\}~returns the sync status, updates to the next step or resets it entirely.~g;" \ +-pe "s~\{\{summary_move\}\}~moves a specified amount from one account in your wallet to another using an off-block-chain transaction.~g;" \ +-pe "s~\{\{summary_ping-rpc\}\}~sends a P2P ping message to all connected nodes to measure ping time. Results are provided by the \`getpeerinfo\` RPC pingtime and pingwait fields as decimal seconds. The P2P \`ping\` message is handled in a queue with all other commands, so it measures processing backlog, not just network ping.~g;" \ +-pe "s~\{\{summary_preciousBlock\}\}~treats a block as if it were received before others with the same work.~g;" \ +-pe "s~\{\{summary_prioritiseTransaction\}\}~adds virtual priority or fee to a transaction, allowing it to be accepted into blocks mined by this node (or miners which use this node) with a lower priority or fee. (It can also remove virtual priority or fee, requiring the transaction have a higher priority or fee to be accepted into a locally-mined block.)~g;" \ +-pe "s~\{\{summary_privateSend\}\}~controls the mixing process.~g;" \ +-pe "s~\{\{summary_proTx\}\}~provides a set of commands to execute ProTx related actions.~g;" \ +-pe "s~\{\{summary_pruneBlockChain\}\}~prunes the blockchain up to a specified height or timestamp.~g;" \ +-pe "s~\{\{summary_quorum\}\}~provides a set of commands for quorums (LLMQs).~g;" \ +-pe "s~\{\{summary_removePrunedFunds\}\}~deletes the specified transaction from the wallet. Meant for use with pruned wallets and as a companion to importprunedfunds.~g;" \ +-pe "s~\{\{summary_restGetBlock-noTxDetails\}\}~gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block. The JSON object includes TXIDs for transactions within the block rather than the complete transactions [GET block][rest get block] returns.~g;" \ +-pe "s~\{\{summary_restGetBlock\}\}~gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block.~g;" \ +-pe "s~\{\{summary_restGetChainInfo\}\}~returns information about the current state of the block chain.~g;" \ +-pe "s~\{\{summary_restGetGetUtxos\}\}~returns an UTXO set given a set of outpoints.~g;" \ +-pe "s~\{\{summary_restGetHeaders\}\}~returns a specified amount of block headers in upward direction.~g;" \ +-pe "s~\{\{summary_restGetMemPool-contents\}\}~returns all transaction in the memory pool with detailed information.~g;" \ +-pe "s~\{\{summary_restGetMemPool-info\}\}~returns information about the node's current transaction memory pool.~g;" \ +-pe "s~\{\{summary_restGetTx\}\}~gets a hex-encoded serialized transaction or a JSON object describing the transaction. By default, Dash Core only stores complete transaction data for UTXOs and your own transactions, so this method may fail on historic transactions unless you use the non-default \`txindex=1\` in your Dash Core startup settings.~g;" \ +-pe "s~\{\{summary_sendFrom\}\}~spends an amount from a local account to a dash address.~g;" \ +-pe "s~\{\{summary_sendMany\}\}~creates and broadcasts a transaction which sends outputs to multiple addresses.~g;" \ +-pe "s~\{\{summary_sendRawTransaction\}\}~validates a transaction and broadcasts it to the peer-to-peer network.~g;" \ +-pe "s~\{\{summary_sendToAddress\}\}~spends an amount to a given address.~g;" \ +-pe "s~\{\{summary_sentinelPing\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_setAccount\}\}~puts the specified address in the given account.~g;" \ +-pe "s~\{\{summary_setBan\}\}~attempts add or remove a IP/Subnet from the banned list.~g;" \ +-pe "s~\{\{summary_setGenerate\}\}~was removed in Dash Core 0.12.3.~g;" \ +-pe "s~\{\{summary_setNetworkActive\}\}~disables/enables all P2P network activity.~g;" \ +-pe "s~\{\{summary_setPrivateSendAmount\}\}~sets the amount of DASH to be mixed with PrivateSend~g;" \ +-pe "s~\{\{summary_setPrivateSendRounds\}\}~sets the number of PrivateSend mixing rounds to use~g;" \ +-pe "s~\{\{summary_setTxFee\}\}~sets the transaction fee per kilobyte paid by transactions created by this wallet.~g;" \ +-pe "s~\{\{summary_signMessage\}\}~signs a message with the private key of an address.~g;" \ +-pe "s~\{\{summary_signMessageWithPrivKey\}\}~signs a message with a given private key.~g;" \ +-pe "s~\{\{summary_signRawTransaction\}\}~signs a transaction in the serialized transaction format using private keys stored in the wallet or provided in the call.~g;" \ +-pe "s~\{\{summary_spork-rpc\}\}~reads or updates spork settings on the network.~g;" \ +-pe "s~\{\{summary_stop\}\}~safely shuts down the Dash Core server.~g;" \ +-pe "s~\{\{summary_submitBlock\}\}~accepts a block, verifies it is a valid addition to the block chain, and broadcasts it to the network. Extra parameters are ignored by Dash Core but may be used by mining pools or other programs.~g;" \ +-pe "s~\{\{summary_uptime\}\}~returns the total uptime of the server.~g;" \ +-pe "s~\{\{summary_validateAddress\}\}~returns information about the given Dash address.~g;" \ +-pe "s~\{\{summary_verifyChain\}\}~verifies each entry in the local block chain database.~g;" \ +-pe "s~\{\{summary_verifyMessage\}\}~verifies a signed message.~g;" \ +-pe "s~\{\{summary_verifyTxOutProof\}\}~verifies that a proof points to one or more transactions in a block, returning the transactions the proof commits to and throwing an RPC error if the block is not in our best block chain.~g;" \ +-pe "s~\{\{summary_voteRaw\}\}~compiles and relays a governance vote with provided external signature instead of signing vote internally~g;" \ +-pe "s~\{\{summary_walletLock\}\}~removes the wallet encryption key from memory, locking the wallet. After calling this method, you will need to call \`walletpassphrase\` again before being able to call any methods which require the wallet to be unlocked.~g;" \ +-pe "s~\{\{summary_walletPassphrase\}\}~stores the wallet decryption key in memory for the indicated number of seconds. Issuing the \`walletpassphrase\` command while the wallet is already unlocked will set a new unlock time that overrides the old one.~g;" \ +-pe "s~\{\{summary_walletPassphraseChange\}\}~changes the wallet passphrase from 'old passphrase' to 'new passphrase'.~g;" diff --git a/scripts/applyvars.sh b/scripts/applyvars.sh new file mode 100755 index 00000000..e520f84e --- /dev/null +++ b/scripts/applyvars.sh @@ -0,0 +1,331 @@ +#!/usr/bin/env bash + +perl \ +-pe "s~\{\{DASH_NOT_IMPLEMENTED\}\}~**Not Implemented**~g;" \ +-pe "s~\{\{DASH_NEW0_14_1\}\}~**New in Dash Core 0.14.1**~g;" \ +-pe "s~\{\{DASH_UPDATED0_14_1\}\}~**Updated in Dash Core 0.14.1**~g;" \ +-pe "s~\{\{DASH_NEW0_14_0\}\}~**New in Dash Core 0.14.0**~g;" \ +-pe "s~\{\{DASH_UPDATED0_14_0\}\}~**Updated in Dash Core 0.14.0**~g;" \ +-pe "s~\{\{DASH_NEW0_13_2\}\}~**New in Dash Core 0.13.2**~g;" \ +-pe "s~\{\{DASH_UPDATED0_13_2\}\}~**Updated in Dash Core 0.13.2**~g;" \ +-pe "s~\{\{DASH_NEW0_13_1\}\}~**New in Dash Core 0.13.1**~g;" \ +-pe "s~\{\{DASH_UPDATED0_13_1\}\}~**Updated in Dash Core 0.13.1**~g;" \ +-pe "s~\{\{DASH_NEW0_13_0\}\}~**New in Dash Core 0.13.0**~g;" \ +-pe "s~\{\{DASH_UPDATED0_13_0\}\}~**Updated in Dash Core 0.13.0**~g;" \ +-pe "s~\{\{DASH_NEW0_12_3\}\}~*New in Dash Core 0.12.3*~g;" \ +-pe "s~\{\{DASH_UPDATED0_12_3\}\}~*Updated in Dash Core 0.12.3*~g;" \ +-pe "s~\{\{DASH_NEW0_12_2\}\}~*New in Dash Core 0.12.2*~g;" \ +-pe "s~\{\{DASH_UPDATED0_12_2\}\}~*Updated in Dash Core 0.12.2*~g;" \ +-pe "s~\{\{DASH_NEW0_12_1\}\}~*New in Dash Core 0.12.1*~g;" \ +-pe "s~\{\{DASH_UPDATED0_12_1\}\}~*Updated in Dash Core 0.12.1*~g;" \ +-pe "s~\{\{DARKCOIN_NEW0_11_0\}\}~*New in Darkcoin Core 0.11.0*~g;" \ +-pe "s~\{\{DARKCOIN_UPDATED0_11_0\}\}~*Updated in Darkcoin Core 0.11.0*~g;" \ +-pe "s~\{\{DEPRECATED\}\}~**Deprecated**~g;" \ +-pe "s~\{\{summary_abandonTransaction\}\}~marks an in-wallet transaction and all its in-wallet descendants as abandoned. This allows their inputs to be respent.~g;" \ +-pe "s~\{\{summary_abortRescan\}\}~Stops current wallet rescan~g;" \ +-pe "s~\{\{summary_addMultiSigAddress\}\}~adds a P2SH multisig address to the wallet.~g;" \ +-pe "s~\{\{summary_addNode\}\}~attempts to add or remove a node from the addnode list, or to try a connection to a node once.~g;" \ +-pe "s~\{\{summary_backupWallet\}\}~safely copies \`wallet.dat\` to the specified file, which can be a directory or a path with filename.~g;" \ +-pe "s~\{\{summary_bls\}\}~provides a set of commands to execute BLS-related actions.~g;" \ +-pe "s~\{\{summary_clearBanned\}\}~clears list of banned nodes.~g;" \ +-pe "s~\{\{summary_combineRawTransaction\}\}~combine multiple partially signed transactions into one transaction.~g;" \ +-pe "s~\{\{summary_createMultiSig\}\}~creates a P2SH multi-signature address.~g;" \ +-pe "s~\{\{summary_createRawTransaction\}\}~creates an unsigned serialized transaction that spends a previous output to a new output with a P2PKH or P2SH address. The transaction is not stored in the wallet or transmitted to the network.~g;" \ +-pe "s~\{\{summary_debug\}\}~changes the debug category from the console.~g;" \ +-pe "s~\{\{summary_decodeRawTransaction\}\}~decodes a serialized transaction hex string into a JSON object describing the transaction.~g;" \ +-pe "s~\{\{summary_decodeScript\}\}~decodes a hex-encoded P2SH redeem script.~g;" \ +-pe "s~\{\{summary_disconnectNode\}\}~immediately disconnects from a specified node.~g;" \ +-pe "s~\{\{summary_dumpHDInfo\}\}~returns an object containing sensitive private info about this HD wallet~g;" \ +-pe "s~\{\{summary_dumpPrivKey\}\}~returns the wallet-import-format (WIP) private key corresponding to an address. (But does not remove it from the wallet.)~g;" \ +-pe "s~\{\{summary_dumpWallet\}\}~creates or overwrites a file with all wallet keys in a human-readable format.~g;" \ +-pe "s~\{\{summary_encryptWallet\}\}~encrypts the wallet with a passphrase. This is only to enable encryption for the first time. After encryption is enabled, you will need to enter the passphrase to use private keys.~g;" \ +-pe "s~\{\{summary_estimateFee\}\}~estimates the transaction fee per kilobyte that needs to be paid for a transaction to begin confirmation within a certain number of blocks.~g;" \ +-pe "s~\{\{summary_estimatePriority\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_estimateSmartFee\}\}~estimates the transaction fee per kilobyte that needs to be paid for a transaction to begin confirmation within a certain number of blocks and returns the number of blocks for which the estimate is valid.~g;" \ +-pe "s~\{\{summary_estimateSmartPriority\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_fundRawTransaction\}\}~adds inputs to a transaction until it has enough in value to meet its out value.~g;" \ +-pe "s~\{\{summary_gObject\}\}~provides a set of commands for managing governance objects and displaying information about them.~g;" \ +-pe "s~\{\{summary_generate\}\}~mines blocks immediately (before the RPC call returns).~g;" \ +-pe "s~\{\{summary_generateToAddress\}\}~mines blocks immediately to a specified address.~g;" \ +-pe "s~\{\{summary_getAccount\}\}~returns the name of the account associated with the given address.~g;" \ +-pe "s~\{\{summary_getAccountAddress\}\}~returns the current Dash address for receiving payments to this account. If the account doesn't exist, it creates both the account and a new address for receiving payment. Once a payment has been received to an address, future calls to this RPC for the same account will return a different address.~g;" \ +-pe "s~\{\{summary_getAddedNodeInfo\}\}~returns information about the given added node, or all added nodes (except onetry nodes). Only nodes which have been manually added using the \`addnode\` RPC will have their information displayed.~g;" \ +-pe "s~\{\{summary_getAddressBalance\}\}~returns the balance for address(es).~g;" \ +-pe "s~\{\{summary_getAddressDeltas\}\}~returns all changes for an address.~g;" \ +-pe "s~\{\{summary_getAddressMempool\}\}~returns all mempool deltas for an address.~g;" \ +-pe "s~\{\{summary_getAddressTxids\}\}~returns the txids for an address(es).~g;" \ +-pe "s~\{\{summary_getAddressUtxos\}\}~returns all unspent outputs for an address.~g;" \ +-pe "s~\{\{summary_getAddressesByAccount\}\}~returns a list of every address assigned to a particular account.~g;" \ +-pe "s~\{\{summary_getBalance\}\}~gets the balance in decimal dash across all accounts or for a particular account.~g;" \ +-pe "s~\{\{summary_getBestBlockHash\}\}~returns the header hash of the most recent block on the best block chain.~g;" \ +-pe "s~\{\{summary_getBestChainLock\}\}~returns the block hash of the best chainlock.~g;" \ +-pe "s~\{\{summary_getBlock\}\}~gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block.~g;" \ +-pe "s~\{\{summary_getBlockChainInfo\}\}~provides information about the current state of the block chain.~g;" \ +-pe "s~\{\{summary_getBlockCount\}\}~returns the number of blocks in the local best block chain.~g;" \ +-pe "s~\{\{summary_getBlockHash\}\}~returns the header hash of a block at the given height in the local best block chain.~g;" \ +-pe "s~\{\{summary_getBlockHashes\}\}~returns array of hashes of blocks within the timestamp range provided (requires \`timestampindex\` to be enabled).~g;" \ +-pe "s~\{\{summary_getBlockHeader\}\}~gets a block header with a particular header hash from the local block database either as a JSON object or as a serialized block header.~g;" \ +-pe "s~\{\{summary_getBlockHeaders\}\}~returns an array of items with information about the requested number of blockheaders starting from the requested hash.~g;" \ +-pe "s~\{\{summary_getBlockStats\}\}~computes per block statistics for a given window.~g;" \ +-pe "s~\{\{summary_getBlockTemplate\}\}~gets a block template or proposal for use with mining software.~g;" \ +-pe "s~\{\{summary_getChainTips\}\}~returns information about the highest-height block (tip) of each local block chain.~g;" \ +-pe "s~\{\{summary_getChainTxStats\}\}~compute statistics about the total number and rate of transactions in the chain.~g;" \ +-pe "s~\{\{summary_getConnectionCount\}\}~returns the number of connections to other nodes.~g;" \ +-pe "s~\{\{summary_getDifficulty\}\}~returns the proof-of-work difficulty as a multiple of the minimum difficulty.~g;" \ +-pe "s~\{\{summary_getGenerate\}\}~was removed in Dash Core 0.12.3.~g;" \ +-pe "s~\{\{summary_getGovernanceInfo\}\}~returns an object containing governance parameters.~g;" \ +-pe "s~\{\{summary_getHashesPerSec\}\}~was removed in Bitcoin Core 0.11.0 and is not part of Dash.~g;" \ +-pe "s~\{\{summary_getInfo\}\}~prints various information about the node and the network.~g;" \ +-pe "s~\{\{summary_getMemPoolAncestors\}\}~returns all in-mempool ancestors for a transaction in the mempool.~g;" \ +-pe "s~\{\{summary_getMemPoolDescendants\}\}~returns all in-mempool descendants for a transaction in the mempool.~g;" \ +-pe "s~\{\{summary_getMemPoolEntry\}\}~returns mempool data for given transaction (must be in mempool).~g;" \ +-pe "s~\{\{summary_getMemPoolInfo\}\}~returns information about the node's current transaction memory pool.~g;" \ +-pe "s~\{\{summary_getMemoryInfo\}\}~returns information about memory usage.~g;" \ +-pe "s~\{\{summary_getMerkleBlocks\}\}~returns an array of hex-encoded merkleblocks for blocks starting from which match .~g;" \ +-pe "s~\{\{summary_getMiningInfo\}\}~returns various mining-related information.~g;" \ +-pe "s~\{\{summary_getNetTotals\}\}~returns information about network traffic, including bytes in, bytes out, and the current time.~g;" \ +-pe "s~\{\{summary_getNetworkHashPS\}\}~returns the estimated network hashes per second based on the last n blocks.~g;" \ +-pe "s~\{\{summary_getNetworkInfo\}\}~returns information about the node's connection to the network.~g;" \ +-pe "s~\{\{summary_getNewAddress\}\}~returns a new Dash address for receiving payments. If an account is specified, payments received with the address will be credited to that account.~g;" \ +-pe "s~\{\{summary_getPeerInfo\}\}~returns data about each connected network node.~g;" \ +-pe "s~\{\{summary_getPoolInfo\}\}~returns an object containing mixing pool related information.~g;" \ +-pe "s~\{\{summary_getRawChangeAddress\}\}~returns a new Dash address for receiving change. This is for use with raw transactions, not normal use.~g;" \ +-pe "s~\{\{summary_getRawMemPool\}\}~returns all transaction identifiers (TXIDs) in the memory pool as a JSON array, or detailed information about each transaction in the memory pool as a JSON object.~g;" \ +-pe "s~\{\{summary_getRawTransaction\}\}~gets a hex-encoded serialized transaction or a JSON object describing the transaction. By default, Dash Core only stores complete transaction data for UTXOs and your own transactions, so the RPC may fail on historic transactions unless you use the non-default \`txindex=1\` in your Dash Core startup settings.~g;" \ +-pe "s~\{\{summary_getReceivedByAccount\}\}~returns the total amount received by addresses in a particular account from transactions with the specified number of confirmations. It does not count coinbase transactions.~g;" \ +-pe "s~\{\{summary_getReceivedByAddress\}\}~returns the total amount received by the specified address in transactions with the specified number of confirmations. It does not count coinbase transactions.~g;" \ +-pe "s~\{\{summary_getSpecialTxes\}\}~returns an array of special transactions found in the specified block~g;" \ +-pe "s~\{\{summary_getSpentInfo\}\}~returns the txid and index where an output is spent (requires \`spentindex\` to be enabled).~g;" \ +-pe "s~\{\{summary_getSuperblockBudget\}\}~returns the absolute maximum sum of superblock payments allowed.~g;" \ +-pe "s~\{\{summary_getTransaction\}\}~gets detailed information about an in-wallet transaction.~g;" \ +-pe "s~\{\{summary_getTxOut\}\}~returns details about an unspent transaction output (UTXO).~g;" \ +-pe "s~\{\{summary_getTxOutProof\}\}~returns a hex-encoded proof that one or more specified transactions were included in a block.~g;" \ +-pe "s~\{\{summary_getTxOutSetInfo\}\}~returns statistics about the confirmed unspent transaction output (UTXO) set. Note that this call may take some time and that it only counts outputs from confirmed transactions---it does not count outputs from the memory pool.~g;" \ +-pe "s~\{\{summary_getUnconfirmedBalance\}\}~returns the wallet's total unconfirmed balance.~g;" \ +-pe "s~\{\{summary_getWalletInfo\}\}~provides information about the wallet.~g;" \ +-pe "s~\{\{summary_getWork\}\}~was removed in Bitcoin Core 0.10.0. and is not part of Dash~g;" \ +-pe "s~\{\{summary_help\}\}~lists all available public RPC commands, or gets help for the specified RPC. Commands which are unavailable will not be listed, such as wallet RPCs if wallet support is disabled.~g;" \ +-pe "s~\{\{summary_importAddress\}\}~adds an address or pubkey script to the wallet without the associated private key, allowing you to watch for transactions affecting that address or pubkey script without being able to spend any of its outputs.~g;" \ +-pe "s~\{\{summary_importElectrumWallet\}\}~imports keys from an Electrum wallet export file (.csv or .json)~g;" \ +-pe "s~\{\{summary_importMulti\}\}~imports addresses or scripts (with private keys, public keys, or P2SH redeem scripts) and optionally performs the minimum necessary rescan for all imports.~g;" \ +-pe "s~\{\{summary_importPrivKey\}\}~adds a private key to your wallet. The key should be formatted in the wallet import format created by the \`dumpprivkey\` RPC.~g;" \ +-pe "s~\{\{summary_importPrunedFunds\}\}~imports funds without the need of a rescan. Meant for use with pruned wallets.~g;" \ +-pe "s~\{\{summary_importPubKey\}\}~imports a public key (in hex) that can be watched as if it were in your wallet but cannot be used to spend~g;" \ +-pe "s~\{\{summary_importWallet\}\}~imports private keys from a file in wallet dump file format (see the \`dumpwallet\` RPC). These keys will be added to the keys currently in the wallet. This call may need to rescan all or parts of the block chain for transactions affecting the newly-added keys, which may take several minutes.~g;" \ +-pe "s~\{\{summary_keepass\}\}~provides commands for configuring and managing KeePass authentication~g;" \ +-pe "s~\{\{summary_keyPoolRefill\}\}~fills the cache of unused pre-generated keys (the keypool).~g;" \ +-pe "s~\{\{summary_listAccounts\}\}~lists accounts and their balances.~g;" \ +-pe "s~\{\{summary_listAddressBalances\}\}~lists addresses of this wallet and their balances~g;" \ +-pe "s~\{\{summary_listAddressGroupings\}\}~lists groups of addresses that may have had their common ownership made public by common use as inputs in the same transaction or from being used as change from a previous transaction.~g;" \ +-pe "s~\{\{summary_listBanned\}\}~lists all banned IPs/Subnets.~g;" \ +-pe "s~\{\{summary_listLockUnspent\}\}~returns a list of temporarily unspendable (locked) outputs.~g;" \ +-pe "s~\{\{summary_listReceivedByAccount\}\}~lists the total number of dash received by each account.~g;" \ +-pe "s~\{\{summary_listReceivedByAddress\}\}~lists the total number of dash received by each address.~g;" \ +-pe "s~\{\{summary_listSinceBlock\}\}~gets all transactions affecting the wallet which have occurred since a particular block, plus the header hash of a block at a particular depth.~g;" \ +-pe "s~\{\{summary_listTransactions\}\}~returns the most recent transactions that affect the wallet.~g;" \ +-pe "s~\{\{summary_listUnspent\}\}~returns an array of unspent transaction outputs belonging to this wallet.~g;" \ +-pe "s~\{\{summary_listWallets\}\}~returns a list of currently loaded wallets.~g;" \ +-pe "s~\{\{summary_lockUnspent\}\}~temporarily locks or unlocks specified transaction outputs. A locked transaction output will not be chosen by automatic coin selection when spending dash. Locks are stored in memory only, so nodes start with zero locked outputs and the locked output list is always cleared when a node stops or fails.~g;" \ +-pe "s~\{\{summary_logging\}\}~gets and sets the logging configuration~g;" \ +-pe "s~\{\{summary_masternode\}\}~provides a set of commands for managing masternodes and displaying information about them.~g;" \ +-pe "s~\{\{summary_masternodeBroadcast\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_masternodeList\}\}~returns a list of masternodes in different modes.~g;" \ +-pe "s~\{\{summary_mnSync\}\}~returns the sync status, updates to the next step or resets it entirely.~g;" \ +-pe "s~\{\{summary_move\}\}~moves a specified amount from one account in your wallet to another using an off-block-chain transaction.~g;" \ +-pe "s~\{\{summary_ping-rpc\}\}~sends a P2P ping message to all connected nodes to measure ping time. Results are provided by the \`getpeerinfo\` RPC pingtime and pingwait fields as decimal seconds. The P2P \`ping\` message is handled in a queue with all other commands, so it measures processing backlog, not just network ping.~g;" \ +-pe "s~\{\{summary_preciousBlock\}\}~treats a block as if it were received before others with the same work.~g;" \ +-pe "s~\{\{summary_prioritiseTransaction\}\}~adds virtual priority or fee to a transaction, allowing it to be accepted into blocks mined by this node (or miners which use this node) with a lower priority or fee. (It can also remove virtual priority or fee, requiring the transaction have a higher priority or fee to be accepted into a locally-mined block.)~g;" \ +-pe "s~\{\{summary_privateSend\}\}~controls the mixing process.~g;" \ +-pe "s~\{\{summary_proTx\}\}~provides a set of commands to execute ProTx related actions.~g;" \ +-pe "s~\{\{summary_pruneBlockChain\}\}~prunes the blockchain up to a specified height or timestamp.~g;" \ +-pe "s~\{\{summary_quorum\}\}~provides a set of commands for quorums (LLMQs).~g;" \ +-pe "s~\{\{summary_removePrunedFunds\}\}~deletes the specified transaction from the wallet. Meant for use with pruned wallets and as a companion to importprunedfunds.~g;" \ +-pe "s~\{\{summary_restGetBlock-noTxDetails\}\}~gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block. The JSON object includes TXIDs for transactions within the block rather than the complete transactions [GET block][rest get block] returns.~g;" \ +-pe "s~\{\{summary_restGetBlock\}\}~gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block.~g;" \ +-pe "s~\{\{summary_restGetChainInfo\}\}~returns information about the current state of the block chain.~g;" \ +-pe "s~\{\{summary_restGetGetUtxos\}\}~returns an UTXO set given a set of outpoints.~g;" \ +-pe "s~\{\{summary_restGetHeaders\}\}~returns a specified amount of block headers in upward direction.~g;" \ +-pe "s~\{\{summary_restGetMemPool-contents\}\}~returns all transaction in the memory pool with detailed information.~g;" \ +-pe "s~\{\{summary_restGetMemPool-info\}\}~returns information about the node's current transaction memory pool.~g;" \ +-pe "s~\{\{summary_restGetTx\}\}~gets a hex-encoded serialized transaction or a JSON object describing the transaction. By default, Dash Core only stores complete transaction data for UTXOs and your own transactions, so this method may fail on historic transactions unless you use the non-default \`txindex=1\` in your Dash Core startup settings.~g;" \ +-pe "s~\{\{summary_sendFrom\}\}~spends an amount from a local account to a dash address.~g;" \ +-pe "s~\{\{summary_sendMany\}\}~creates and broadcasts a transaction which sends outputs to multiple addresses.~g;" \ +-pe "s~\{\{summary_sendRawTransaction\}\}~validates a transaction and broadcasts it to the peer-to-peer network.~g;" \ +-pe "s~\{\{summary_sendToAddress\}\}~spends an amount to a given address.~g;" \ +-pe "s~\{\{summary_sentinelPing\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_setAccount\}\}~puts the specified address in the given account.~g;" \ +-pe "s~\{\{summary_setBan\}\}~attempts add or remove a IP/Subnet from the banned list.~g;" \ +-pe "s~\{\{summary_setGenerate\}\}~was removed in Dash Core 0.12.3.~g;" \ +-pe "s~\{\{summary_setNetworkActive\}\}~disables/enables all P2P network activity.~g;" \ +-pe "s~\{\{summary_setPrivateSendAmount\}\}~sets the amount of DASH to be mixed with PrivateSend~g;" \ +-pe "s~\{\{summary_setPrivateSendRounds\}\}~sets the number of PrivateSend mixing rounds to use~g;" \ +-pe "s~\{\{summary_setTxFee\}\}~sets the transaction fee per kilobyte paid by transactions created by this wallet.~g;" \ +-pe "s~\{\{summary_signMessage\}\}~signs a message with the private key of an address.~g;" \ +-pe "s~\{\{summary_signMessageWithPrivKey\}\}~signs a message with a given private key.~g;" \ +-pe "s~\{\{summary_signRawTransaction\}\}~signs a transaction in the serialized transaction format using private keys stored in the wallet or provided in the call.~g;" \ +-pe "s~\{\{summary_spork-rpc\}\}~reads or updates spork settings on the network.~g;" \ +-pe "s~\{\{summary_stop\}\}~safely shuts down the Dash Core server.~g;" \ +-pe "s~\{\{summary_submitBlock\}\}~accepts a block, verifies it is a valid addition to the block chain, and broadcasts it to the network. Extra parameters are ignored by Dash Core but may be used by mining pools or other programs.~g;" \ +-pe "s~\{\{summary_uptime\}\}~returns the total uptime of the server.~g;" \ +-pe "s~\{\{summary_validateAddress\}\}~returns information about the given Dash address.~g;" \ +-pe "s~\{\{summary_verifyChain\}\}~verifies each entry in the local block chain database.~g;" \ +-pe "s~\{\{summary_verifyMessage\}\}~verifies a signed message.~g;" \ +-pe "s~\{\{summary_verifyTxOutProof\}\}~verifies that a proof points to one or more transactions in a block, returning the transactions the proof commits to and throwing an RPC error if the block is not in our best block chain.~g;" \ +-pe "s~\{\{summary_voteRaw\}\}~compiles and relays a governance vote with provided external signature instead of signing vote internally~g;" \ +-pe "s~\{\{summary_walletLock\}\}~removes the wallet encryption key from memory, locking the wallet. After calling this method, you will need to call \`walletpassphrase\` again before being able to call any methods which require the wallet to be unlocked.~g;" \ +-pe "s~\{\{summary_walletPassphrase\}\}~stores the wallet decryption key in memory for the indicated number of seconds. Issuing the \`walletpassphrase\` command while the wallet is already unlocked will set a new unlock time that overrides the old one.~g;" \ +-pe "s~\{\{summary_walletPassphraseChange\}\}~changes the wallet passphrase from 'old passphrase' to 'new passphrase'.~g;" \ +-pe "s~\{\{summary_clearBanned\}\}~clears list of banned nodes.~g;" \ +-pe "s~\{\{summary_getMerkleBlocks\}\}~returns an array of hex-encoded merkleblocks for blocks starting from which match .~g;" \ +-pe "s~\{\{summary_getAddressUtxos\}\}~returns all unspent outputs for an address.~g;" \ +-pe "s~\{\{summary_getMemPoolEntry\}\}~returns mempool data for given transaction (must be in mempool).~g;" \ +-pe "s~\{\{summary_proTx\}\}~provides a set of commands to execute ProTx related actions.~g;" \ +-pe "s~\{\{summary_getChainTips\}\}~returns information about the highest-height block (tip) of each local block chain.~g;" \ +-pe "s~\{\{summary_getAddressTxids\}\}~returns the txids for an address(es).~g;" \ +-pe "s~\{\{summary_quorum\}\}~provides a set of commands for quorums (LLMQs).~g;" \ +-pe "s~\{\{summary_getMemoryInfo\}\}~returns information about memory usage.~g;" \ +-pe "s~\{\{summary_generateToAddress\}\}~mines blocks immediately to a specified address.~g;" \ +-pe "s~\{\{summary_getTxOutProof\}\}~returns a hex-encoded proof that one or more specified transactions were included in a block.~g;" \ +-pe "s~\{\{summary_getUnconfirmedBalance\}\}~returns the wallet's total unconfirmed balance.~g;" \ +-pe "s~\{\{summary_getNetTotals\}\}~returns information about network traffic, including bytes in, bytes out, and the current time.~g;" \ +-pe "s~\{\{summary_listReceivedByAddress\}\}~lists the total number of dash received by each address.~g;" \ +-pe "s~\{\{summary_getBlockHeader\}\}~gets a block header with a particular header hash from the local block database either as a JSON object or as a serialized block header.~g;" \ +-pe "s~\{\{summary_combineRawTransaction\}\}~combine multiple partially signed transactions into one transaction.~g;" \ +-pe "s~\{\{summary_addMultiSigAddress\}\}~adds a P2SH multisig address to the wallet.~g;" \ +-pe "s~\{\{summary_verifyTxOutProof\}\}~verifies that a proof points to one or more transactions in a block, returning the transactions the proof commits to and throwing an RPC error if the block is not in our best block chain.~g;" \ +-pe "s~\{\{summary_getReceivedByAddress\}\}~returns the total amount received by the specified address in transactions with the specified number of confirmations. It does not count coinbase transactions.~g;" \ +-pe "s~\{\{summary_removePrunedFunds\}\}~deletes the specified transaction from the wallet. Meant for use with pruned wallets and as a companion to importprunedfunds.~g;" \ +-pe "s~\{\{summary_getChainTxStats\}\}~compute statistics about the total number and rate of transactions in the chain.~g;" \ +-pe "s~\{\{summary_getTxOutSetInfo\}\}~returns statistics about the confirmed unspent transaction output (UTXO) set. Note that this call may take some time and that it only counts outputs from confirmed transactions---it does not count outputs from the memory pool.~g;" \ +-pe "s~\{\{summary_listWallets\}\}~returns a list of currently loaded wallets.~g;" \ +-pe "s~\{\{summary_sendMany\}\}~creates and broadcasts a transaction which sends outputs to multiple addresses.~g;" \ +-pe "s~\{\{summary_dumpHDInfo\}\}~returns an object containing sensitive private info about this HD wallet~g;" \ +-pe "s~\{\{summary_fundRawTransaction\}\}~adds inputs to a transaction until it has enough in value to meet its out value.~g;" \ +-pe "s~\{\{summary_importPrivKey\}\}~adds a private key to your wallet. The key should be formatted in the wallet import format created by the \`dumpprivkey\` RPC.~g;" \ +-pe "s~\{\{summary_verifyMessage\}\}~verifies a signed message.~g;" \ +-pe "s~\{\{summary_abandonTransaction\}\}~marks an in-wallet transaction and all its in-wallet descendants as abandoned. This allows their inputs to be respent.~g;" \ +-pe "s~\{\{summary_getBestChainLock\}\}~returns the block hash of the best chainlock.~g;" \ +-pe "s~\{\{summary_decodeRawTransaction\}\}~decodes a serialized transaction hex string into a JSON object describing the transaction.~g;" \ +-pe "s~\{\{summary_createRawTransaction\}\}~creates an unsigned serialized transaction that spends a previous output to a new output with a P2PKH or P2SH address. The transaction is not stored in the wallet or transmitted to the network.~g;" \ +-pe "s~\{\{summary_encryptWallet\}\}~encrypts the wallet with a passphrase. This is only to enable encryption for the first time. After encryption is enabled, you will need to enter the passphrase to use private keys.~g;" \ +-pe "s~\{\{summary_uptime\}\}~returns the total uptime of the server.~g;" \ +-pe "s~\{\{summary_estimateFee\}\}~estimates the transaction fee per kilobyte that needs to be paid for a transaction to begin confirmation within a certain number of blocks.~g;" \ +-pe "s~\{\{summary_voteRaw\}\}~compiles and relays a governance vote with provided external signature instead of signing vote internally~g;" \ +-pe "s~\{\{summary_pruneBlockChain\}\}~prunes the blockchain up to a specified height or timestamp.~g;" \ +-pe "s~\{\{summary_estimateSmartFee\}\}~estimates the transaction fee per kilobyte that needs to be paid for a transaction to begin confirmation within a certain number of blocks and returns the number of blocks for which the estimate is valid.~g;" \ +-pe "s~\{\{summary_getHashesPerSec\}\}~was removed in Bitcoin Core 0.11.0 and is not part of Dash.~g;" \ +-pe "s~\{\{summary_generate\}\}~mines blocks immediately (before the RPC call returns).~g;" \ +-pe "s~\{\{summary_listAccounts\}\}~lists accounts and their balances.~g;" \ +-pe "s~\{\{summary_getReceivedByAccount\}\}~returns the total amount received by addresses in a particular account from transactions with the specified number of confirmations. It does not count coinbase transactions.~g;" \ +-pe "s~\{\{summary_getAddressDeltas\}\}~returns all changes for an address.~g;" \ +-pe "s~\{\{summary_gObject\}\}~provides a set of commands for managing governance objects and displaying information about them.~g;" \ +-pe "s~\{\{summary_sendToAddress\}\}~spends an amount to a given address.~g;" \ +-pe "s~\{\{summary_debug\}\}~changes the debug category from the console.~g;" \ +-pe "s~\{\{summary_prioritiseTransaction\}\}~adds virtual priority or fee to a transaction, allowing it to be accepted into blocks mined by this node (or miners which use this node) with a lower priority or fee. (It can also remove virtual priority or fee, requiring the transaction have a higher priority or fee to be accepted into a locally-mined block.)~g;" \ +-pe "s~\{\{summary_ping-rpc\}\}~sends a P2P ping message to all connected nodes to measure ping time. Results are provided by the \`getpeerinfo\` RPC pingtime and pingwait fields as decimal seconds. The P2P \`ping\` message is handled in a queue with all other commands, so it measures processing backlog, not just network ping.~g;" \ +-pe "s~\{\{summary_getMemPoolAncestors\}\}~returns all in-mempool ancestors for a transaction in the mempool.~g;" \ +-pe "s~\{\{summary_listUnspent\}\}~returns an array of unspent transaction outputs belonging to this wallet.~g;" \ +-pe "s~\{\{summary_getSuperblockBudget\}\}~returns the absolute maximum sum of superblock payments allowed.~g;" \ +-pe "s~\{\{summary_signRawTransaction\}\}~signs a transaction in the serialized transaction format using private keys stored in the wallet or provided in the call.~g;" \ +-pe "s~\{\{summary_logging\}\}~gets and sets the logging configuration~g;" \ +-pe "s~\{\{summary_decodeScript\}\}~decodes a hex-encoded P2SH redeem script.~g;" \ +-pe "s~\{\{summary_getAccount\}\}~returns the name of the account associated with the given address.~g;" \ +-pe "s~\{\{summary_listTransactions\}\}~returns the most recent transactions that affect the wallet.~g;" \ +-pe "s~\{\{summary_move\}\}~moves a specified amount from one account in your wallet to another using an off-block-chain transaction.~g;" \ +-pe "s~\{\{summary_listAddressGroupings\}\}~lists groups of addresses that may have had their common ownership made public by common use as inputs in the same transaction or from being used as change from a previous transaction.~g;" \ +-pe "s~\{\{summary_verifyChain\}\}~verifies each entry in the local block chain database.~g;" \ +-pe "s~\{\{summary_getWalletInfo\}\}~provides information about the wallet.~g;" \ +-pe "s~\{\{summary_getPeerInfo\}\}~returns data about each connected network node.~g;" \ +-pe "s~\{\{summary_signMessage\}\}~signs a message with the private key of an address.~g;" \ +-pe "s~\{\{summary_listReceivedByAccount\}\}~lists the total number of dash received by each account.~g;" \ +-pe "s~\{\{summary_importElectrumWallet\}\}~imports keys from an Electrum wallet export file (.csv or .json)~g;" \ +-pe "s~\{\{summary_getBlockChainInfo\}\}~provides information about the current state of the block chain.~g;" \ +-pe "s~\{\{summary_masternodeBroadcast\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_listBanned\}\}~lists all banned IPs/Subnets.~g;" \ +-pe "s~\{\{summary_importMulti\}\}~imports addresses or scripts (with private keys, public keys, or P2SH redeem scripts) and optionally performs the minimum necessary rescan for all imports.~g;" \ +-pe "s~\{\{summary_getInfo\}\}~prints various information about the node and the network.~g;" \ +-pe "s~\{\{summary_setNetworkActive\}\}~disables/enables all P2P network activity.~g;" \ +-pe "s~\{\{summary_help\}\}~lists all available public RPC commands, or gets help for the specified RPC. Commands which are unavailable will not be listed, such as wallet RPCs if wallet support is disabled.~g;" \ +-pe "s~\{\{summary_validateAddress\}\}~returns information about the given Dash address.~g;" \ +-pe "s~\{\{summary_sendFrom\}\}~spends an amount from a local account to a dash address.~g;" \ +-pe "s~\{\{summary_keepass\}\}~provides commands for configuring and managing KeePass authentication~g;" \ +-pe "s~\{\{summary_getWork\}\}~was removed in Bitcoin Core 0.10.0. and is not part of Dash~g;" \ +-pe "s~\{\{summary_getGenerate\}\}~was removed in Dash Core 0.12.3.~g;" \ +-pe "s~\{\{summary_importWallet\}\}~imports private keys from a file in wallet dump file format (see the \`dumpwallet\` RPC). These keys will be added to the keys currently in the wallet. This call may need to rescan all or parts of the block chain for transactions affecting the newly-added keys, which may take several minutes.~g;" \ +-pe "s~\{\{summary_listSinceBlock\}\}~gets all transactions affecting the wallet which have occurred since a particular block, plus the header hash of a block at a particular depth.~g;" \ +-pe "s~\{\{summary_getBlockCount\}\}~returns the number of blocks in the local best block chain.~g;" \ +-pe "s~\{\{summary_getAddressBalance\}\}~returns the balance for address(es).~g;" \ +-pe "s~\{\{summary_getBalance\}\}~gets the balance in decimal dash across all accounts or for a particular account.~g;" \ +-pe "s~\{\{summary_getAddressesByAccount\}\}~returns a list of every address assigned to a particular account.~g;" \ +-pe "s~\{\{summary_getBlockTemplate\}\}~gets a block template or proposal for use with mining software.~g;" \ +-pe "s~\{\{summary_estimateSmartPriority\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_getRawMemPool\}\}~returns all transaction identifiers (TXIDs) in the memory pool as a JSON array, or detailed information about each transaction in the memory pool as a JSON object.~g;" \ +-pe "s~\{\{summary_getBlockHash\}\}~returns the header hash of a block at the given height in the local best block chain.~g;" \ +-pe "s~\{\{summary_setTxFee\}\}~sets the transaction fee per kilobyte paid by transactions created by this wallet.~g;" \ +-pe "s~\{\{summary_importPrunedFunds\}\}~imports funds without the need of a rescan. Meant for use with pruned wallets.~g;" \ +-pe "s~\{\{summary_getNewAddress\}\}~returns a new Dash address for receiving payments. If an account is specified, payments received with the address will be credited to that account.~g;" \ +-pe "s~\{\{summary_getBlock\}\}~gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block.~g;" \ +-pe "s~\{\{summary_getMemPoolInfo\}\}~returns information about the node's current transaction memory pool.~g;" \ +-pe "s~\{\{summary_abortRescan\}\}~Stops current wallet rescan~g;" \ +-pe "s~\{\{summary_getTransaction\}\}~gets detailed information about an in-wallet transaction.~g;" \ +-pe "s~\{\{summary_getAccountAddress\}\}~returns the current Dash address for receiving payments to this account. If the account doesn't exist, it creates both the account and a new address for receiving payment. Once a payment has been received to an address, future calls to this RPC for the same account will return a different address.~g;" \ +-pe "s~\{\{summary_dumpWallet\}\}~creates or overwrites a file with all wallet keys in a human-readable format.~g;" \ +-pe "s~\{\{summary_setPrivateSendAmount\}\}~sets the amount of DASH to be mixed with PrivateSend~g;" \ +-pe "s~\{\{summary_stop\}\}~safely shuts down the Dash Core server.~g;" \ +-pe "s~\{\{summary_masternodeList\}\}~returns a list of masternodes in different modes.~g;" \ +-pe "s~\{\{summary_getSpecialTxes\}\}~returns an array of special transactions found in the specified block~g;" \ +-pe "s~\{\{summary_getPoolInfo\}\}~returns an object containing mixing pool related information.~g;" \ +-pe "s~\{\{summary_getDifficulty\}\}~returns the proof-of-work difficulty as a multiple of the minimum difficulty.~g;" \ +-pe "s~\{\{summary_preciousBlock\}\}~treats a block as if it were received before others with the same work.~g;" \ +-pe "s~\{\{summary_getRawTransaction\}\}~gets a hex-encoded serialized transaction or a JSON object describing the transaction. By default, Dash Core only stores complete transaction data for UTXOs and your own transactions, so the RPC may fail on historic transactions unless you use the non-default \`txindex=1\` in your Dash Core startup settings.~g;" \ +-pe "s~\{\{summary_getMemPoolDescendants\}\}~returns all in-mempool descendants for a transaction in the mempool.~g;" \ +-pe "s~\{\{summary_getBlockHeaders\}\}~returns an array of items with information about the requested number of blockheaders starting from the requested hash.~g;" \ +-pe "s~\{\{summary_getConnectionCount\}\}~returns the number of connections to other nodes.~g;" \ +-pe "s~\{\{summary_listLockUnspent\}\}~returns a list of temporarily unspendable (locked) outputs.~g;" \ +-pe "s~\{\{summary_walletLock\}\}~removes the wallet encryption key from memory, locking the wallet. After calling this method, you will need to call \`walletpassphrase\` again before being able to call any methods which require the wallet to be unlocked.~g;" \ +-pe "s~\{\{summary_createMultiSig\}\}~creates a P2SH multi-signature address.~g;" \ +-pe "s~\{\{summary_getAddedNodeInfo\}\}~returns information about the given added node, or all added nodes (except onetry nodes). Only nodes which have been manually added using the \`addnode\` RPC will have their information displayed.~g;" \ +-pe "s~\{\{summary_getSpentInfo\}\}~returns the txid and index where an output is spent (requires \`spentindex\` to be enabled).~g;" \ +-pe "s~\{\{summary_importAddress\}\}~adds an address or pubkey script to the wallet without the associated private key, allowing you to watch for transactions affecting that address or pubkey script without being able to spend any of its outputs.~g;" \ +-pe "s~\{\{summary_submitBlock\}\}~accepts a block, verifies it is a valid addition to the block chain, and broadcasts it to the network. Extra parameters are ignored by Dash Core but may be used by mining pools or other programs.~g;" \ +-pe "s~\{\{summary_getMiningInfo\}\}~returns various mining-related information.~g;" \ +-pe "s~\{\{summary_getNetworkHashPS\}\}~returns the estimated network hashes per second based on the last n blocks.~g;" \ +-pe "s~\{\{summary_backupWallet\}\}~safely copies \`wallet.dat\` to the specified file, which can be a directory or a path with filename.~g;" \ +-pe "s~\{\{summary_masternode\}\}~provides a set of commands for managing masternodes and displaying information about them.~g;" \ +-pe "s~\{\{summary_dumpPrivKey\}\}~returns the wallet-import-format (WIP) private key corresponding to an address. (But does not remove it from the wallet.)~g;" \ +-pe "s~\{\{summary_setBan\}\}~attempts add or remove a IP/Subnet from the banned list.~g;" \ +-pe "s~\{\{summary_spork-rpc\}\}~reads or updates spork settings on the network.~g;" \ +-pe "s~\{\{summary_getRawChangeAddress\}\}~returns a new Dash address for receiving change. This is for use with raw transactions, not normal use.~g;" \ +-pe "s~\{\{summary_setGenerate\}\}~was removed in Dash Core 0.12.3.~g;" \ +-pe "s~\{\{summary_privateSend\}\}~controls the mixing process.~g;" \ +-pe "s~\{\{summary_getAddressMempool\}\}~returns all mempool deltas for an address.~g;" \ +-pe "s~\{\{summary_getTxOut\}\}~returns details about an unspent transaction output (UTXO).~g;" \ +-pe "s~\{\{summary_signMessageWithPrivKey\}\}~signs a message with a given private key.~g;" \ +-pe "s~\{\{summary_walletPassphrase\}\}~stores the wallet decryption key in memory for the indicated number of seconds. Issuing the \`walletpassphrase\` command while the wallet is already unlocked will set a new unlock time that overrides the old one.~g;" \ +-pe "s~\{\{summary_disconnectNode\}\}~immediately disconnects from a specified node.~g;" \ +-pe "s~\{\{summary_estimatePriority\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_walletPassphraseChange\}\}~changes the wallet passphrase from 'old passphrase' to 'new passphrase'.~g;" \ +-pe "s~\{\{summary_getBlockHashes\}\}~returns array of hashes of blocks within the timestamp range provided (requires \`timestampindex\` to be enabled).~g;" \ +-pe "s~\{\{summary_getGovernanceInfo\}\}~returns an object containing governance parameters.~g;" \ +-pe "s~\{\{summary_setAccount\}\}~puts the specified address in the given account.~g;" \ +-pe "s~\{\{summary_bls\}\}~provides a set of commands to execute BLS-related actions.~g;" \ +-pe "s~\{\{summary_listAddressBalances\}\}~lists addresses of this wallet and their balances~g;" \ +-pe "s~\{\{summary_sendRawTransaction\}\}~validates a transaction and broadcasts it to the peer-to-peer network.~g;" \ +-pe "s~\{\{summary_keyPoolRefill\}\}~fills the cache of unused pre-generated keys (the keypool).~g;" \ +-pe "s~\{\{summary_getBlockStats\}\}~computes per block statistics for a given window.~g;" \ +-pe "s~\{\{summary_getNetworkInfo\}\}~returns information about the node's connection to the network.~g;" \ +-pe "s~\{\{summary_lockUnspent\}\}~temporarily locks or unlocks specified transaction outputs. A locked transaction output will not be chosen by automatic coin selection when spending dash. Locks are stored in memory only, so nodes start with zero locked outputs and the locked output list is always cleared when a node stops or fails.~g;" \ +-pe "s~\{\{summary_sentinelPing\}\}~was removed in Dash Core 0.14.0.~g;" \ +-pe "s~\{\{summary_setPrivateSendRounds\}\}~sets the number of PrivateSend mixing rounds to use~g;" \ +-pe "s~\{\{summary_addNode\}\}~attempts to add or remove a node from the addnode list, or to try a connection to a node once.~g;" \ +-pe "s~\{\{summary_getBestBlockHash\}\}~returns the header hash of the most recent block on the best block chain.~g;" \ +-pe "s~\{\{summary_importPubKey\}\}~imports a public key (in hex) that can be watched as if it were in your wallet but cannot be used to spend~g;" \ +-pe "s~\{\{summary_mnSync\}\}~returns the sync status, updates to the next step or resets it entirely.~g;" \ +-pe "s~\{\{summary_restGetChainInfo\}\}~returns information about the current state of the block chain.~g;" \ +-pe "s~\{\{summary_restGetTx\}\}~gets a hex-encoded serialized transaction or a JSON object describing the transaction. By default, Dash Core only stores complete transaction data for UTXOs and your own transactions, so this method may fail on historic transactions unless you use the non-default \`txindex=1\` in your Dash Core startup settings.~g;" \ +-pe "s~\{\{summary_restGetGetUtxos\}\}~returns an UTXO set given a set of outpoints.~g;" \ +-pe "s~\{\{summary_restGetMemPool-contents\}\}~returns all transaction in the memory pool with detailed information.~g;" \ +-pe "s~\{\{summary_restGetHeaders\}\}~returns a specified amount of block headers in upward direction.~g;" \ +-pe "s~\{\{summary_restGetBlock\}\}~gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block.~g;" \ +-pe "s~\{\{summary_restGetMemPool-info\}\}~returns information about the node's current transaction memory pool.~g;" \ +-pe "s~\{\{summary_restGetBlock-noTxDetails\}\}~gets a block with a particular header hash from the local block database either as a JSON object or as a serialized block. The JSON object includes TXIDs for transactions within the block rather than the complete transactions [GET block][rest get block] returns.~g;" diff --git a/scripts/bloom_filter.py b/scripts/bloom_filter.py index 62afe701..8311077b 100644 --- a/scripts/bloom_filter.py +++ b/scripts/bloom_filter.py @@ -4,7 +4,7 @@ from bitarray import bitarray # from pypi.python.org/pypi/bitarray import pyhash # from https://github.com/flier/pyfasthash # Based on BIP-37 -# https://github.com/QuantumExplorer/bips/blob/master/bip-0037.mediawiki +# https://github.com/dashevo/bips/blob/master/bip-0037.mediawiki # Defined in bloom.h # https://github.com/dashpay/dash/blob/master/src/bloom.h#L17-#L18 diff --git a/scripts/build_publish_preview.sh b/scripts/build_publish_preview.sh old mode 100644 new mode 100755 diff --git a/scripts/combineRPCs.sh b/scripts/combineRPCs.sh new file mode 100755 index 00000000..2ee38087 --- /dev/null +++ b/scripts/combineRPCs.sh @@ -0,0 +1,183 @@ +#!/usr/bin/env bash + +echo "# Addressindex RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getaddressbalance.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getaddressdeltas.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getaddressmempool.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getaddresstxids.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getaddressutxos.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Block Chain RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getbestblockhash.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getbestchainlock.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getblock.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getblockchaininfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getblockcount.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getblockhash.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getblockhashes.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getblockheader.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getblockheaders.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getblockstats.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getchaintips.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getchaintxstats.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getdifficulty.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getmempoolancestors.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getmempooldescendants.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getmempoolentry.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getmempoolinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getrawmempool.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getmerkleblocks.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getspecialtxes.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getspentinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/gettxout.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/gettxoutproof.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/gettxoutsetinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/preciousblock.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/pruneblockchain.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/verifychain.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/verifytxoutproof.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Control RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/debug.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getmemoryinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/help.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/logging.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/stop.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/uptime.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Dash RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getgovernanceinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getpoolinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getsuperblockbudget.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/gobject.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/masternode.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/masternodelist.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/mnsync.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/privatesend.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/spork.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/voteraw.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Evolution RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/bls.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/protx.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/quorum.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Generating RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/generate.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/generatetoaddress.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Mining RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getblocktemplate.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getmininginfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getnetworkhashps.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/prioritisetransaction.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/submitblock.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Network RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/addnode.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/clearbanned.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/disconnectnode.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getaddednodeinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getconnectioncount.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getnettotals.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getnetworkinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getpeerinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listbanned.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/ping.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/setban.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/setnetworkactive.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Raw Transaction RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/combinerawtransaction.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/createrawtransaction.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/decoderawtransaction.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/decodescript.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/fundrawtransaction.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getrawtransaction.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/sendrawtransaction.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/signrawtransaction.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Utility RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/createmultisig.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/estimatefee.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartfee.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/signmessagewithprivkey.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/validateaddress.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/verifymessage.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Wallet RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/abandontransaction.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/abortrescan.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/addmultisigaddress.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/backupwallet.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/dumphdinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/dumpprivkey.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/dumpwallet.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/encryptwallet.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getaccount.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getaccountaddress.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getaddressesbyaccount.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getbalance.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getnewaddress.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getrawchangeaddress.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getreceivedbyaccount.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getreceivedbyaddress.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/gettransaction.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getunconfirmedbalance.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getwalletinfo.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/importaddress.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/importelectrumwallet.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/importmulti.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/importprivkey.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/importprunedfunds.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/importpubkey.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/importwallet.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/keepass.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/keypoolrefill.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listaccounts.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listaddressbalances.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listaddressgroupings.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listlockunspent.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listreceivedbyaccount.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listreceivedbyaddress.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listsinceblock.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listtransactions.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listunspent.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/listwallets.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/lockunspent.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/move.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/removeprunedfunds.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/sendfrom.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/sendmany.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/sendtoaddress.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/setaccount.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/setprivatesendamount.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/setprivatesendrounds.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/settxfee.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/signmessage.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/walletlock.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/walletpassphrase.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/walletpassphrasechange.md >> combinedRPCs.md +echo >> combinedRPCs.md +echo "# Removed RPCs" >> combinedRPCs.md +echo >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/estimatepriority.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/estimatesmartpriority.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/gethashespersec.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getwork.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/getgenerate.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/masternodebroadcast.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/sentinelping.md >> combinedRPCs.md +cat ./_includes/devdoc/dash-core/rpcs/rpcs/setgenerate.md >> combinedRPCs.md diff --git a/scripts/create_empty_rpc_md.sh b/scripts/create_empty_rpc_md.sh index 7cab519b..9a3e80b8 100755 --- a/scripts/create_empty_rpc_md.sh +++ b/scripts/create_empty_rpc_md.sh @@ -34,7 +34,7 @@ if [ "$PARAMCOUNT" == 1 ]; then echo "*Result---RESULT DESCRIPTION*" >> $FILENAME echo "" >> $FILENAME - echo "*Example from Dash Core 0.12.3*" >> $FILENAME + echo "*Example from Dash Core 0.14.0*" >> $FILENAME echo "" >> $FILENAME # Example diff --git a/scripts/pipe-convert-for-readme.sh b/scripts/pipe-convert-for-readme.sh new file mode 100755 index 00000000..1d6cb057 --- /dev/null +++ b/scripts/pipe-convert-for-readme.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +# To use this script, pipe the contents of a MD file into it. +# It will output that content reformatted for Readme. + +# Examples: +# Reformat the contents of the clipboard +# xclip -o | ./pipe-convert-for-readme | xclip -selection clipboard +# +# Reformat a file and write it to a new file +# cat ../_includes/devdoc/guide_block_chain.md | ./pipe-convert-for-readme > ../_readme/guide_block_chain.md + +perl -0 \ +-pe "s///gs;" \ +-pe "s/\{% comment %\}.+?{% endcomment %\}//gs;" \ +-pe "s/\{% include helpers\/subhead-links\.md %\}//g;" \ +-pe "s/\{% (end)?autocrossref %\}//gs;" \ +-pe "s/\{% assign .+? %\}//g;" \ +-pe "s/\{:\.no_toc\}//g;" \ +-pe "s/\[([^\]]+)\]\[.+?\.term\}/<>/g;" \ +-pe "s/\{% highlight ([^%]+) %\}(.+?\n){% endhighlight %\}/\`\`\` \1\2\`\`\`/gs;" \ +-pe "s/<<([^>]+)\n([^>]+)>>/<<\1 \2>>/gs;" \ +-pe "s!\(/img!(https://dash-docs.github.io/img!g;" \ +-pe "s/{% itemplate ntpd1 %}/Name | Type | Presence | Description\n--- | --- | --- | ---/g;" \ +-pe "s/\n+- n: \"(.*?)\"\s+t: \"(.*?)\"\s+p: \"(.*?)\"\s+d: \"(.*?)\"/\n\1 | \2 | \3 | \4/g;" \ +-pe "s/{% enditemplate %}/\n\n/g;" \ +-pe "s/~~~/\`\`\`/g;" \ +-pe "s/^([^\|]*[0-9a-zA-Z\(\)\[\],\.\-\`])\n *([0-9a-zA-Z\(\)\[\],\.\-\`<])(?=([^\`]|\`(?!\`))*((\`\`\`[^\`]+\`\`\`)([^\`]|\`(?!\`))*)*$)/\1 \2/g;" \ +-pe "s/(\n\n\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|?)\n(?!\| *-+ *\|)/\n\n\1\n|---|---|---|---|---|---|---|\n/g;" \ +-pe "s/(\n\n\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|?)\n(?!\| *-+ *\|)/\n\n\1\n|---|---|---|---|---|---|\n/g;" \ +-pe "s/(\n\n\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|?)\n(?!\| *-+ *\|)/\n\n\1\n|---|---|---|---|---|\n/g;" \ +-pe "s/(\n\n\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|?)\n(?!\| *-+ *\|)/\n\n\1\n|---|---|---|---|\n/g;" \ +-pe "s/(\n\n\|[^\|\n]+\|[^\|\n]+\|[^\|\n]+\|?)\n(?!\| *-+ *\|)/\n\n\1\n|---|---|---|\n/g;" \ +-pe "s/(\n\n\|[^\|\n]+\|[^\|\n]+\|?)\n(?!\| *-+ *\|)/\n\n\1\n|---|---|\n/g;" \ +-pe "s/\|[-]+(?=[\|\n])/| --- /g;" \ +-pe "s/\n\n+/\n\n/g;" diff --git a/willbinns.asc b/willbinns.asc deleted file mode 100644 index 6f4e1fa7..00000000 --- a/willbinns.asc +++ /dev/null @@ -1,427 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -ocPDdcZGQzDxOXKIcuyPhNH/AAA35v8AADfhARAAAQEAAAAAAAAAAAAAAAD/2P/h -ABhFeGlmAABJSSoACAAAAAAAAAAAAAAA/+wAEUR1Y2t5AAEABAAAADYAAP/hAzNo -dHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/ -IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1s -bnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUu -Ni1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4g -PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIy -LXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIg -eG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4 -bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS -ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJl -ZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAo -TWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRjA3NUQ5NDg0 -RTMxMUU2QjIyQ0Q0NUQ4NjkwMUNDNiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRp -ZDpGRjA3NUQ5NTg0RTMxMUU2QjIyQ0Q0NUQ4NjkwMUNDNiI+IDx4bXBNTTpEZXJp -dmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZGMDc1RDkyODRFMzEx -RTZCMjJDRDQ1RDg2OTAxQ0M2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkZG -MDc1RDkzODRFMzExRTZCMjJDRDQ1RDg2OTAxQ0M2Ii8+IDwvcmRmOkRlc2NyaXB0 -aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+ -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 -OFIwu8heTkl0W4j6fRSli3/BwBRk -=n+IG ------END PGP PUBLIC KEY BLOCK-----