```rust use safe_sdk::SafeClient;
/// From a chain id, by looking up hardcoded endpoints let client = SafeClient::bychainid(1);
/// From mainnet ethereum let client = SafeClient::ethereum();
/// From an endpoint/chain ID pair let service = safesdk::networks::TxService { url: "". chainid: 0}; let client = SafeClient::new(service); ```
```rust use safe_sdk::SigningClient;
/// From an ethers signer let client = SigningClient::tryfromsigner(ethers_signer);
/// From ethereum with an ethers signer /// overrides the chainid of the signer let client = SigningClient::ethereum(etherssigner);
/// From a service and signer let service = safesdk::networks::TxService { url: "". chainid: 0}; let client = SigningClient::withserviceandsigner(service, etherssigner);
/// From an existing SafeClient let client = safeclient.withsigner(ethers_signer); ```
```rust use safe_sdk::rpc::info::SafeInfoResponse;
/// Read info let info: SafeInfoResponse = client.safeinfo(safeaddress).await?; dbg!(&info.nonce); // u64 of on-chain Nonce dbg!(&info.owners) // vec of addresses
/// Get next available nonce let nextnonce = client.nextnonce(safe_address).await?;
/// Get SAFE msig tx history let history = client.msighistorybuilder().query(safe_address).await?;
/// Get SAFE msig tx history by nonce range let history = client.msighistorybuilder() .minnonce(15) .maxnonce(25) .query(safe_address) .await?; ```
rust
let tx =
From<X> for MetaTransactionData