⚡ Bringing Solana to Object Pascal.
SolLib is an Object Pascal SDK for the Solana blockchain, designed to integrate seamlessly with the Object Pascal ecosystem.
Whether you’re a seasoned developer or just getting started, SolLib provides clear examples, and powerful APIs that make building on Solana with Object Pascal simple and efficient.
- JSON RPC API coverage
- Streaming JSON RPC API coverage
- Wallet and accounts
- Keystore
- Transaction decoding/encoding (base64 and wire format)
- Message decoding/encoding (base64 and wire format)
- Instruction decompilation
- Programs
- Native Programs
- System Program
- Loader Programs
- BPF Loader Program
- Solana Program Library (SPL)
- Compute Budget Program
- Address Lookup Table Program
- Memo Program
- Token Program
- Token Swap Program
- Associated Token Account Program
- Shared Memory Program
- Native Programs
- Delphi 10.4 and Above
Add the SolLib sources and it's dependencies to your compiler search path.
A minimal example to fetch a balance and send a memo:
var
LRpc: IRpcClient;
LHttpClient: IHttpApiClient;
LWallet: IWallet;
LFrom: IAccount;
LBlock: IRequestResult<TResponseValue<TLatestBlockHash>>;
LBalance: IRequestResult<TResponseValue<UInt64>>;
LTxBytes: TBytes;
LSignature, LMnemonicWords: string;
LBuilder: ITransactionBuilder;
LPriorityFees: IPriorityFeesInformation;
begin
LHttpClient := THttpApiClient.Create();
LRpc := TClientFactory.GetClient(TCluster.MainNet, LHttpClient);
LMnemonicWords := 'Your Mnemonic Words';
LWallet := TWallet.Create(LMnemonicWords);
LFrom := LWallet.GetAccountByIndex(0);
// Get balance
LBalance := LRpc.GetBalance(LFrom.PublicKey.Key);
if LBalance.WasSuccessful then
Writeln(Format('Balance: %d lamports', [LBalance.Result.Value]))
else
Writeln('Balance: <unavailable>');
LBlock := LRpc.GetLatestBlockHash;
if (LBlock = nil) or (not LBlock.WasSuccessful) or (LBlock.Result = nil) then
raise Exception.Create('Failed to fetch recent blockhash.');
// Build priority fee information
LPriorityFees := TPriorityFeesInformation.Create(
TComputeBudgetProgram.SetComputeUnitLimit(400000), // limit
TComputeBudgetProgram.SetComputeUnitPrice(100000) // price (micro-lamports)
);
// Build transaction (Send a simple memo transaction)
LBuilder := TTransactionBuilder.Create;
LTxBytes :=
LBuilder
.SetRecentBlockHash(LBlock.Result.Value.Blockhash)
.SetFeePayer(LFrom.PublicKey)
.SetPriorityFeesInformation(LPriorityFees)
.AddInstruction(TMemoProgram.NewMemo(LFrom.PublicKey, 'Hello from SolLib'))
.Build(LFrom);
LSignature := LRpc.SendTransaction(LTxBytes);
Writeln(Format('Transaction Signature: %s', [LSignature]));
end;Samples can be found in the SolLib.Examples folder.
This project is licensed under the MIT License - see the LICENSE file for details.