9 releases (5 breaking)
0.14.0 | Jul 4, 2024 |
---|---|
0.13.0 | Jul 24, 2023 |
0.12.1 | Jun 23, 2023 |
0.12.0 | Mar 19, 2023 |
0.10.0 | Nov 21, 2021 |
#6 in #monero
275KB
6K
SLoC
AcceptXMR
: Accept Monero in Your Application
AcceptXMR
is a library for building payment gateways.
For a batteries-included gateway, please see
AcceptXMR-Server
.
Getting Started
To use AcceptXMR
in your rust project, first add it to your Cargo.toml
. For
example if you intend to use the Sqlite
storage backend and need serde
support, you should add this to your Cargo.toml
:
[dependencies]
acceptxmr = { version = "0.12", features = ["serde", "sqlite"] }
You can then create and run a PaymentGateway
:
use acceptxmr::{PaymentGateway, storage::stores::Sqlite};
use std::time::Duration;
let private_view_key =
"ad2093a5705b9f33e6f0f0c1bc1f5f639c756cdfc168c8f2ac6127ccbdab3a03";
let primary_address =
"4613YiHLM6JMH4zejMB2zJY5TwQCxL8p65ufw8kBP5yxX9itmuGLqp1dS4tkVoTxjyH3aYhYNrtGHbQzJQP5bFus3KHVdmf";
let store = Sqlite::new("AcceptXMR_DB", "invoices")?;
let payment_gateway = PaymentGateway::builder(
private_view_key.to_string(),
primary_address.to_string(),
store
)
.daemon_url("https://node.example.com") // Specify a node.
.scan_interval(Duration::from_millis(500)) // Scan for updates every 500 ms.
.build()?;
payment_gateway.run()?;
Finally, you can create invoices and subscribe to them so you know when they get paid:
// Oh hey, a customer is checking out!
let invoice_id = payment_gateway.new_invoice(
100 * 10 ** 9, // We'll charge 100 millineros,
0, // require 0 confirmations,
10, // expire in 10 blocks,
"Large Cheese Pizza".to_string() // and get the order right.
).await?;
// We can now subscribe to updates to the pizza invoice.
let subscriber = payment_gateway.subscribe(invoice_id)?
.expect("invoice doesn't exist");
// Have we been paid yet?
let update = subscriber.recv().await.expect("channel closed");
if update.is_confirmed() {
// Great, ship the pizza and stop tracking the invoice.
println!("Invoice for \"{}\" paid", update.description());
payment_gateway.remove_invoice(invoice_id).await?;
}
For more detailed documentation, see docs.rs or the examples.
Dependencies
~21–33MB
~609K SLoC