Skip to content

Commit 40d78e4

Browse files
committed
Release 0.1.0-beta.1
1 parent ec45e90 commit 40d78e4

37 files changed

+1322
-0
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/target
2+
Cargo.lock
3+
4+
*.swp

.travis.yml

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
language: rust
2+
rust:
3+
- stable
4+
# - 1.31.0 TODO: support the first 2018-edition toolchain
5+
before_script:
6+
- rustup component add rustfmt
7+
# Run tests and check a few combinations of features
8+
script:
9+
- cargo fmt -- --check --verbose
10+
- cargo test --verbose --all
11+
- cargo check --verbose --features=use-openssl
12+
- cargo check --verbose --no-default-features --features=proxy
13+
- cargo check --verbose --no-default-features --features=minimal
14+
- cargo check --verbose --no-default-features --features=minimal,debug-calls
15+
- cargo check --verbose --no-default-features --features=proxy,use-openssl
16+
- cargo check --verbose --no-default-features --features=proxy,use-rustls
17+
18+
before_cache:
19+
- rm -rf "$TRAVIS_HOME/.cargo/registry/src"
20+
cache: cargo
21+
22+
notifications:
23+
email: false

Cargo.toml

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
[package]
2+
name = "electrum-client"
3+
version = "0.1.0-beta.1"
4+
authors = ["Alekos Filini <[email protected]>"]
5+
license = "MIT"
6+
homepage = "https://github.com/MagicalBitcoin/rust-electrum-client"
7+
repository = "https://github.com/MagicalBitcoin/rust-electrum-client"
8+
documentation = "https://docs.rs/electrum-client/"
9+
description = "Bitcoin Electrum client library. Supports plaintext, TLS and Onion servers."
10+
keywords = ["bitcoin", "electrum"]
11+
readme = "README.md"
12+
exclude = [
13+
"test_data/*",
14+
]
15+
16+
# loosely based on https://github.com/evgeniy-scherbina/rust-electrumx-client
17+
18+
[lib]
19+
name = "electrum_client"
20+
path = "src/lib.rs"
21+
22+
[dependencies]
23+
log = "^0.4"
24+
bitcoin = { version = "0.23", features = ["use-serde"] }
25+
serde = { version = "^1.0", features = ["derive"] }
26+
serde_json = { version = "^1.0" }
27+
28+
# Optional dependencies
29+
socks = { version = "^0.3", optional = true }
30+
openssl = { version = "^0.10", optional = true }
31+
rustls = { version = "0.16.0", optional = true, features = ["dangerous_configuration"] }
32+
webpki = { version = "0.21.0", optional = true }
33+
webpki-roots = { version = "^0.19", optional = true }
34+
35+
[features]
36+
default = ["socks", "webpki", "webpki-roots", "rustls"]
37+
minimal = []
38+
debug-calls = []
39+
proxy = ["socks"]
40+
use-rustls = ["webpki", "webpki-roots", "rustls"]
41+
use-openssl = ["openssl"]

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# rust-electrum-client
2+
3+
Bitcoin Electrum client library. Supports plaintext, TLS and Onion servers.

examples/plaintext.rs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
extern crate electrum_client;
2+
3+
use electrum_client::Client;
4+
5+
fn main() {
6+
let mut client = Client::new("kirsche.emzy.de:50001").unwrap();
7+
let res = client.server_features();
8+
println!("{:#?}", res);
9+
}

examples/ssl.rs

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
extern crate electrum_client;
2+
3+
use electrum_client::Client;
4+
5+
fn main() {
6+
let mut client = Client::new_ssl(
7+
"electrum2.hodlister.co:50002",
8+
Some("electrum2.hodlister.co"),
9+
)
10+
.unwrap();
11+
let res = client.server_features();
12+
println!("{:#?}", res);
13+
}

examples/tor.rs

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
extern crate electrum_client;
2+
3+
use electrum_client::Client;
4+
5+
fn main() {
6+
// NOTE: This assumes Tor is running localy, with an unauthenticated Socks5 listening at
7+
// localhost:9050
8+
9+
let mut client = Client::new_proxy("ozahtqwp25chjdjd.onion:50001", "127.0.0.1:9050").unwrap();
10+
let res = client.server_features();
11+
println!("{:#?}", res);
12+
13+
// works both with onion v2/v3 (if your Tor supports them)
14+
let mut client = Client::new_proxy(
15+
"v7gtzf7nua6hdmb2wtqaqioqmesdb4xrlly4zwr7bvayxv2bpg665pqd.onion:50001",
16+
"127.0.0.1:9050",
17+
)
18+
.unwrap();
19+
let res = client.server_features();
20+
println!("{:#?}", res);
21+
}

src/batch.rs

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
use bitcoin::hashes::hex::ToHex;
2+
use bitcoin::{Script, Txid};
3+
4+
use types::{Param, ToElectrumScriptHash};
5+
6+
pub struct Batch {
7+
calls: Vec<(String, Vec<Param>)>,
8+
}
9+
10+
impl Batch {
11+
pub fn script_list_unspent(&mut self, script: &Script) {
12+
let params = vec![Param::String(script.to_electrum_scripthash().to_hex())];
13+
self.calls
14+
.push((String::from("blockchain.scripthash.listunspent"), params));
15+
}
16+
17+
pub fn script_get_history(&mut self, script: &Script) {
18+
let params = vec![Param::String(script.to_electrum_scripthash().to_hex())];
19+
self.calls
20+
.push((String::from("blockchain.scripthash.get_history"), params));
21+
}
22+
23+
pub fn script_get_balance(&mut self, script: &Script) {
24+
let params = vec![Param::String(script.to_electrum_scripthash().to_hex())];
25+
self.calls
26+
.push((String::from("blockchain.scripthash.get_balance"), params));
27+
}
28+
29+
pub fn transaction_get(&mut self, tx_hash: &Txid) {
30+
let params = vec![Param::String(tx_hash.to_hex())];
31+
self.calls
32+
.push((String::from("blockchain.transaction.get"), params));
33+
}
34+
}
35+
36+
impl std::iter::IntoIterator for Batch {
37+
type Item = (String, Vec<Param>);
38+
type IntoIter = std::vec::IntoIter<Self::Item>;
39+
40+
fn into_iter(self) -> Self::IntoIter {
41+
self.calls.into_iter()
42+
}
43+
}
44+
45+
impl std::default::Default for Batch {
46+
fn default() -> Self {
47+
Batch { calls: Vec::new() }
48+
}
49+
}

0 commit comments

Comments
 (0)