diff --git a/src/main/tjava/com/r35157/libs/solana/impl/ref/SolanaBlockChainImpl.tjava b/src/main/tjava/com/r35157/libs/solana/impl/ref/SolanaBlockChainImpl.tjava index 3dde8cb..938d4dd 100644 --- a/src/main/tjava/com/r35157/libs/solana/impl/ref/SolanaBlockChainImpl.tjava +++ b/src/main/tjava/com/r35157/libs/solana/impl/ref/SolanaBlockChainImpl.tjava @@ -392,6 +392,52 @@ public class SolanaBlockChainImpl implements SolanaBlockChain { return Set.copyOf(accountInfos); } + private String createGetProgramAccountsBody( + ΩSolanaProgramIdΩ programId, + Set filters + ) throws IOException { + StringBuilder filtersJson = new StringBuilder(); + + boolean first = true; + for (SolanaProgramAccountMemcmpFilter filter : filters) { + if (!first) { + filtersJson.append(","); + } + + filtersJson.append(""" + { + "memcmp": { + "offset": %d, + "bytes": "%s" + } + } + """.formatted( + filter.offset(), + filter.bytes() + )); + + first = false; + } + + return """ + { + "jsonrpc": "2.0", + "id": 1, + "method": "getProgramAccounts", + "params": [ + "%s", + { + "commitment": "finalized", + "encoding": "base64", + "filters": [ + %s + ] + } + ] + } + """.formatted(programId, filtersJson); + } + private synchronized HttpResponse sendThrottled(HttpRequest request) throws IOException, InterruptedException { waitBeforeRemoteCall();