--- title: RPC Reference description: Daemon and wallet JSON-RPC 2.0 API documentation. --- # RPC Reference The Lethean node exposes two RPC interfaces: a **daemon** API for blockchain queries and node control, and a **wallet** API for account management and transactions. Both use JSON-RPC 2.0 over HTTP. - **Daemon RPC:** Port 36941 (mainnet), 46941 (testnet) - **Wallet RPC:** User-configured port alongside the wallet process ## Go Client The `rpc/` package provides a typed Go client: ```go import "dappco.re/go/core/blockchain/rpc" // Create a client (appends /json_rpc automatically) client := rpc.NewClient("http://localhost:36941") // Or with a custom HTTP client client := rpc.NewClientWithHTTP("http://localhost:36941", &http.Client{ Timeout: 60 * time.Second, }) ``` The client supports two transport modes: - `call()` -- JSON-RPC 2.0 via `/json_rpc` (most endpoints) - `legacyCall()` -- Plain JSON POST to dedicated URI paths (some endpoints registered via `MAP_URI_AUTO_JON2` in the C++ daemon) All daemon responses include a `"status": "OK"` field. The client checks this and returns an error for non-OK values. ## Implemented Go Methods ### Node Information ```go // Comprehensive daemon status info, err := client.GetInfo() // Returns: Height, TxCount, PowDifficulty, OutgoingConnectionsCount, // IncomingConnectionsCount, BlockReward, TotalCoins, ... // Current blockchain height (legacy endpoint) height, err := client.GetHeight() // Block count count, err := client.GetBlockCount() ``` ### Block Queries ```go // Most recent block header header, err := client.GetLastBlockHeader() // Returns: Height, Hash, Timestamp, MajorVersion, Difficulty, Reward, ... // Block header by height header, err := client.GetBlockHeaderByHeight(1000) // Block header by hash header, err := client.GetBlockHeaderByHash("ab3f...") // Full block details (range) blocks, err := client.GetBlocksDetails(0, 10) // Returns: []BlockDetails with transactions, cumulative difficulty, etc. ``` ### Transaction Queries ```go // Detailed transaction info txInfo, err := client.GetTxDetails("543b...") // Fetch raw transactions by hash (legacy endpoint) txsHex, missed, err := client.GetTransactions([]string{"ab3f...", "cd5e..."}) ``` ### Mining ```go // Submit a mined block err := client.SubmitBlock("hexblob...") ``` ### Wallet Support ```go // Fetch random decoy outputs for ring construction outs, err := client.GetRandomOutputs(amount, 15) // 15 decoys for HF4+ // Broadcast a signed transaction err := client.SendRawTransaction(txBlob) ``` ## Go Response Types ```go type BlockHeader struct { MajorVersion uint8 `json:"major_version"` MinorVersion uint8 `json:"minor_version"` Timestamp uint64 `json:"timestamp"` PrevHash string `json:"prev_hash"` Nonce uint64 `json:"nonce"` OrphanStatus bool `json:"orphan_status"` Height uint64 `json:"height"` Depth uint64 `json:"depth"` Hash string `json:"hash"` Difficulty string `json:"difficulty"` Reward uint64 `json:"reward"` } type DaemonInfo struct { Height uint64 `json:"height"` TxCount uint64 `json:"tx_count"` TxPoolSize uint64 `json:"tx_pool_size"` AltBlocksCount uint64 `json:"alt_blocks_count"` OutgoingConnectionsCount uint64 `json:"outgoing_connections_count"` IncomingConnectionsCount uint64 `json:"incoming_connections_count"` PowDifficulty uint64 `json:"pow_difficulty"` PosDifficulty string `json:"pos_difficulty"` BlockReward uint64 `json:"block_reward"` DefaultFee uint64 `json:"default_fee"` MinimumFee uint64 `json:"minimum_fee"` TotalCoins string `json:"total_coins"` PosAllowed bool `json:"pos_allowed"` // ... } ``` ## Full Daemon RPC Reference The following tables document all methods available on the C++ daemon. Methods marked with **(Go)** have typed Go client implementations. ### Node Information | Method | Description | Go | |--------|-------------|-----| | `getinfo` | Comprehensive node status | **(Go)** `GetInfo()` | | `getheight` | Current blockchain height | **(Go)** `GetHeight()` | | `getblockcount` | Total block count | **(Go)** `GetBlockCount()` | ### Block Queries | Method | Description | Go | |--------|-------------|-----| | `getblockhash` | Hash of block at height | -- | | `getblocktemplate` | Template for mining | -- | | `submitblock` | Submit mined block | **(Go)** `SubmitBlock()` | | `submitblock2` | Extended block submission | -- | | `get_last_block_header` | Most recent block header | **(Go)** `GetLastBlockHeader()` | | `get_block_header_by_hash` | Block header by hash | **(Go)** `GetBlockHeaderByHash()` | | `get_block_header_by_height` | Block header by height | **(Go)** `GetBlockHeaderByHeight()` | | `get_blocks_details` | Detailed block info (range) | **(Go)** `GetBlocksDetails()` | | `get_block_details` | Single block details | -- | | `get_alt_blocks_details` | Alternative chain blocks | -- | ### Transaction Queries | Method | Description | Go | |--------|-------------|-----| | `gettransactions` | Fetch txs by hash | **(Go)** `GetTransactions()` | | `get_tx_details` | Detailed tx information | **(Go)** `GetTxDetails()` | | `decrypt_tx_details` | Decrypt private tx data | -- | | `get_tx_global_outputs_indexes` | Global output indices | -- | | `search_by_id` | Search blocks/txs by hash | -- | | `get_est_height_from_date` | Estimate height from timestamp | -- | ### Transaction Pool | Method | Description | |--------|-------------| | `get_pool_info` | Pool status and pending aliases | | `get_tx_pool` | All pool transactions | | `get_pool_txs_details` | Detailed pool tx info | | `get_pool_txs_brief_details` | Brief pool tx summaries | | `get_all_pool_tx_list` | List all pool tx hashes | | `get_current_core_tx_expiration_median` | Expiration median timestamp | | `reset_tx_pool` | Clear transaction pool | | `remove_tx_from_pool` | Remove specific tx | ### Key Images | Method | Description | |--------|-------------| | `check_keyimages` | Check spent status (1=unspent, 0=spent) | ### Output Selection | Method | Description | Go | |--------|-------------|-----| | `get_random_outs` | Random outputs for mixing | **(Go)** `GetRandomOutputs()` | | `get_random_outs3` | Version 3 random outputs | -- | | `get_multisig_info` | Multisig output details | -- | | `get_global_index_info` | Global output index stats | -- | ### Alias Operations | Method | Description | |--------|-------------| | `get_alias_details` | Resolve alias to address | | `get_alias_reward` | Cost to register alias | | `get_all_aliases` | List all registered aliases | | `get_aliases` | Paginated alias list | | `get_aliases_by_address` | Aliases for an address | | `get_integrated_address` | Create integrated address | ### Asset Operations | Method | Description | |--------|-------------| | `get_asset_info` | Asset details by ID | | `get_assets_list` | List registered assets | ### Mining Control | Method | Description | |--------|-------------| | `start_mining` | Start PoW mining | | `stop_mining` | Stop PoW mining | | `get_pos_mining_details` | PoS staking details | ### Raw Transaction | Method | Description | Go | |--------|-------------|-----| | `sendrawtransaction` | Broadcast raw tx | **(Go)** `SendRawTransaction()` | | `force_relay` | Force relay tx blobs | -- | ### Binary Endpoints Some methods use binary (epee portable storage) serialisation for performance: | Endpoint | Description | |----------|-------------| | `/getblocks.bin` | Fast block sync | | `/get_o_indexes.bin` | Output global indices | | `/getrandom_outs.bin` | Random outputs for ring construction | ## Full Wallet RPC Reference ### Wallet State | Method | Description | |--------|-------------| | `getbalance` | Account balance (total + unlocked) | | `getaddress` | Wallet address | | `get_wallet_info` | Wallet metadata | | `get_wallet_restore_info` | Seed phrase for backup | | `get_seed_phrase_info` | Validate a seed phrase | | `store` | Save wallet to disk | ### Transfers | Method | Description | |--------|-------------| | `transfer` | Send LTHN (destinations, fee, mixin, payment_id, comment) | | `get_payments` | Payments by payment ID | | `get_bulk_payments` | Payments for multiple IDs | | `get_recent_txs_and_info` | Recent transaction history | | `search_for_transactions` | Search wallet transactions | ### Address Utilities | Method | Description | |--------|-------------| | `make_integrated_address` | Create integrated address | | `split_integrated_address` | Decode integrated address | ### Alias Management | Method | Description | |--------|-------------| | `register_alias` | Register new alias | | `update_alias` | Update alias details | ### Offline Signing | Method | Description | |--------|-------------| | `sign_transfer` | Sign an unsigned tx | | `submit_transfer` | Broadcast signed tx | ### Output Management | Method | Description | |--------|-------------| | `sweep_below` | Consolidate small outputs | | `get_bare_outs_stats` | Statistics of bare outputs | | `sweep_bare_outs` | Convert bare outputs to confidential | ### HTLC (Hash Time-Locked Contracts) | Method | Description | |--------|-------------| | `create_htlc_proposal` | Create HTLC proposal | | `get_list_of_active_htlc` | List active HTLCs | | `redeem_htlc` | Redeem HTLC with preimage | | `check_htlc_redeemed` | Check redemption status | ### Ionic Swaps | Method | Description | |--------|-------------| | `ionic_swap_generate_proposal` | Create swap proposal | | `ionic_swap_get_proposal_info` | Decode swap proposal | | `ionic_swap_accept_proposal` | Accept and execute swap | ### Asset Operations | Method | Description | |--------|-------------| | `assets_deploy` | Register new asset (ticker, name, supply) | | `assets_emit` | Emit additional supply | | `assets_update` | Update asset metadata | | `assets_burn` | Burn asset supply | | `assets_whitelist_get` | Get whitelisted assets | | `assets_whitelist_add` | Whitelist an asset | | `assets_whitelist_remove` | Remove from whitelist | ### Escrow Contracts | Method | Description | |--------|-------------| | `contracts_send_proposal` | Send escrow proposal | | `contracts_accept_proposal` | Accept escrow proposal | | `contracts_get_all` | List all contracts | | `contracts_release` | Release escrow funds | | `contracts_request_cancel` | Request cancellation | | `contracts_accept_cancel` | Accept cancellation | ### Marketplace | Method | Description | |--------|-------------| | `marketplace_get_my_offers` | List own offers | | `marketplace_push_offer` | Create offer | | `marketplace_push_update_offer` | Update offer | | `marketplace_cancel_offer` | Cancel offer | ### Cryptographic Utilities | Method | Description | |--------|-------------| | `sign_message` | Sign arbitrary message | | `encrypt_data` | Encrypt data | | `decrypt_data` | Decrypt data | ## Wire Format Notes - **Daemon JSON-RPC:** Standard JSON-RPC 2.0 at `/json_rpc`. Method calls use `{"method": "getinfo", "params": {...}}`. - **Wallet JSON-RPC:** Same format at `/json_rpc` on the wallet RPC port. - **Binary endpoints:** Use epee portable storage serialisation, accessed via direct HTTP POST to the endpoint path. - **P2P protocol:** Uses the Levin binary protocol (see [Networking](networking.md)), not JSON-RPC.