#solana #gmx-solana #gmx #audit

gmsol-decode

GMX-Solana is an extension of GMX on the Solana blockchain

3 releases

new 0.5.0-beta.6 May 15, 2025
0.5.0-beta.2 May 12, 2025

#79 in Magic Beans

Download history 219/week @ 2025-05-07

219 downloads per month
Used in 2 crates

Custom license

370KB
7.5K SLoC

GMX-Solana

Crates.io Docs.rs npm

Audits

Program Last Audit Date Version
gmsol-store 2025-03-07 2a66761
gmsol-treasury 2025-03-07 2a66761
gmsol-timelock 2025-03-07 2a66761

Integration

Method 1: Using the Rust SDK

Add the following to your Cargo.toml:

[dependencies]
gmsol-sdk = { version = "0.5.0", features = ["client"] }

Create a Client and start using the core APIs:

use gmsol_sdk::{
    Client,
    ops::ExchangeOps,
    solana_utils::{
        cluster::Cluster,
        solana_sdk::{pubkey::Pubkey, signature::read_keypair_file},
    },
};

let keypair =
    read_keypair_file(std::env::var("KEYPAIR")?)?;
let market_token: Pubkey = std::env::var("MARKET_TOKEN")?.parse()?;

let client = Client::new(Cluster::Mainnet, &keypair)?;
let store = client.find_store_address("");

let (txn, order) = client
    .market_increase(
        &store,
        &market_token,
        true,
        5_000_000,
        true,
        500_000_000_000_000_000_000,
    )
    .build_with_address()
    .await?;

let signature = txn.send().await?;

Method 2: Using declare_program!

1. Initialize a new Rust project and add dependencies

Create a new Rust project and include anchor_lang and bytemuck as dependencies:

[dependencies]
anchor-lang = "0.30.1"
bytemuck = { version = "1.19.0", features = ["min_const_generics"] }

2. Download and Store IDLs in {PROJECT_ROOT}/idls/

You can retrieve the IDLs using the anchor CLI or download them directly from the explorer (gmsol-store Program and gmsol-treasury Program).

Once downloaded, move them to the {PROJECT_ROOT}/idls/ directory.

Your project structure should now look like this:

{PROJECT_ROOT}/
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── idls
   ├── gmsol_store.json
   └── gmsol_treasury.json
└── src
    └── lib.rs

3. Declaring Programs in lib.rs

Use declare_program! to register the gmsol-store and gmsol-treasury programs:

use anchor_lang::declare_program;

declare_program!(gmsol_store);
declare_program!(gmsol_treasury);

4. Build and Open the Documentation

Run the following command to generate and view the documentation:

cargo doc --open

If the build is successful, it will automatically open the documentation in your default web browser.

5. Example Project

For a working implementation, check out the gmx-solana-programs.

Development

Prerequisites

Commands

To run all tests:

just

To install the gmsol CLI:

cargo install-gmsol

Use the following command to verify the CLI is installed properly:

gmsol --version

Troubleshooting

1. Failed to start test-validator on MacOS

Error Message:

Error: failed to start validator: Failed to create ledger at test-ledger: io error: Error checking to unpack genesis archive: Archive error: extra entry found: "._genesis.bin" Regular

Posssible Solution:

Check this comment.

Dependencies

~20–39MB
~700K SLoC