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;