{"id":21060659,"url":"https://github.com/mschneider/solcpp","last_synced_at":"2025-10-26T02:14:45.282Z","repository":{"id":39903989,"uuid":"457156598","full_name":"mschneider/solcpp","owner":"mschneider","description":"A fast Solana and Mango Markets C++ SDK","archived":false,"fork":false,"pushed_at":"2022-12-09T07:33:07.000Z","size":18294,"stargazers_count":50,"open_issues_count":22,"forks_count":16,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-05-13T11:53:38.256Z","etag":null,"topics":["boost","cpp","mango","mangomarkets","solana","solcpp"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mschneider.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-02-09T00:50:25.000Z","updated_at":"2025-04-07T05:52:41.000Z","dependencies_parsed_at":"2022-08-27T21:43:19.761Z","dependency_job_id":null,"html_url":"https://github.com/mschneider/solcpp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mschneider%2Fsolcpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mschneider%2Fsolcpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mschneider%2Fsolcpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mschneider%2Fsolcpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mschneider","download_url":"https://codeload.github.com/mschneider/solcpp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448040,"owners_count":22072755,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boost","cpp","mango","mangomarkets","solana","solcpp"],"created_at":"2024-11-19T17:18:37.259Z","updated_at":"2025-10-26T02:14:45.194Z","avatar_url":"https://github.com/mschneider.png","language":"C++","readme":"# solcpp - A fast Solana and Mango Markets C++ SDK.\nA fast C++ SDK to interact with Solana and Mango Markets. The SDK also includes a collection of examples to send transactions to Solana and trade on Mango Markets.\n\nIf you are experienced in c++ dev and want to work on this full-time, contact [@m_schneider](https://twitter.com/m_schneider) on Twitter.\n\n## Install\n### 1. `libsol` - Solana SDK\nInstall as a static lib(faster compile times). See [building](#building).\n\nSee example [CMakeLists.txt](https://github.com/mschneider/solcpp/blob/main/tests/CMakeLists.txt) on how to use.\n\n### 2. Mango Markets SDK\n#### Header only\nCopy the include [folder](https://github.com/mschneider/solcpp/tree/main/include) to your build tree and use a C++17 compiler.\nThe Mango Markets SDK depends on `libsol` above.\n## Usage examples\n\n### 1. Load and decode account info\n```cpp\n#include \"solana.hpp\"\n\nconst auto accountPubkey = \"\u003cpub key\u003e\";\nconst auto rpc_url = \"\u003crpc url\u003e\";\nauto connection = solana::rpc::Connection(rpc_url);\nstruct MyAccountInfo {\n    int64_t basePosition;\n    i80f48 quotePosition;\n    i80f48 deposits[MAX_TOKENS];\n    ...\n};\nMyAccountInfo myAccountInfo =\n      connection.getAccountInfo\u003cMyAccountInfo\u003e(accountPubkey);\nstd::cout \u003c\u003c myAccoutInfo.basePosition \u003c\u003c std::endl;\n```\nSee full [example](https://github.com/mschneider/solcpp/blob/main/examples/positions.cpp#L11).\n### 2. Send Transaction\n```cpp\n#include \"solana.hpp\"\n\n// 1. fetch recent blockhash to anchor tx to\nauto recentBlockHash = connection.getLatestBlockhash();\n\n// 2. assemble tx\nconst solana::PublicKey feePayer = solana::PublicKey::fromBase58(\n  \"\u003cfee payer\u003e\");\nconst solana::PublicKey memoProgram =\n  solana::PublicKey::fromBase58(solana::MEMO_PROGRAM_ID);\nconst std::string memo = \"Hello \\xF0\\x9F\\xA5\\xAD\";\n\nconst solana::CompiledInstruction ix = {\n  1, {}, std::vector\u003cuint8_t\u003e(memo.begin(), memo.end())};\n\nconst solana::CompiledTransaction tx = {\n  recentBlockHash, {feePayer, memoProgram}, {ix}, 1, 0, 1};\n\n// 3. send \u0026 sign tx\nconst auto keypair =\n  solana::Keypair::fromFile(\"id.json\");\nconst auto b58Sig = connection.sendTransaction(keypair, tx);\nspdlog::info(\n  \"sent tx. check: https://explorer.solana.com/tx/{}?cluster=devnet\",\n  b58Sig);\n```\nSee full [example](https://github.com/mschneider/solcpp/blob/main/examples/sendTransaction.cpp).\n### 3. Place Mango Perp Order\nSee full [example](https://github.com/mschneider/solcpp/blob/main/examples/placeOrder.cpp).\n### 4. Subscribe to Account updates(fills)\nSee full [example](https://github.com/mschneider/solcpp/blob/main/examples/accountSubscribe.cpp).\n### 5. Build complex transactions(atomic cancel and replace)\nSee full [example](https://github.com/mschneider/solcpp/blob/main/examples/placeOrder.cpp).\n### 5. Calculate Mango Account Health\n```cpp\n#include \"MangoAccount.hpp\"\n\nconst auto\u0026 mangoAccountInfo =\n  connection.getAccountInfo\u003cmango_v3::MangoAccountInfo\u003e(accountPubkey);\nmango_v3::MangoAccount mangoAccount =\n  mango_v3::MangoAccount(mangoAccountInfo);\nauto openOrders = mangoAccount.loadOpenOrders(connection);\nauto group = connection.getAccountInfo\u003cmango_v3::MangoGroup\u003e(config.group);\nauto cache = connection.getAccountInfo\u003cmango_v3::MangoCache\u003e(\n  group.mangoCache.toBase58());\nauto maintHealth =\n  mangoAccount.getHealth(group, cache, mango_v3::HealthType::Maint);\nauto initHealth =\n  mangoAccount.getHealth(group, cache, mango_v3::HealthType::Init);\nauto maintHealthRatio =\n  mangoAccount.getHealthRatio(group, cache, mango_v3::HealthType::Maint);\n```\nSee full [example](https://github.com/mschneider/solcpp/blob/main/examples/positions.cpp#L7).\n## Building\nThe project uses [conan.io](https://conan.io/) to manage dependencies. Install Conan [here](https://conan.io/downloads.html).\n```sh\n$ git clone https://github.com/mschneider/solcpp.git\n# Create a default profile or copy over the example for linux / macos\n$ conan profile new default --detect\n$ cd solcpp \u0026\u0026 mkdir build \u0026\u0026 cd build\n$ conan install .. --build=missing -o:h boost:without_contract=True -o:h boost:without_fiber=True -o:h boost:without_graph=True -o:h boost:without_graph_parallel=True -o:h boost:without_json=True -o:h boost:without_log=True -o:h boost:without_math=True -o:h boost:without_mpi=True -o:h boost:without_nowide=True -o:h boost:without_program_options=True -o:h boost:without_python=True -o:h boost:without_stacktrace=True -o:h boost:without_test=True -o:h boost:without_timer=True -o:h boost:without_type_erasure=True -o:h boost:without_wave=True\n$ cmake .. -G \"Unix Makefiles\" -DCMAKE_BUILD_TYPE=Release\n$ cmake --build .\n$ ./bin/tests # Run tests\n$ ./bin/example-send-transaction # Run sendTransaction example\n```\n\n## Dependencies\n- C++17\n- boost 1.76.0 [Boost]\n- cpr 1.7.2 [MIT]\n- curl 7.81.0 [MIT]\n- doctest 2.4.8 [MIT]\n- sodium 1.0.18 [ISC]\n- websocketpp 0.8.2 [BSD]\n- nlohmann-json 3.10.5 [MIT]\n\n## Notes\n- _If you have issues building libcurl on gcc-9, try clang. See\n  [issue](https://github.com/curl/curl/issues/4821)._\n\n- _If you have issues linking cpr on linux gcc, try compiling with\n  `libcxx=libstdc++11`. See [issue](https://github.com/libcpr/cpr/issues/125)._\n\n- _In addition, some dependencies were directly included and slightly modified to\n  work well with the rest of the code base._\n    - [bitcoin/libbase58](https://github.com/bitcoin/libbase58/tree/b1dd03fa8d1be4be076bb6152325c6b5cf64f678) [MIT]\n    - [base64](https://stackoverflow.com/a/37109258/18072933) [CC BY-SA 4.0]\n    - [cpp-utilities/fixed](https://github.com/eteran/cpp-utilities/blob/master/fixed/include/cpp-utilities/fixed.h)\n      [MIT]\n## Contributing\n1. Build the project locally using the [building](#building) steps above.\n\n2. Pick one of the issues or add your feature and send in your PR :).\n\n3. Add a unit test [here](https://github.com/mschneider/solcpp/blob/main/tests/main.cpp) to verify and guard your change.\n\n## Documentation\nMango Markets documentation can be found [here](https://docs.mango.markets/development-resources/client-libraries).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmschneider%2Fsolcpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmschneider%2Fsolcpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmschneider%2Fsolcpp/lists"}