Work in progress repo of Rust client for dYdX (v3 API).
Install dydx-v3-rust from crates.io. Add the following line to your Cargo.toml
file's dependencies section:
rust
[dependencies]
dydx-v3-rust = "0.1.6"
tokio = { version = "1.18.2", features = ["full"] }
Sample code to call Get Markets API
```rust use dydxv3rust::{types::*, ClientOptions, DydxClient};
async fn main() { let options: ClientOptions = ClientOptions { networkid: None, apitimeout: None, apikeycredentials: None, starkprivatekey: None, ethprivatekey: None, }; let client = DydxClient::new("https://api.dydx.exchange", options); let response = client .public .getmarkets(Some(DydxMarket::BTCUSD)) .await .unwrap(); dbg!(response); } ```
Sample code to call Get Accounts API and then Create New Order API
```rust use chrono::{DateTime, Duration, Utc}; use dydxv3rust::{types::*, ClientOptions, DydxClient};
async fn main() { let apikey = types::ApiKeyCredentials { key: "YOUR-API-KEY", secret: "YOUR-API-SECRET", passphrase: "YOUR-API-PASSPHRASE", }; let options = ClientOptions { networkid: Some(1), apitimeout: None, apikeycredentials: Some(apikey), starkprivatekey: Some("YOUR-STARK-PRIVATE-KEY"), ethprivatekey: None, // specify if you call onboarding or ethPrivate functions }; let client = DydxClient::new("https://api.dydx.exchange", options); let private = &client.private.unwrap();
let response = private.get_account("YOUR-ETHEREUM-ADDRESS").await.unwrap();
dbg!(&response);
let datetime_now: DateTime<Utc> = Utc::now();
let expiration = datetime_now + Duration::minutes(3);
let expiration_unix = expiration.timestamp();
let position_id = response.account.position_id.as_str();
let order_params = ApiOrderParams {
position_id: position_id,
market: DydxMarket::BTC_USD,
side: OrderSide::BUY,
type_field: OrderType::MARKET,
time_in_force: TimeInForce::FOK,
post_only: false,
size: "0.01",
price: "100000",
limit_fee: "0.1",
cancel_id: None,
trigger_price: None,
trailing_percent: None,
expiration: expiration_unix,
};
let order = private.create_order(order_params).await.unwrap();
dbg!(order);
} ```
see more examples in tests folder
To call following APIs, you need python shared library to generate signature through PyO3 and web3.py.
Here is sample installation steps via pyenv
```sh
brew install pyenv
$ echo 'export PYENVROOT="$HOME/.pyenv"' >> ~/.bashprofile $ echo 'export PATH="$PYENVROOT/bin:$PATH"' >> ~/.bashprofile $ echo 'eval "$(pyenv init -)"' >> ~/.bashprofile $ source ~/.bashprofile
env PYTHONCONFIGUREOPTS="--enable-shared" pyenv install 3.9.9 pyenv local 3.9.9 ```
Full installation guide: https://github.com/pyenv/pyenv#set-up-your-shell-environment-for-pyenv
Then run pip install.
sh
pip install -r requirements.txt
sh
cargo test