soroban_client/
lib.rs

1#![warn(missing_docs)]
2//! A rust client library for interacting with Soroban smart contracts on the stellar blockchain
3//! through the [Stellar RPC]
4//!
5//!
6//!# Example: Create account on testnet and fetch balance using simulation
7//!```rust
8//! # use soroban_client::*;
9//! # use soroban_client::account::Account;
10//! # use soroban_client::address::Address;
11//! # use soroban_client::address::AddressTrait;
12//! # use soroban_client::contract::Contracts;
13//! # use soroban_client::contract::ContractBehavior;
14//! # use soroban_client::network::Networks;
15//! # use soroban_client::network::NetworkPassphrase;
16//! # use soroban_client::xdr::Int128Parts;
17//! # use soroban_client::xdr::ScVal;
18//! # use soroban_client::xdr::int128_helpers::i128_from_pieces;
19//! # use soroban_client::keypair::Keypair;
20//! # use soroban_client::keypair::KeypairBehavior;
21//! # use soroban_client::transaction::AccountBehavior;
22//! # use soroban_client::transaction::TransactionBuilderBehavior;
23//! # use soroban_client::transaction_builder::TransactionBuilder;
24//! #[tokio::main]
25//!async fn main() {
26//!    let rpc = Server::new("https://soroban-testnet.stellar.org", Options::default()).unwrap();
27//!
28//!    let native_id = "CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC";
29//!    let native_sac = Contracts::new(native_id).unwrap();
30//!
31//!    // Generate an account
32//!    let kp = Keypair::random().unwrap();
33//!
34//!    // Create the account using friendbot
35//!    let account = rpc.request_airdrop(&kp.public_key()).await.unwrap();
36//!
37//!    let mut source_account = Account::new(&kp.public_key(), &account.sequence_number()).unwrap();
38//!
39//!
40//!    let account_address = Address::new(&kp.public_key()).unwrap();
41//!    let tx = TransactionBuilder::new(&mut source_account, Networks::testnet(), None)
42//!        .fee(1000u32)
43//!        .add_operation(
44//!            native_sac.call(
45//!                "balance",
46//!                Some(vec![account_address.to_sc_val().unwrap()])))
47//!        .build();
48//!
49//!    let response = rpc.simulate_transaction(&tx, None).await.unwrap();
50//!    if let Some((ScVal::I128(Int128Parts { hi, lo }), _auth)) = response.to_result() {
51//!        // Divide to convert from stroops to XLM
52//!        let balance = i128_from_pieces(hi, lo) / 10000000;
53//!        println!("Account {} has {} XLM", kp.public_key(), balance);
54//!    }
55//!}
56//!```
57//!
58//!# Example: Fetching last 3 transfer events from the native asset contract on testnet
59//!```rust
60//! # use soroban_client::*;
61//! # use soroban_client::network::Networks;
62//! # use soroban_client::network::NetworkPassphrase;
63//! # use soroban_client::xdr::ScVal;
64//! # use soroban_client::soroban_rpc::*;
65//! # use soroban_client::xdr::ScSymbol;
66//! # use soroban_client::xdr::ScString;
67//!#[tokio::main]
68//!async fn main() {
69//!    let rpc = Server::new("https://soroban-testnet.stellar.org", Options::default()).unwrap();
70//!
71//!    let native_id = "CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC";
72//!
73//!    let response = rpc.get_latest_ledger().await.unwrap();
74//!    let ledger = response.sequence;
75//!
76//!    let transfer = ScVal::Symbol(ScSymbol("transfer".try_into().unwrap()));
77//!    let native = ScVal::String(ScString("native".try_into().unwrap()));
78//!    let events = rpc
79//!        .get_events(
80//!            Pagination::From(ledger - 100),
81//!            vec![EventFilter::new(crate::soroban_rpc::EventType::All)
82//!                .contract(native_id)
83//!                .topic(vec![
84//!                    Topic::Val(transfer),
85//!                    Topic::Any, // From account
86//!                    Topic::Any, // To account
87//!                    Topic::Val(native),
88//!                ])],
89//!            3
90//!        )
91//!        .await
92//!        .unwrap();
93//!
94//!    println!("{:?}", events);
95//!}
96//! ```
97//! [Stellar RPC]: https://developers.stellar.org/docs/data/rpc
98
99/// Current version of this crate
100pub static VERSION: &str = env!("CARGO_PKG_VERSION");
101pub use crate::server::*;
102/// Error module
103pub mod error;
104/// Soroban bindings
105pub mod soroban_rpc;
106/// Transaction module
107pub mod transaction;
108pub use stellar_baselib::*;
109
110// for now, not public
111//mod contract_spec;
112mod friendbot;
113mod jsonrpc;
114mod server;
115
116#[cfg(test)]
117mod tests;