Go to file
Godmode Galactus 8972afb236
Adding configuration files in same repo
2023-06-26 12:37:08 +02:00
configure_cluster Adding configuration files in same repo 2023-06-26 12:37:08 +02:00
src reset tpu client from time to time 2023-05-12 11:18:07 +02:00
.gitignore Initial commit moving mango bench from solana to a new project 2022-09-02 16:26:44 +02:00
Cargo.lock batch mm txs 2023-04-18 15:00:57 +00:00
Cargo.toml batch mm txs 2023-04-18 15:00:57 +00:00
README.md Adding configuration files in same repo 2023-06-26 12:37:08 +02:00
package.json Adding configuration files in same repo 2023-06-26 12:37:08 +02:00
rust-toolchain.toml Add metrics to influx (#21) 2023-03-03 08:52:33 -08:00
tsconfig.json Adding configuration files in same repo 2023-06-26 12:37:08 +02:00
yarn.lock Adding configuration files in same repo 2023-06-26 12:37:08 +02:00

README.md

Mango Simulation - test solana cluster by simulating mango markets

This project is use to stress a solana cluster like devnet, testnet or local solana cluster by simulating mango markets. This code requires ids.json which describe mango group for a cluster and accounts.json file which has preconfigured user accounts in mango.

The code then will create transaction request (q) requests per seconds for (n) seconds per perp market perp user. Each transaction request will contains remove following instruction CancelAllPerpOrders and two PlacePerpOrder (one for bid and another for ask).

For the best results to avoid limits by quic it is better to fill the argument "identity" of a valid staked validator for the cluster you are testing with.

Build

git clone https://github.com/blockworks-foundation/mango-simulation.git
cd mango-simulation
cargo build --release

Configure cluster

Install all nodejs dependencies

yarn install

To start a local cluster. This will start a validator with all the data in config directory.

sh configure_cluster/scripts/configure_local.sh

To create a configuration. This will create two files ids.json which contain cluster information and account.json which contains user information.

# open a new terminal as the previous one will continue running a solana validator
# this command will hang for around a minute, just wait for it to finish
NB_USERS=50 yarn ts-node configure_cluster/configure_mango_v3.ts

Run

To run against your local validator:

cargo run --bin mango-simulation -- -u http://127.0.0.1:8899 --identity config/validator-identity.json --keeper-authority authority.json --accounts accounts.json  --mango ids.json --mango-cluster localnet --duration 10 -q 2 --transaction-save-file tlog.csv --block-data-save-file blog.csv

You can also run the simulation against testnet, but you will need to run configure_mango

Details for each argument:

USAGE:
    mango-simulation [OPTIONS] --accounts <FILENAME> --mango <FILENAME>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -a, --accounts <FILENAME>                 Read account keys from JSON file generated with mango-client-v3
        --batch-size <UINT>                   If specified, transactions are send in batches of specified size
    -b, --block-data-save-file <FILENAME>     To save details of all block containing mm transactions
    -C, --config <FILEPATH>                   Configuration file to use [default:
                                              /home/galactus/.config/solana/cli/config.yml]
    -d, --duration <SECS>                     Seconds to run benchmark, then exit; default is forever
    -n, --entrypoint <HOST:PORT>              Rendezvous with the cluster at this entry point; defaults to
                                              127.0.0.1:8001
    -i, --identity <FILEPATH>                 Identity used in the QUIC connection. Identity with a lot of stake has a
                                              better chance to send transaction to the leader
    -u, --url <URL_OR_MONIKER>                URL for Solana's JSON RPC or moniker (or their first letter): [mainnet-
                                              beta, testnet, devnet, localhost]
    -k, --keeper-authority <FILEPATH>         If specified, authority keypair would be used to pay for keeper
                                              transactions
    -c, --mango-cluster <STR>                 Name of mango cluster from ids.json
    -m, --mango <FILENAME>                    Read mango keys from JSON file generated with mango-client-v3
        --markets-per-mm <UINT>               Number of markets a market maker will trade on at a time
        --prioritization-fees <UINT>          Takes percentage of transaction we want to add random prioritization fees
                                              to, prioritization fees are random number between 100-1000
    -q, --quotes-per-second <QPS>             Number of quotes per second
    -t, --transaction-save-file <FILENAME>    To save details of all transactions during a run
        --ws <URL>                            WebSocket URL for the solana cluster