JSON-RPC-Commands
Contents
SnowBlossomClient
Turn on rpcserver by running the client with the command 'rpcserver'. This is done to make sure that running the client (with full access to the wallet in question) is intentional. Requires the following config settings, rpc_port, rpc_username, rpc_password.
getfresh
Gets a fresh address. Optional parameters:
- mark_used - (default: false) if true, mark this address as used so it will not be used as change or returned by other getfresh calls.
- generate_now - (default: false) rather than using the unused key pool, generate a new address to use
curl -d '{ "jsonrpc": "2.0", "method":"getfresh", "id":"getfresh", "params": { "mark_used": true, "generate_now": true }}' http://cows:two@localhost:11323/
{ "result": { "address": "snowtest:fxuc95w50hkpxjrkhmk3zffxdh3qsd5jkh7v8pq7", "mark_used": true, "generate_now": true }, "id": "getfresh", "jsonrpc": "2.0" }
balance
Get the wallet balance in both SNOW (double) and flakes.
curl -d '{ "jsonrpc": "2.0", "method":"balance", "id":"balance"}' http://cows:two@localhost:11323/
{ "result": { "unconfirmed": 0, "spendable": 376960.914462, "flake_confirmed": 376960914462, "flake_spendable": 376960914462, "confirmed": 376960.914462, "flake_unconfirmed": 0 }, "id": "balance", "jsonrpc": "2.0" }
send / create_transaction
Create a transaction, possible sign and broadcast snow.
- broadcast - (default: true) broadcast transaction when done making it
- sign - (default: true) sign transaction with any keys in current wallet that match
- outputs - list of outputs to send snow to. Must specify snow or flakes.
- extra - hex encoded binary data to attach as extra field to transaction
- fee_use_estimate - (default: true) use size based fee estimation for the fee
- fee_flat - SNOW amount to use as the fee
Input Related
- input_specific_list - Use only the inputs included in the input array (param: inputs)
- input_confirmed_then_pending - (default: true) prefer to use confirmed, but use pending if run out of confirmed
- input_confirmed_only - only use outputs that are confirmed as inputs
- inputs - Specific list of inputs to use. each one must have, address, src_tx, src_tx_out_idx, and value
- split_change_over - Amount of SNOW to split change outputs if in excess of
- change_random_from_wallet - Use a random address rather than a fresh one. Note this can reuse an addresses that has been used before
- change_fresh_address - (default: true) use a fresh address
- change_specific_addresses - only use addresses from the list provided with 'change_addresses'
- change_addresses - List of change addresses to use as change for this transaction
An example using an obnoxious number of features:
{ "jsonrpc": "2.0", "method": "send", "id": "send_test", "params": { "input_specific_list": true, "inputs": [ { "address": "8apcj0hhtxcm9xa2j4gaxxkzz9a3fhp35vjemnff", "src_tx": "a27aed7072735ecf50c50c3782470006a854a80f8e472283eea77e5dc0db3f03", "src_tx_out_idx": 2, "value": 2474999113 } ], "split_change_over": 2500, "sign": true, "broadcast": true, "outputs": [ { "address": "snowtest:j4hl7axx24yy9m3pfmag3a3jn26f20rwz3u9jhr9", "snow": 25 }, { "address": "snowtest:u4wmy9c8n56vd9285srvd4928ewm0urru2g7va2m", "flakes": 50 } ], "change_specific_addresses": true, "change_addresses": [ "snowtest:8apcj0hhtxcm9xa2j4gaxxkzz9a3fhp35vjemnff", "m36evc3zlqr4r3uuy6g3r6t3299769cwhldzsehu" ] } }
{ "result": { "signatures_added": 1, "tx_data": "0a209c73bd7dc38b7789c324c7f554361b9dcbfb8c555d7c61e7c64659ae1ed4339c12c1010801223a0a143f43893ef759b1b29baa9551d31ac2117b14dc311220a27aed 7072735ecf50c50c3782470006a854a80f8e472283eea77e5dc0db3f0318022a1c089283a090091214dc75966222f80751c79c269111e971514bed170e2a1b08c0f0f50b1214956fff74c655 4842ee214efa88f6329ab4953c6e2a1808321214e55db217079d34c69547a406c6d4aa3e5db7f063322908011225080112210219a144311398579e6a0f8c57897e2671376c10a5cbd2e5cae9 a29a7366a429d440c5061a491a473045022100df1ea4cdd520467b43e2bd851a5c9ced3d63d12b87e927a061e64c7621a7ac5702202651bbfb75862ef8ad83e2d0df03cd42319642e6fcece3 39a5678777e2bba621", "fee": 837, "tx_hash": "9c73bd7dc38b7789c324c7f554361b9dcbfb8c555d7c61e7c64659ae1ed4339c", "all_signed": true }, "id": "send_test", "jsonrpc": "2.0" }
sign-transaction
This operation signs the input transaction with any relevant keys that are available. That could be zero keys.
{ "jsonrpc": "2.0", "method": "sign_transaction", "id": "signtx8", "params": { "tx_data": "0a2038e32c8d9ad597cb1a709cd87b0c2f8e94095332842e5b00cac6976b4209b63712c1010801223a0a141417000f56a6fcf03964af73ffb25cad72d0e8e81220f72100b84bfdcb576a5a138766a4aefef992ef92e8c95dea095cc7a34bc84806181c2a1808321214e55db217079d34c69547a406c6d4aa3e5db7f0632a1b08c0f0f50b1214956fff74c6554842ee214efa88f6329ab4953c6e2a1c08c9fa959c091214dc75966222f80751c79c269111e971514bed170e322908011225080112210241a39501924c65162e5ca92dbbda43565b81023da57f802638fd2f72fd88e18940c506" } }
{ "result": { "signatures_added": 1, "tx_data": "0a2038e32c8d9ad597cb1a709cd87b0c2f8e94095332842e5b00cac6976b4209b63712c1010801223a0a141417000f56a6fcf03964af73ffb25cad72d0e8e81220f72100b84bfdcb576a5a138766a4aefef992ef92e8c95dea095cc7a34bc84806181c2a1808321214e55db217079d34c69547a406c6d4aa3e5db7f0632a1b08c0f0f50b1214956fff74c6554842ee214efa88f6329ab4953c6e2a1c08c9fa959c091214dc75966222f80751c79c269111e971514bed170e322908011225080112210241a39501924c65162e5ca92dbbda43565b81023da57f802638fd2f72fd88e18940c5061a491a473045022100a5a3d8b81968a15b5a6a19e2e5d712fe65df8dea83c4bdf9ece60b7dc2c2193f0220579ff3598d894239882cafe612f5b82a7944687adcd35a981e2736abeaaa8b1b", "fee": 837, "tx_hash": "38e32c8d9ad597cb1a709cd87b0c2f8e94095332842e5b00cac6976b4209b637", "all_signed": true }, "id": "signtx8", "jsonrpc": "2.0" }
broadcast
This sends the transaction on the network.
{ "jsonrpc": "2.0", "method": "broadcast", "id": "cast", "params": { "tx_data": "0a2038e32c8d9ad597cb1a709cd87b0c2f8e94095332842e5b00cac6976b4209b63712c1010801223a0a141417000f56a6fcf03964af73ffb25cad72d0e8e81220f72100b84bfdcb576a5a138766a4aefef992ef92e8c95dea095cc7a34bc84806181c2a1808321214e55db217079d34c69547a406c6d4aa3e5db7f0632a1b08c0f0f50b1214956fff74c6554842ee214efa88f6329ab4953c6e2a1c08c9fa959c091214dc75966222f80751c79c269111e971514bed170e322908011225080112210241a39501924c65162e5ca92dbbda43565b81023da57f802638fd2f72fd88e18940c5061a491a47304502202aaeeb87db579e5201df9188fc4161d1fc2ef71fc5675d7b30e1cd2906625896022100cb64cb9ecdad42533c69873e05154e10b22f14d3b0c838da9a9ae533adbd5acd" } }
{ "result": { "tx_data": "0a2038e32c8d9ad597cb1a709cd87b0c2f8e94095332842e5b00cac6976b4209b63712c1010801223a0a141417000f56a6fcf03964af73ffb25cad72d0e8e81220f72100b84bfdcb576a5a138766a4aefef992ef92e8c95dea095cc7a34bc84806181c2a1808321214e55db217079d34c69547a406c6d4aa3e5db7f0632a1b08c0f0f50b1214956fff74c6554842ee214efa88f6329ab4953c6e2a1c08c9fa959c091214dc75966222f80751c79c269111e971514bed170e322908011225080112210241a39501924c65162e5ca92dbbda43565b81023da57f802638fd2f72fd88e18940c5061a491a47304502202aaeeb87db579e5201df9188fc4161d1fc2ef71fc5675d7b30e1cd2906625896022100cb64cb9ecdad42533c69873e05154e10b22f14d3b0c838da9a9ae533adbd5acd", "fee": 837, "tx_hash": "38e32c8d9ad597cb1a709cd87b0c2f8e94095332842e5b00cac6976b4209b637" }, "id": "cast", "jsonrpc": "2.0" }
get_address_hash
Get the hex spechash for an address.
{ "jsonrpc": "2.0", "method": "get_address_hash", "id": "0", "params": { "address": "snowtest:08n4fjwyuwxuc54y3m67mrgl9qgc8wylrahjpyxd" } }
{ "result": { "address": "snowtest:08n4fjwyuwxuc54y3m67mrgl9qgc8wylrahjpyxd", "spechash": "79e754c9c4e38dcc52a48ef5ed8d1f281183b89f" }, "id": "0", "jsonrpc": "2.0" }
get_hash_address
Get the address for a given spechash
{ "jsonrpc": "2.0", "method": "get_hash_address", "id": "0", "params": { "spechash": "79e754c9c4e38dcc52a48ef5ed8d1f281183b89f" } }
{ "result": { "address": "snowtest:08n4fjwyuwxuc54y3m67mrgl9qgc8wylrahjpyxd", "spechash": "79e754c9c4e38dcc52a48ef5ed8d1f281183b89f" }, "id": "0", "jsonrpc": "2.0" }
parse_transaction
For the given tx_data, give a json version of the transaction. If any integers are oddly missing, they are probably zero, which protobuf omits as default. All byte strings are as base64 even though everything else uses hex for json interface.
{ "jsonrpc": "2.0", "method": "parse_transaction", "id": "0", "params": { "tx_data": "0a201b7d5d0502dfe5de22c5fb30e58fef20dc332da51e3e0ef55c061ba79c616ca012a601080122380a1439484a240082fffe5c588618ac612080801de1fe12207360a94dc251c4a7fdd7465fcc98c3f6753de7fbc89fbd005bb3dafa89f4d6772a1d08c1f1f795ba0112141b8522585858bfd2934ae14c6f119bb6976e88172a1b08c0f0f50b1214956fff74c6554842ee214efa88f6329ab4953c6e322908011225080112210235762013f9aa121b588e745e4cc62267973763997d150edc430f1a68c45117e840ff051a481a463044022018b4698d72102eba38bb49f0ede1472a3b838f6464b0399de3349e5c3e1d5589022036b69c76f35fa5ff0622f6a67cf51f5da86938bde9fd0fd1592f7b1f09721b33" } }
{ "result": { "tx": { "innerData": "CAEiOAoUOUhKJACC//5cWIYYrGEggIAd4f4SIHNgqU3CUcSn/ddGX8yYw/Z1Pef7yJ+9AFuz2vqJ9NZ3Kh0IwfH3lboBEhQbhSJYWFi/0pNK4UxvEZu2l26IFyobCMDw9QsSFJVv/3TGVUhC7iFO+oj2Mpq0lTxuMikIARIlCAESIQI1diAT+aoSG1iOdF5MxiJnlzdjmX0VDtxDDxpoxFEX6ED/BQ==", "txHash": "G31dBQLf5d4ixfsw5Y/vINwzLaUePg71XAYbp5xhbKA=", "signatures": [ { "signature": "MEQCIBi0aY1yEC66OLtJ8O3hRyo7g49kZLA5neM0nlw+HVWJAiA2tpx281+l/wYi9qZ89R9dqGk4ven9D9FZL3sfCXIbMw==" } ] }, "inner": { "outputs": [ { "recipientSpecHash": "G4UiWFhYv9KTSuFMbxGbtpduiBc=", "value": "49974999233" }, { "recipientSpecHash": "lW//dMZVSELuIU76iPYymrSVPG4=", "value": "25000000" } ], "inputs": [ { "srcTxId": "c2CpTcJRxKf910ZfzJjD9nU95/vIn70AW7Pa+on01nc=", "specHash": "OUhKJACC//5cWIYYrGEggIAd4f4=" } ], "fee": "767", "claims": [ { "sigSpecs": [ { "signatureType": 1, "publicKey": "AjV2IBP5qhIbWI50XkzGImeXN2OZfRUO3EMPGmjEURfo" } ], "requiredSigners": 1 } ], "version": 1 } }, "id": "0", "jsonrpc": "2.0" }
get_transaction
Get the hex bytes for a transaction and also its status.
{ "jsonrpc": "2.0", "method": "get_transaction", "id": "0", "params": { "tx_hash": "a07228f2313a76d468412a439cc87a87389761a67950c32c898d47edcbb8a1df" } }
{ "result": { "tx_data": "0a20a07228f2313a76d468412a439cc87a87389761a67950c32c898d47edcbb8a1df12a501080122380a1452013f3cd4296235158f708db2c52390f2c195f0122016530e2573da7c84f9104af6ee5d6ef31e7423b440f827d801c74e48b37d43c42a1b08c0f0f50b1214956fff74c6554842ee214efa88f6329ab4953c6e2a1c08c199e9b44a12147952bcad957f1164142c7947aeba9176f80c534c3229080112250801122102a27ab7714f04fa86be92e82daad876451b6b575945c0820b9342a94d35821e6b40ff051a4a1a483046022100c21f0859d972724310e8d52888c73c9d8f648e2fa0492369327f38094ce8eca5022100941254d6b3fced1d5b90e88c5a44d0b7d00907a9756030f4e22513134db28dbe", "fee": 767, "tx_hash": "a07228f2313a76d468412a439cc87a87389761a67950c32c898d47edcbb8a1df", "status": { "heightConfirmed": 13672, "confirmations": 2, "confirmed": true } }, "id": "0", "jsonrpc": "2.0" }
get_unspent
Get all unspent outputs in the client.
{ "jsonrpc": "2.0", "method": "get_unspent", "id": "0" }
{ "result": { "unspent": [ { "address": "snowtest:y7mwxfv799l3lwqw4dcfmdzdql3ghtyuakm72le5", "src_tx_out_idx": 0, "src_tx": "d12824a0f6bdf10d697a85eed8e609ddc6f5f0823c862d8cf363e4438635b55f", "value": 400000000000, "confirmed": true }, { "address": "snowtest:kwv3dsf5jlvlmgerhjy56wrhjf2rfr4ucm07wnep", "src_tx_out_idx": 0, "src_tx": "3855df061bb6ece61a51329380f70988bdbe999f3093976b882c4b6fde29e978", "value": 14999999093, "confirmed": true }, { "address": "snowtest:u62g3790cg4lm0gsz6q8jtm3025zt5yn2en77scm", "src_tx_out_idx": 1, "src_tx": "40871fcabd7e029920c58c82ea5d28fb947f9ec832389c31a35b826777eb8676", "value": 45852000000, "confirmed": true }, { "address": "snowtest:rwzjykzctzla9y62u9xx7yvmk6tkazqhenp48f0p", "src_tx_out_idx": 0, "src_tx": "1b7d5d0502dfe5de22c5fb30e58fef20dc332da51e3e0ef55c061ba79c616ca0", "value": 49974999233, "confirmed": true }, { "address": "snowtest:09ftetv40ugkg9pv09r6aw53wmuqc56v5klwwyy0", "src_tx_out_idx": 1, "src_tx": "a07228f2313a76d468412a439cc87a87389761a67950c32c898d47edcbb8a1df", "value": 19974999233, "confirmed": true }, { "address": "snowtest:js0e77fm3kx47a3p8uwe2apk6tzuj8xudjzjyhsh", "src_tx_out_idx": 1, "src_tx": "a68bf5ef06915a979290b2b2076bb2ef618921522bdce12d5e7f907911a58ac5", "value": 12430000000, "confirmed": true } ] }, "id": "0", "jsonrpc": "2.0" }
Or query a specific address, which doesn't need to be in the wallet.
{ "jsonrpc": "2.0", "method": "get_unspent", "id": "0", "params": { "address": "p6ngj8zjd2k88f7md2s8ye2qdryzv4lnz80z20m8" } }
{ "result": { "unspent": [ { "address": "snowtest:p6ngj8zjd2k88f7md2s8ye2qdryzv4lnz80z20m8", "src_tx_out_idx": 0, "src_tx": "f5b539d7725e8fbd2c04d91cdaa92ae7b844a32f37a0e6d26c9b7972423c886b", "value": 30332107417, "confirmed": true } ] }, "id": "0", "jsonrpc": "2.0" }
get_status
Returns node status and balance.
{ "jsonrpc": "2.0", "method": "get_status", "id": "0" }
{ "result": { "node_status": { "connectedPeers": 6, <BUNCH MORE NODE STATUS STUFF, SUPER FUN> ... }, "balance": { "spendable": "543231997559", "unconfirmed_snow": 0, "spendable_snow": 543231.997559, "confirmed": "543231997559", "confirmed_snow": 543231.997559 } }, "id": "0", "jsonrpc": "2.0" }
import_wallet
Imports wallet data, in the same format used by the command line 'export', 'export_watch_only' and 'import' commands.
The format for the private key is PKCS8 encoded base64. The format for the public key is X509 encoded base64. On import, the public and private key pair are tested to make sure Snowblossom can parse them and that something signed with the private key is verified by the public key.
Example with just an address spec for watch only wallet
{ "jsonrpc": "2.0", "method": "import_wallet", "id": "import", "params": { "wallet": { "addresses": [ { "requiredSigners": 1, "sigSpecs": [ { "signatureType": 1, "publicKey": "A91uzlbcu9kO2dSDj6VWzu2Z8zZN/sNP1411hWCDFivl" } ] } ] } } }
{ "result": { "addresses": [ "snowtest:kumvfk3070dknv00xzjhf4jq2pezk477nv0nm6g7" ], "keys": [] }, "id": "import", "jsonrpc": "2.0" }
Example with a public and private key pair and associated address:
{ "jsonrpc": "2.0", "method": "import_wallet", "id": "import", "params": { "wallet": { "keys": [ { "signatureType": 1, "publicKey": "A91uzlbcu9kO2dSDj6VWzu2Z8zZN/sNP1411hWCDFivl", "privateKey": "MIGNAgEAMBAGByqGSM49AgEGBSuBBAAKBHYwdAIBAQQgZ8mfHBR27RX5KjoSxbJf/n1maefiYqaY3gVxFne4mZCgBwYFK4EEAAqhRANCAATdbs5W3LvZDtnUg4+lVs7tmfM2Tf7DT9eNdYVggxYr5SOAZXVYaC4xpLNjXl2ULU09mZeAj8EyumriVusVELMJ" } ], "addresses": [ { "requiredSigners": 1, "sigSpecs": [ { "signatureType": 1, "publicKey": "A91uzlbcu9kO2dSDj6VWzu2Z8zZN/sNP1411hWCDFivl" } ] } ] } } }
{ "result": { "addresses": [ "snowtest:kumvfk3070dknv00xzjhf4jq2pezk477nv0nm6g7" ], "keys": [ "03dd6ece56dcbbd90ed9d4838fa556ceed99f3364dfec34fd78d75856083162be5" ] }, "id": "import", "jsonrpc": "2.0" }
MrPlow
If an rpc_port is specified, then MrPlow supports RPC commands.
getfoundblocks
returns number of found blocks and lists them, most recent first
curl -d '{ "jsonrpc": "2.0", "method":"getfoundblocks", "id":"whatever"}' http://localhost:13331/
{ "result": { "found_blocks": 6, "hashes": [ "000000ee7e172390dbd6a477aad2d5be6c4abe531f13efe16f95e0d83e6d0e21", "00000027caf1e5f135ef523dc6b44f8eb338fe8a5c3bfb55734a15b0f99cb486", "000000e804d55f2253f2df37d83028b6643f680d0e01edcf663e907790b57d19", "0000007758531fd85463dc4e2ec8a3b803655cfab6f4ba11e904d4e297849068", "000000c6fd193a348ed4dfb01e32bd7947a85e6acda62647aa0beadb6c835fac", "000000202452850901943ce74b8e3b55fc51b30ac21259ba21b090715a7182d3" ] }, "id": "whatever", "jsonrpc": "2.0" }
getstats
returns a variety of current statistics
curl -d '{ "jsonrpc": "2.0", "method":"getstats", "id":"whatever"}' http://localhost:13331/ | jq .
{ "result": { "found_blocks": 7, "share_map": { "snowtest:czq7040pjz97vt3smu5maz594juw033duaf4v6yu": 22 }, "rates": { "total": { "60000": 69905.06666666667, "300000": 13981.013333333334, "900000": 4660.337777777778, "3600000": 1165.0844444444444 }, "miners": { "snowtest:czq7040pjz97vt3smu5maz594juw033duaf4v6yu": { "60000": 69905.06666666667, "300000": 13981.013333333334, "900000": 4660.337777777778, "3600000": 1165.0844444444444 } } }, "connections": 1 }, "id": "whatever", "jsonrpc": "2.0" }