{"id":15297589,"url":"https://github.com/grapebaba/sui4j","last_synced_at":"2025-07-10T20:04:14.202Z","repository":{"id":63116057,"uuid":"562703610","full_name":"GrapeBaBa/sui4j","owner":"GrapeBaBa","description":"Sui4j is a robust, reactive, type safe Java library for working with Smart Contracts on the @MystenLabs/sui network.","archived":false,"fork":false,"pushed_at":"2024-01-30T13:40:39.000Z","size":1492,"stargazers_count":28,"open_issues_count":11,"forks_count":13,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-07T02:29:21.857Z","etag":null,"topics":["bcs","blockchain","java","jvm","move","sdk","sui"],"latest_commit_sha":null,"homepage":"https://grapebaba.github.io/sui4j/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GrapeBaBa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"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}},"created_at":"2022-11-07T04:22:44.000Z","updated_at":"2025-04-18T01:43:01.000Z","dependencies_parsed_at":"2024-01-31T20:55:06.882Z","dependency_job_id":null,"html_url":"https://github.com/GrapeBaBa/sui4j","commit_stats":{"total_commits":127,"total_committers":7,"mean_commits":"18.142857142857142","dds":0.3858267716535433,"last_synced_commit":"ec25db1464f9c4d79030052e9870938e0b3fd702"},"previous_names":[],"tags_count":68,"template":false,"template_full_name":null,"purl":"pkg:github/GrapeBaBa/sui4j","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrapeBaBa%2Fsui4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrapeBaBa%2Fsui4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrapeBaBa%2Fsui4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrapeBaBa%2Fsui4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GrapeBaBa","download_url":"https://codeload.github.com/GrapeBaBa/sui4j/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrapeBaBa%2Fsui4j/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264646823,"owners_count":23643489,"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":["bcs","blockchain","java","jvm","move","sdk","sui"],"created_at":"2024-09-30T19:18:25.300Z","updated_at":"2025-07-10T20:04:14.177Z","avatar_url":"https://github.com/GrapeBaBa.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![sui4j CI](https://github.com/GrapeBaBa/sui4j/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/GrapeBaBa/sui4j/actions/workflows/build.yml)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n![Coverage](.github/badges/jacoco.svg)\n![Branches](.github/badges/branches.svg)\n\n# Sui4j\n\nSui4j is a robust, reactive, type safe Java library for working with Smart Contracts on the\n[@MystenLabs/sui](https://docs.sui.io/) network.\n\nThis allows you to work with the [@MystenLabs/sui](https://docs.sui.io/) blockchain, without the\nadditional overhead of having to write your own integration code for the platform in JVM ecosystem.\n\n\n\u003e**WARNING**: Note that we are still iterating on the RPC and SDK API before TestNet, therefore please\nexpect frequent breaking changes in the short-term. We expect the API to stabilize after the\nupcoming TestNet launch.\n\n## Using\n\nThe latest 1.0.0-alpha version tested with sui v1.0.0 version.(dynamic field api will be added soon)\n\n### Maven\n\n```xml\n\u003c!-- https://mvnrepository.com/artifact/me.grapebaba/sui4j --\u003e\n\u003cdependency\u003e\n\u003cgroupId\u003eme.grapebaba\u003c/groupId\u003e\n\u003cartifactId\u003esui4j\u003c/artifactId\u003e\n\u003cversion\u003e1.0.0-alpha\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Gradle\n\n```groovy\n// https://mvnrepository.com/artifact/me.grapebaba/sui4j\nimplementation 'me.grapebaba:sui4j:1.0.0-alpha'\n```\n\n## Building Locally\n\nTo get started you need to install JDK8+, then run the following command:\n\n```bash\n$ ./gradlew build\n```\n\n## Javadoc\n\nFor the latest javadocs for the `main` branch, run `./gradlew javadoc` and open\nthe document under the `build/docs/javadoc/index.html` in your browser.\n\n## Testing\n\n### To run unit tests\n\n```\n./gradlew test\n```\n\n### To run E2E tests against local network\n\nYou can start sui local network refer\nto [sui-local-network](https://github.com/MystenLabs/sui/blob/main/doc/src/build/sui-local-network.md)\ndoc.\n\n#### Start local network\n\n```\ngit clone git@github.com:MystenLabs/sui.git\ncd sui\nRUST_LOG=\"consensus=off\" cargo run --bin sui-test-validator\n```\n\n#### To run Integration tests\n\n```\n./gradlew integrationTest\n```\n\n## How to use it\n\n- local-fullnode:http://127.0.0.1:9000\n- local-faucet:http://localhost:9123\n- devnet-fullnode:https://fullnode.devnet.sui.io\n- devnet-faucet:https://faucet.devnet.sui.io\n\n### Connecting to Sui Network\n```java\nSui sui = new Sui(\"\u003cfull_node_url\u003e\",\"\u003cfaucet_url\u003e\",\"\u003cyour_keystore_path\u003e\");\n```\n\n### New Address\n```java\nKeyResponse keyRes = sui.newAddress(SignatureScheme.ED25519);\n```\n\n### Request Faucet\n```java\nCompletableFuture\u003cFaucetResponse\u003e faucetRes = sui.requestSuiFromFaucet(s);\n```\n\n### Writing APIs\n\n#### Move Call\n```java\nCompletableFuture\u003cTransactionBlockResponse\u003e callRes =\n\tsui.moveCall(\n\t\t\"0x0a7421363a1f6a82800f7c9340ac02b5905798cb\",\n\t\t\"0x02\",\n\t\t\"pay\",\n\t\t\"split\",\n\t\tLists.newArrayList(structType),\n\t\tLists.newArrayList(\"0x4b89576d18d500194f14c935bc8b297a8e1556f3217e5f125ae3d1c0f13408f9\", 10000L),\n\t\tnull,\n\t\t3000000L,\n\t\tnull,\n\t\tnull,\n\t\ttransactionBlockResponseOptions,\n\t\tExecuteTransactionRequestType.WaitForLocalExecution);\n```\n\n#### Transfer Object\n```java\nCompletableFuture\u003cTransactionBlockResponse\u003e res =\n\tsui.transferObjects(\n\t\tsender.get(),\n\t\tLists.newArrayList(objects.get(0).getData().getObjectId()),\n\t\trecipient.get(),\n\t\tnull,\n\t\t3000000L,\n\t\tnull,\n\t\tnull,\n\t\ttransactionBlockResponseOptions,\n\t\tExecuteTransactionRequestType.WaitForLocalExecution);\n```\n\n#### Publish\n```java\nCompletableFuture\u003cTransactionBlockResponse\u003e res =\n\tsui.publish(\n\t\tsender.get(),\n\t\tLists.newArrayList(\n\t\t\t\"oRzrCwYAAAAKAQAUAhQsA0BJBIkBEgWbAWcHggLNAgjPBGAGrwXCAwrxCC0MngnUAQAMAR4B\"\n\t\t\t\t+ \"JAIRAh0CHwIlAiYCJwIoAAACAAABDAAAAwQAAQQHAQAAAgYHAAMCDAEIAQQIBAAFBQwABwcCAAkJ\"\n\t\t\t\t+ \"BwAAFgABAAEcARUBAAEjFBUBAAIpCwwAAwoNAQEIAxoJCgEIBBoSEwAFDgYHAQIGIREBAQwGJREB\"\n\t\t\t\t+ \"AQgHIg4PAAgXBAUBAgkbCxYACwMHAwUIBAgIEAgHAgwBDAkIAggABwgIAAILBQEIAQgHAQgAAQYJ\"\n\t\t\t\t+ \"AAEBAgkABwgIAQgHAQgBAgYIBwcICAELBQEJAAEKAgEIBAMHCwUBCQAKCAQKCAQBBggIAQUBCwUB\"\n\t\t\t\t+ \"CAECCQAFAQcICAEIBgEJAAELAwEJAAEICQVCT0FSUwRCb2FyB0Rpc3BsYXkITWV0YWRhdGEGT3B0\"\n\t\t\t\t+ \"aW9uCVB1Ymxpc2hlcgZTdHJpbmcJVHhDb250ZXh0A1VJRANVcmwMYWRkX211bHRpcGxlA2FnZQVi\"\n\t\t\t\t+ \"b2FycwVidXllcgVjbGFpbQdjcmVhdG9yC2Rlc2NyaXB0aW9uB2Rpc3BsYXkLZHVtbXlfZmllbGQI\"\n\t\t\t\t+ \"ZnVsbF91cmwCaWQHaW1nX3VybARpbml0E2lzX29uZV90aW1lX3dpdG5lc3MIbWV0YWRhdGEEbmFt\"\n\t\t\t\t+ \"ZQNuZXcVbmV3X3Vuc2FmZV9mcm9tX2J5dGVzBG5vbmUGb2JqZWN0Bm9wdGlvbgdwYWNrYWdlBXBy\"\n\t\t\t\t+ \"aWNlD3B1YmxpY190cmFuc2ZlcgZzZW5kZXIEc29tZQZzdHJpbmcIdHJhbnNmZXIKdHhfY29udGV4\"\n\t\t\t\t+ \"dAV0eXBlcwN1cmwEdXRmOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\"\n\t\t\t\t+ \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgMI\"\n\t\t\t\t+ \"AAAAAAAAAAAKAgUEbmFtZQoCDAtkZXNjcmlwdGlvbgoCCAdpbWdfdXJsCgIIB2NyZWF0b3IKAgYF\"\n\t\t\t\t+ \"cHJpY2UKAgwLcHJvamVjdF91cmwKAgQDYWdlCgIGBWJ1eWVyCgIJCGZ1bGxfdXJsCgIODWVzY2Fw\"\n\t\t\t\t+ \"ZV9zeW50YXgKAgcGe25hbWV9CgI7OlVuaXF1ZSBCb2FyIGZyb20gdGhlIEJvYXJzIGNvbGxlY3Rp\"\n\t\t\t\t+ \"b24gd2l0aCB7bmFtZX0gYW5kIHtpZH0KAiEgaHR0cHM6Ly9nZXQtYS1ib2FyLmNvbS97aW1nX3Vy\"\n\t\t\t\t+ \"bH0KAgoJe2NyZWF0b3J9CgIIB3twcmljZX0KAhgXaHR0cHM6Ly9nZXQtYS1ib2FyLmNvbS8KAg8O\"\n\t\t\t\t+ \"e21ldGFkYXRhLmFnZX0KAggHe2J1eWVyfQoCCwp7ZnVsbF91cmx9CgIJCFx7bmFtZVx9CgIKCWZp\"\n\t\t\t\t+ \"cnN0LnBuZwoCCwpGaXJzdCBCb2FyCgImJUZpcnN0IEJvYXIgZnJvbSB0aGUgQm9hcnMgY29sbGVj\"\n\t\t\t\t+ \"dGlvbiEKAgYFQ2hyaXMKAiAfaHR0cHM6Ly9nZXQtYS1ib2FyLmZ1bGx1cmwuY29tLwACARIBAQIJ\"\n\t\t\t\t+ \"FAgGFQgEGQgEEAgEDwsDAQgEIAsDAQgEGAgCDQUTCAkCAgELAwAAAAACXw4AOAAEBAUICwEBBwAn\"\n\t\t\t\t+ \"CwAKATgBDAMOAwoBOAIMAg0CBwERAwcCEQMHAxEDBwQRAwcFEQMHBhEDBwcRAwcIEQMHCREDBwoR\"\n\t\t\t\t+ \"A0AMCgAAAAAAAAAHCxEDBwwRAwcNEQMHDhEDBw8RAwcQEQMHEREDBxIRAwcTEQMHFBEDQAwKAAAA\"\n\t\t\t\t+ \"AAAAADgDCwIKAS4RCjgECwMKAS4RCjgFCgERBgcVEQMHFhEDBxcRAwcYEQM4BjgHBgoAAAAAAAAA\"\n\t\t\t\t+ \"EgIKAS4RCgcZEQwSAQsBLhEKOAgCAA==\"),\n\t\tLists.newArrayList(\n\t\t\t\"0x0000000000000000000000000000000000000000000000000000000000000001\",\n\t\t\t\"0x0000000000000000000000000000000000000000000000000000000000000002\"),\n\t\tnull,\n\t\t30000000L,\n\t\tnull,\n\t\tnull,\n\t\ttransactionBlockResponseOptions,\n\t\tExecuteTransactionRequestType.WaitForLocalExecution);\n```\n\n### Reading APIs\n\n#### Get Owned Objects\n```java\nCompletableFuture\u003cPaginatedObjectsResponse\u003e res =\n\tsui.getObjectsOwnedByAddress(sender.get(), null, null, null);\n```\n\n#### Get Coins\n```java\nCompletableFuture\u003cPaginatedCoins\u003e res = sui.getAllCoins(sender.get(), null, null);\n```\n\n#### Get Transaction Block\n```java\nCompletableFuture\u003cPaginatedTransactionResponse\u003e res =\n\tsui.queryTransactionBlocks(query, null, 10, false);\n```\n\n### Event APIs\n\n#### Subscribe\n```java\nDisposable disposable =\n\tsui.subscribeEvent(eventFilter, System.out::println, System.out::println);\n\ndisposable.dispose();\n```\n\nFor more examples, you can see [SuiIntTests](src/integrationTest/java/io/sui/SuiIntTests.java)\n\n## Contribution\nTo help sui4j grow, follow [Contributing to sui4j](CONTRIBUTING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrapebaba%2Fsui4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrapebaba%2Fsui4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrapebaba%2Fsui4j/lists"}