This is the Rust SDK for the Vertex Protocol API.
Instantiate a client on the chain you would like to interact with.
For example, ClientMode::Prod
to use Arbitrum and ClientMode::BaseProd
to use Base, etc.
A signer (private key) is required for executes.
A signer is not required for queries.
For requests with many parameters, use the client to build and send requests.
For simple queries (1-2 params) like get_market_price
, call directly from the client.
See basic_usage.rs
for an E2E example including depositing into Vertex.
use vertex_sdk::prelude::*;
async fn main() {
let client = VertexClient::new(ClientMode::Prod)
.with_signer(private_key())
.await
.unwrap();
const BTC_PERP: u32 = 2;
// query market data
let market_price = client.get_market_price(BTC_PERP).await.unwrap();
// place orders
let place_order_response = client
.place_order_builder()
.product_id(BTC_PERP)
.amount(to_i128_x18(1))
.price_x18(market_price.ask_x18)
.execute()
.await
.unwrap();
let digest = place_order_response.unwrap().digest;
// cancel orders
client
.cancellation_builder()
.digests(vec![digest])
.product_ids(vec![BTC_PERP])
.execute()
.await
.unwrap();
}
Add the following line to your Cargo.toml file:
[dependencies]
vertex_sdk = "0.2.8"
See the examples and sanity directories.
cargo run -- --execute-sanity
: runs sanity checks for executes.cargo run -- --query-sanity
: runs sanity checks for engine queries.cargo run -- --indexer-sanity
: runs sanity checks for indexer queries.