skynetcap / solanaj

Solana RPC client written in Java
MIT License
82 stars 43 forks source link
solana

SolanaJ

License: MIT Java Version Maven Central Solana Java Documentation Discord GitHub Stars

Solana blockchain client, written in pure Java. SolanaJ is an API for integrating with Solana blockchain using the Solana RPC API.

This fork includes functionality for multiple Solana programs, including the Serum DEX.

Table of Contents

SolanaJ-Programs

For SolanaJ implementations of popular Solana programs such as Serum, please visit: https://github.com/skynetcap/solanaj-programs

🛠️ Requirements

📚 Dependencies

📦 Installation

Add the following Maven dependency to your project's pom.xml:

<dependency>
    <groupId>com.mmorrell</groupId>
    <artifactId>solanaj</artifactId>
    <version>1.19.2</version>
</dependency>

🏗️ Build

  1. In pom.xml, update the maven-gpg-plugin configuration with your homedir and keyname:
<configuration>
    <homedir>/home/your_username/.gnupg/</homedir>
    <keyname>YOUR_GPG_KEY_ID</keyname>
</configuration>
  1. Check if you have a GPG key:
gpg --list-secret-keys
  1. If no key is returned, create one:
gpg --full-generate-key
  1. Run the Maven install command:
mvn install

The build should complete successfully.

🚀 Examples

Transfer Lamports

RpcClient client = new RpcClient(Cluster.TESTNET);

PublicKey fromPublicKey = new PublicKey("QqCCvshxtqMAL2CVALqiJB7uEeE5mjSPsseQdDzsRUo");
PublicKey toPublickKey = new PublicKey("GrDMoeqMLFjeXQ24H56S1RLgT4R76jsuWCd6SvXyGPQ5");
int lamports = 3000;

Account signer = new Account(secret_key);

Transaction transaction = new Transaction();
transaction.addInstruction(SystemProgram.transfer(fromPublicKey, toPublickKey, lamports));

String signature = client.getApi().sendTransaction(transaction, signer);

Get Balance

RpcClient client = new RpcClient(Cluster.TESTNET);

long balance = client.getApi().getBalance(new PublicKey("QqCCvshxtqMAL2CVALqiJB7uEeE5mjSPsseQdDzsRUo"));

Get Serum Market + Orderbooks

final PublicKey solUsdcPublicKey = new PublicKey("7xMDbYTCqQEcK2aM9LbetGtNFJpzKdfXzLL5juaLh4GJ");
final Market solUsdcMarket = new MarketBuilder()
        .setClient(new RpcClient())
        .setPublicKey(solUsdcPublicKey)
        .setRetrieveOrderBooks(true)
        .build();

final OrderBook bids = solUsdcMarket.getBidOrderBook();

Send a Transaction with Memo Program

// Create account from private key
final Account feePayer = new Account(Base58.decode(new String(data)));
final Transaction transaction = new Transaction();

// Add instruction to write memo
transaction.addInstruction(
        MemoProgram.writeUtf8(feePayer.getPublicKey(),"Hello from SolanaJ :)")
);

String response = client.getApi().sendTransaction(transaction, feePayer);

🤝 Contributing

We welcome contributions to SolanaJ! Here's how you can help:

  1. Fork the repository
  2. Create a new branch (git checkout -b feature/your-feature-name)
  3. Make your changes
  4. Commit your changes (git commit -am 'Add some feature')
  5. Push to the branch (git push origin feature/your-feature-name)
  6. Create a new Pull Request

Please make sure to update tests as appropriate and adhere to the existing coding style.

📄 License

SolanaJ is open-source software licensed under the MIT License. See the LICENSE file for more details.