#monero #net #asynchronous #rpc #client-builder

monero-rpc

RPC client for Monero daemon and wallet

5 releases (3 breaking)

0.4.0 Sep 15, 2023
0.3.2 Dec 13, 2022
0.2.0 Aug 1, 2022
0.1.0 Jun 29, 2022

#18 in #monero


Used in 4 crates

Apache-2.0

79KB
2K SLoC

Build Status unsafe forbidden Crates.io Documentation License MSRV

Monero Daemon & Wallet RPC

Monero daemon and wallet RPC written in asynchronous Rust 🦀.

Example with tokio::test

Create the RPC client and transform it into a deamon RPC to call /get_transactions method and print the result.

use monero_rpc::{RpcClientBuilder, JsonTransaction};

#[tokio::test]
async fn monero_daemon_transactions_test() {
    let tx_id = "7c50844eced8ab78a8f26a126fbc1f731134e0ae3e6f9ba0f205f98c1426ff60".to_string();
    let rpc_client = monero_rpc::RpcClientBuilder::new()
        .build("http://node.monerooutreach.org:18081")
        .unwrap();
    let daemon_rpc_client = rpc_client.daemon_rpc();
    let mut fixed_hash: [u8; 32] = [0; 32];
    hex::decode_to_slice(tx_id, &mut fixed_hash).unwrap();
    let tx = daemon_rpc_client
        .get_transactions(vec![fixed_hash.into()], Some(true), Some(true))
        .await;
    println!("tx {:?}", tx);
    println!(
        "unlock time: {:?}",
        serde_json::from_str::<JsonTransaction>(&tx.unwrap().txs_as_json.unwrap()[0])
    );
}

Testing

First, you'll need docker and docker compose to run the RPC integration tests, which are in tests/, in case you don't want to run monerod and monero-wallet-rpc on your own.

If you have the docker stack installed, go to the tests folder and run docker compose up. Note that the daemon will run on port 18081 and monero-wallet-rpc will run on port 18083.

After that, just run cargo test as you normally would.

Also, you can run docker compose down to stop and remove the two containers started by docker compose up.

Important: the blockchain must be empty when running the main_functional_test test on tests/rpc.rs, i.e. it must have only the genesis block. In regtest, the blockchain restarts when monerod restarts (as a side note, if you want to keep the blockchain in regtest between restarts, you should pass the --keep-fakechain flag when starting monerod).

Releases and Changelog

See CHANGELOG.md and RELEASING.md.

Licensing

The code in this project is licensed under the Apache-2.0

Dependencies

~8–22MB
~315K SLoC