mirror of
https://github.com/serai-dex/serai.git
synced 2025-01-30 22:46:06 +00:00
4a3178ed8f
A type alias of MoneroAddress is provided to abstract away the generic. To keep the rest of the library sane, MoneroAddress is used everywhere. If someone wants to use this library with another coin, they *should* be able to parse a custom address and then recreate it as a Monero address. While that's annoying to them, better them than any person using this lib for Monero. Closes #152.
49 lines
1.2 KiB
Rust
49 lines
1.2 KiB
Rust
use rand_core::OsRng;
|
|
|
|
use curve25519_dalek::constants::ED25519_BASEPOINT_TABLE;
|
|
|
|
use serde_json::json;
|
|
|
|
use monero_serai::{
|
|
Protocol, random_scalar,
|
|
wallet::address::{Network, AddressType, AddressMeta, MoneroAddress},
|
|
rpc::{EmptyResponse, RpcError, Rpc},
|
|
};
|
|
|
|
pub async fn rpc() -> Rpc {
|
|
let rpc = Rpc::new("http://127.0.0.1:18081".to_string()).unwrap();
|
|
|
|
// Only run once
|
|
if rpc.get_height().await.unwrap() != 1 {
|
|
return rpc;
|
|
}
|
|
|
|
let addr = MoneroAddress {
|
|
meta: AddressMeta::new(Network::Mainnet, AddressType::Standard),
|
|
spend: &random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE,
|
|
view: &random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE,
|
|
}
|
|
.to_string();
|
|
|
|
// Mine 20 blocks to ensure decoy availability
|
|
mine_block(&rpc, &addr).await.unwrap();
|
|
mine_block(&rpc, &addr).await.unwrap();
|
|
assert!(!matches!(rpc.get_protocol().await.unwrap(), Protocol::Unsupported(_)));
|
|
|
|
rpc
|
|
}
|
|
|
|
pub async fn mine_block(rpc: &Rpc, address: &str) -> Result<EmptyResponse, RpcError> {
|
|
rpc
|
|
.rpc_call(
|
|
"json_rpc",
|
|
Some(json!({
|
|
"method": "generateblocks",
|
|
"params": {
|
|
"wallet_address": address,
|
|
"amount_of_blocks": 10
|
|
},
|
|
})),
|
|
)
|
|
.await
|
|
}
|