{"id":14971411,"url":"https://github.com/sava-software/sava","last_synced_at":"2025-10-26T15:30:34.023Z","repository":{"id":252399635,"uuid":"840338599","full_name":"sava-software/sava","owner":"sava-software","description":"Solana Java SDK","archived":false,"fork":false,"pushed_at":"2025-01-28T21:34:11.000Z","size":578,"stargazers_count":16,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-28T21:35:24.575Z","etag":null,"topics":["base58","borsh","ed25519","java","solana"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sava-software.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":null},"created_at":"2024-08-09T13:34:18.000Z","updated_at":"2025-01-28T21:27:49.000Z","dependencies_parsed_at":"2024-11-21T15:22:26.406Z","dependency_job_id":"2ed84f72-b6e4-4255-aeae-db821aa6e444","html_url":"https://github.com/sava-software/sava","commit_stats":{"total_commits":101,"total_committers":2,"mean_commits":50.5,"dds":0.1188118811881188,"last_synced_commit":"cb30f48687f2b939c9484a473dc54fa99cf2a03c"},"previous_names":["sava-software/sava"],"tags_count":150,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sava-software%2Fsava","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sava-software%2Fsava/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sava-software%2Fsava/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sava-software%2Fsava/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sava-software","download_url":"https://codeload.github.com/sava-software/sava/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238347912,"owners_count":19457014,"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":["base58","borsh","ed25519","java","solana"],"created_at":"2024-09-24T13:45:09.730Z","updated_at":"2025-10-26T15:30:34.018Z","avatar_url":"https://github.com/sava-software.png","language":"Java","readme":"![Sava](assets/images/solana_java_cup.svg)\n\n# Sava [![Gradle Check](https://github.com/sava-software/sava/actions/workflows/build.yml/badge.svg)](https://github.com/sava-software/sava/actions/workflows/build.yml) [![Publish Release](https://github.com/sava-software/sava/actions/workflows/publish.yml/badge.svg)](https://github.com/sava-software/sava/actions/workflows/publish.yml)\n\n## Documentation\n\nUser documentation lives at [sava.software](https://sava.software/).\n\n* [Dependency Configuration](https://sava.software/quickstart)\n* [Core](https://sava.software/libraries/core): Common Solana cryptography and serialization utilities.\n* [RPC](https://sava.software/libraries/rpc): HTTP and WebSocket Clients.\n\n## Contributions\n\nPlease note that all contributions require agreeing to\nthe [Sava Engineering, Inc. CLA](https://gist.github.com/jpe7s/09546e42783187c6d04f38e04184ecfa).\n\nTests are needed and welcomed. Otherwise, [please reach out](https://github.com/sava-software) before working on a pull\nrequest.\n\n### RPC Tests\n\nA mini framework for testing RPC calls is provided to make it as easy as possible to test the calls you rely on.\nSee [RoundTripRpcRequestTests](sava-rpc/src/test/java/software/sava/rpc/json/http/client/RoundTripRpcRequestTests.java)\nfor example usage.\n\n* If you plan to add several tests, create a new class to avoid merge conflicts.\n* If you feel there is already enough response test coverage, you can [skip it by only providing the expected request\n  JSON.](https://github.com/sava-software/sava/blob/55e41207d932708affd05be54168f6bfb6105ec6/sava-rpc/src/test/java/software/sava/rpc/json/http/client/RoundTripRpcRequestTests.java#L30)\n  * See [ParseRpcResponseTests](sava-rpc/src/test/java/software/sava/rpc/json/http/client/ParseRpcResponseTests.java)\n    for additional response parsing tests.\n* If the response JSON is large, add it to the [resource](sava-rpc/src/test/resources/rpc_response_data) directory as a\n  JSON file.\n  * If the JSON file is larger than 1MB, apply zip compression to it.\n  * If it is large because it is a collection of items, consider trimming the list down to at least two items.\n\n#### Capture Request JSON\n\n* Start a test with the desired call, the test will fail with the difference between the expected and actual requests.\n\n```java\n\n@Test\nvoid getHealth() {\n  registerRequest(\"{}\");\n  rpcClient.getHealth().join();\n}\n```\n\n```text\nSEVERE: Expected request body does not match the actual. Note: The JSON RPC \"id\" does not matter.\n - expected: {}\n - actual:   {\"jsonrpc\":\"2.0\",\"id\":123,\"method\":\"getHealth\"}\n```\n\n* Or, enable debug logging by using a [logging.properties](logging.properties) file and pass it to the VM via:\n\n``` \n-Djava.util.logging.config.file=logging.properties\n```\n\n#### Capture Response JSON\n\n```java\nvar rpcClient = SolanaRpcClient.build().testResponse((_, body) -\u003e {\n  final var json = new String(body);\n  System.out.println(json); // Write to a file if large.\n  return true;\n}).createClient();\n```\n\n#### Validation\n\nReference the [official Solana RPC documentation](https://solana.com/docs/rpc/http) to verify that the expected\nparameters are passed in the request, and if applicable, all the desired response data is parsed correctly.\n\n## Build\n\n[Generate a classic token](https://github.com/settings/tokens) with the `read:packages` scope needed to access\ndependencies hosted on GitHub Package Repository.\n\n#### ~/.gradle/gradle.properties\n\n```properties\nsavaGithubPackagesUsername=GITHUB_USERNAME\nsavaGithubPackagesPassword=GITHUB_TOKEN\n```\n\n```shell\n./gradlew check\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsava-software%2Fsava","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsava-software%2Fsava","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsava-software%2Fsava/lists"}