# in3-rs
Rust bindings for the Incubed C library.
The Incubed client is a
- Crypto-Economic
- Non-syncronizing and stateless, but fully verifying
- Minimal resource consuming
blockchain client (Crypto-Economic Client, Minimal Verification Client, Ultra Light Client).
```toml
[dependencies]
in3 = "0.0.2"
```
Links:
- **[Crate](https://crates.io/crates/in3)**
- **[API](https://docs.rs/in3/)**
## Requirements
- Rust compiler version >= 1.42.0 -> `rustc --version`
- A toolchain capable of compiling IN3 C sources
- Ubuntu: `apt-get install build-essential`
- Windows: `https://visualstudio.microsoft.com/visual-cpp-build-tools/`
- OpenSSL dev libs
- Ubuntu: `apt-get install libssl-dev`
- Windows: _TODO_
- CMake version >= 3.5.1, because we build the bundled IN3 C library with the [`cmake` crate](https://github.com/alexcrichton/cmake-rs)
- Ubuntu: `apt-get install cmake`
- Windows: `https://cmake.org/install/`, _Make sure you add it to path for windows_
- [bindgen](https://github.com/rust-lang/rust-bindgen) and therefore clang dev libraries
- Ubuntu: `apt-get install clang libclang-dev llvm-dev`
- Windows: _TODO_
> in3-rs uses the [`in3-sys`](https://github.com/blockchainsllc/in3/tree/master/rust/in3-sys) to provide low-level bindings to the IN3 C library.
## Features
- `blocking`- Enables the blocking API which depends on [async-std](https://github.com/async-rs/async-std).
## Example
Cargo.toml
```toml
[dependencies]
async-std = "1.5.0"
in3 = "0.2.0"
```
main.rs
```rust
use std::convert::TryInto;
use async_std::task;
use in3::eth1::*;
use in3::prelude::*;
fn main() -> In3Result<()> {
let mut eth_api = Api::new(Client::new(chain::MAINNET));
eth_api.client().configure(r#"{"autoUpdateList":false,"nodes":{"0x1":{"needsUpdate":false}}}}"#)?;
let latest_blk_num: u64 = task::block_on(eth_api.block_number())?.try_into()?;
println!("Latest block number is {:?}", latest_blk_num);
Ok(())
}
```
## Contributing
#### Instructions for running the tests
1. To run the tests you need to first run the build script. `./scripts/build_rust.sh`.
2. Navigate to the rust binding folder. `cd rust`
3. Then run the test using **cargo** and an additional option `RUST_TEST_THREADS=1`. This can be done via `RUST_TEST_THREADS=1 cargo test`.